-Subproject commit c152d5ee921ab7d8176e1124b8cb0146376bb579
+Subproject commit db7cb7cb9548c5c8dbf3b620cd5b9fa3415bb9a5
return values()[2 + (value & 1)];
}
+ public static Bit of(boolean binaryValue)
+ {
+ return binaryValue ? ONE : ZERO;
+ }
+
public static Bit parse(String s)
{
Bit bit = SYMBOL_MAP.get(s);
/**
* Immutable class representing a {@link Bit}Vector
*
- *
* @author Christian Femers
*
*/
private BitVector(Bit[] bits)
{
- this.bits = Objects.requireNonNull(bits);// do this first to "catch" bits==null before the foreach loop
+ this.bits = Objects.requireNonNull(bits); // do this first to "catch" bits==null before the foreach loop
for (Bit bit : bits)
if (bit == null)
throw new NullPointerException();
return BitVectorMutator.of(this);
}
- public Bit getBit(int bitIndex)
+ /**
+ * Returns the most significant bit at <code>bitIndex</code>. (leftmost bit of a binary number at the given index)
+ */
+ public Bit getMSBit(int bitIndex)
{
return bits[bitIndex];
}
+ /**
+ * Returns the least significant bit at <code>bitIndex</code>. (rightmost bit of a binary number at the given index)
+ */
+ public Bit getLSBit(int bitIndex)
+ {
+ return bits[bits.length - bitIndex - 1];
+ }
+
public Bit[] getBits()
{
return bits.clone();
return this;
}
- public void setBit(int bitIndex, Bit bit)
+ /**
+ * Set the most significant bit at <code>bitIndex</code>. (leftmost bit of a binary number at the given index)
+ */
+ public void setMSBit(int bitIndex, Bit bit)
{
bits[bitIndex] = bit;
}
- public Bit getBit(int bitIndex)
+ /**
+ * Set the least significant bit at <code>bitIndex</code>. (rightmost bit of a binary number at the given index)
+ */
+ public void setLSBit(int bitIndex, Bit bit)
+ {
+ bits[bits.length - bitIndex - 1] = bit;
+ }
+
+ /**
+ * Returns the most significant bit at <code>bitIndex</code>. (leftmost bit of a binary number at the given index)
+ */
+ public Bit getMSBit(int bitIndex)
{
return bits[bitIndex];
}
+ /**
+ * Returns the least significant bit at <code>bitIndex</code>. (rightmost bit of a binary number at the given index)
+ */
+ public Bit getLSBit(int bitIndex)
+ {
+ return bits[bits.length - bitIndex - 1];
+ }
+
public int length()
{
return bits.length;
return Arrays.equals(bits, offset, offset + other.length(), other.bits, 0, other.length());
}
- @Override
- public String toString()
- {
- return toBitStringMSBFirst();
- }
-
- /**
- * All {@link Bit}s symbols concatenated together
- *
- * @see #parse(String)
- */
- public String toBitStringLSBFirst()
- {
- StringBuilder sb = new StringBuilder(bits.length);
- for (Bit bit : bits)
- sb.append(bit);
- return sb.toString();
- }
-
/**
- * All {@link Bit}s symbols concatenated together, with the MSB coming first (like a binary number)
+ * All {@link Bit}s symbols concatenated together (MSB first)
*
* @see #parse(String)
*/
- public String toBitStringMSBFirst()
+ @Override
+ public String toString()
{
StringBuilder sb = new StringBuilder(bits.length);
for (Bit bit : bits)
sb.append(bit);
- sb.reverse();
return sb.toString();
}
/**
- * Parses a String containing solely {@link Bit} symbols
+ * Parses a String containing solely {@link Bit} symbols (MSB first)
*
- * @see #toBitStringLSBFirst()
+ * @see #toString()
*/
- public static BitVector parseLSBFirst(String s)
+ public static BitVector parse(String s)
{
Bit[] values = new Bit[s.length()];
for (int i = 0; i < s.length(); i++)
}
/**
- * Parses a String containing solely {@link Bit} symbols, with the MSB coming first (like a binary number)
- *
- * @see #toBitStringLSBFirst()
+ * Iterate over the {@link Bit}s of the BitVector <b>from MSB to LSB</b> (left to right).
*/
- public static BitVector parseMSBFirst(String s)
- {
- Bit[] values = new Bit[s.length()];
- for (int i = 0, j = s.length() - 1; j >= 0; i++, j--)
- {
- values[i] = Bit.parse(s, j);
- }
- return new BitVector(values);
- }
-
@Override
public Iterator<Bit> iterator()
{
{
if (!hasNext())
throw new NoSuchElementException();
- return getBit(pos++);
+ return getMSBit(pos++);
}
@Override
{
if (bitVector == null)
return "null";
- return bitVector.toBitStringMSBFirst();
+ return bitVector.toString();
}
// TODO doesn't this belong to logic.ui?
// TODO maybe find a color assignment for multiple-bit bit vectors?
if (bitVector == null || bitVector.length() != 1)
return new ColorDefinition(BuiltInColor.COLOR_BLACK);
- switch (bitVector.getBit(0))
+ switch (bitVector.getLSBit(0))
{
case ONE:
return Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.bit.one");
case ZERO:
return Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.bit.zero");
default:
- throw new IllegalArgumentException("Unknown enum constant: " + bitVector.getBit(0));
+ throw new IllegalArgumentException("Unknown enum constant: " + bitVector.getLSBit(0));
}
}
return val;
}
+ /**
+ * Returns the least significant bit (LSB)
+ */
public Bit getValue()
{
return getValue(0);
}
+ /**
+ * Returns the least significant bit (LSB) of the given index
+ */
public Bit getValue(int index)
{
- return values.getBit(index);
+ return values.getLSBit(index);
}
public BitVector getValues(int start, int end)
}
/**
- * @return The value (of bit 0) the {@link ReadEnd} is currently feeding into the associated {@link Wire}.
+ * @return The value (of bit 0) the {@link ReadEnd} is currently feeding into the associated {@link Wire}.Returns the least
+ * significant bit (LSB)
*/
public Bit getInputValue()
{
/**
* @return The value which the {@link ReadEnd} is currently feeding into the associated {@link Wire} at the indexed {@link Bit}.
+ * Returns the least significant bit (LSB)
+ *
*/
public Bit getInputValue(int index)
{
- return inputValues.getBit(index);
+ return inputValues.getLSBit(index);
}
/**
*/
public BitVector getInputValues()
{
- return getInputValues(0, length);
+ return inputValues;
}
public BitVector getInputValues(int start, int end)
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+ <attributes>
+ <attribute name="module" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" output="bin/src" path="src"/>
+ <classpathentry kind="src" output="bin/test" path="test">
+ <attributes>
+ <attribute name="test" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>net.mograsim.logic.model.am2900</name>
+ <comment></comment>
+ <projects>
+ <project>net.mograsim.logic.ui</project>
+ <project>SWTZoomableCanvas</project>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=140
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.lineSplit=140
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
--- /dev/null
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_MoGraSim
+formatter_settings_version=16
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
--- /dev/null
+mograsim version: 0.1.1
+{
+ "type": "SimpleRectangularSubmodelComponent",
+ "width": 35.0,
+ "height": 30.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Z",
+ "logicWidth": 1
+ }
+ ],
+ "composition": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 5.0,
+ "y": 40.0
+ },
+ "type": "class:net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder",
+ "params": {}
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 7.5
+ },
+ "type": "class:net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder",
+ "params": {}
+ },
+ {
+ "pos": {
+ "x": 57.5,
+ "y": 40.0
+ },
+ "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+ "params": {
+ "logicWidth": 1
+ }
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compId": 0,
+ "pinName": "A"
+ },
+ "pin2": {
+ "compId": 2,
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compId": 0,
+ "pinName": "B"
+ },
+ "pin2": {
+ "compId": 1,
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compId": 0,
+ "pinName": "C"
+ },
+ "pin2": {
+ "compId": 1,
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compId": 1,
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compId": 2,
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compId": 1,
+ "pinName": "_Z"
+ },
+ "pin2": {
+ "compId": 3,
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compId": 2,
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compId": 0,
+ "pinName": "Y"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compId": 2,
+ "pinName": "_Z"
+ },
+ "pin2": {
+ "compId": 3,
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 82.5,
+ "y": 22.5
+ },
+ {
+ "x": 82.5,
+ "y": 35.0
+ },
+ {
+ "x": 52.5,
+ "y": 35.0
+ },
+ {
+ "x": 52.5,
+ "y": 45.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compId": 3,
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compId": 0,
+ "pinName": "Z"
+ }
+ }
+ ]
+ },
+ "specialized": {
+ "input_count": 3,
+ "label": "GUIfulladder",
+ "logic_width": 1,
+ "output_count": 2
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.1
+{
+ "type": "SimpleRectangularSubmodelComponent",
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "_Z",
+ "logicWidth": 1
+ }
+ ],
+ "composition": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 15.0
+ },
+ "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+ "params": {
+ "logicWidth": 1
+ }
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 2.5
+ },
+ "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+ "params": {
+ "logicWidth": 1
+ }
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 27.5
+ },
+ "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+ "params": {
+ "logicWidth": 1
+ }
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 2.5
+ },
+ "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+ "params": {
+ "logicWidth": 1
+ }
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 11.5
+ },
+ "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
+ "params": {
+ "logicWidth": 1
+ }
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 36.5
+ },
+ "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
+ "params": {
+ "logicWidth": 1
+ }
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 24.0
+ },
+ "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
+ "params": {
+ "logicWidth": 1
+ }
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compId": 0,
+ "pinName": "A"
+ },
+ "pin2": {
+ "compId": 5,
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compId": 5,
+ "pinName": ""
+ },
+ "pin2": {
+ "compId": 2,
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compId": 5,
+ "pinName": ""
+ },
+ "pin2": {
+ "compId": 1,
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compId": 0,
+ "pinName": "B"
+ },
+ "pin2": {
+ "compId": 6,
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compId": 6,
+ "pinName": ""
+ },
+ "pin2": {
+ "compId": 3,
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compId": 6,
+ "pinName": ""
+ },
+ "pin2": {
+ "compId": 1,
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compId": 1,
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compId": 7,
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compId": 7,
+ "pinName": ""
+ },
+ "pin2": {
+ "compId": 0,
+ "pinName": "_Z"
+ },
+ "path": [
+ {
+ "x": 80.0,
+ "y": 25.0
+ },
+ {
+ "x": 80.0,
+ "y": 37.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compId": 7,
+ "pinName": ""
+ },
+ "pin2": {
+ "compId": 2,
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compId": 7,
+ "pinName": ""
+ },
+ "pin2": {
+ "compId": 3,
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compId": 2,
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compId": 4,
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 62.5,
+ "y": 12.5
+ },
+ {
+ "x": 62.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compId": 3,
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compId": 4,
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 62.5,
+ "y": 37.5
+ },
+ {
+ "x": 62.5,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compId": 4,
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compId": 0,
+ "pinName": "Y"
+ },
+ "path": []
+ }
+ ]
+ },
+ "specialized": {
+ "input_count": 2,
+ "label": "GUIhalfadder",
+ "logic_width": 1,
+ "output_count": 2
+ }
+}
\ No newline at end of file
--- /dev/null
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: net.mograsim.logic.model.am2900;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Export-Package: net.mograsim.logic.model.examples,
+ net.mograsim.logic.model.model.components.mi.nandbased,
+ net.mograsim.logic.model.model.components.mi.nandbased.am2901
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Require-Bundle: net.mograsim.logic.model;bundle-version="0.1.0";visibility:=reexport
+Automatic-Module-Name: net.mograsim.logic.ui
+Bundle-Vendor: Mograsim Team
--- /dev/null
+#Properties file for net.mograsim.logic.ui
+Bundle-Vendor = Mograsim Team
+Bundle-Name = Mograsim Am2900 logic
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.1
+{
+ "type": "SimpleRectangularSubmodelComponent",
+ "width": 35.0,
+ "height": 10.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "Input pin #0",
+ "logicWidth": 1
+ }
+ ],
+ "composition": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 0.0,
+ "y": 0.0
+ },
+ "type": "file:HalfAdder.json",
+ "params": {}
+ }
+ ],
+ "innerWires": []
+ },
+ "specialized": {
+ "input_count": 1,
+ "label": "Test",
+ "logic_width": 1,
+ "output_count": 0
+ }
+}
\ No newline at end of file
--- /dev/null
+source.. = src/
+bin.includes = META-INF/,\
+ .,\
+ OSGI-INF/
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "_Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "_R",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "_S",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 12.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 7.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 16.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "_S"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "_R"
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 37.5
+ },
+ {
+ "x": 35.0,
+ "y": 27.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 42.5
+ },
+ {
+ "x": 5.0,
+ "y": 42.5
+ },
+ {
+ "x": 5.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 17.5
+ },
+ {
+ "x": 35.0,
+ "y": 7.5
+ },
+ {
+ "x": 65.0,
+ "y": 7.5
+ },
+ {
+ "x": 65.0,
+ "y": 12.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "_Q"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "_rsLatch",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIand",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 50.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 71.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 46.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 96.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 7.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 57.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#2"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 32.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#1"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 82.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#3"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "GUIand#2",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "GUIand#3",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 112.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#3",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIand41",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 90.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "C1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "C2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "C3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "C4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 37.5
+ },
+ "id": "GUIor_4",
+ "name": "GUIor_4#0"
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 137.5
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#0"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 112.5
+ },
+ {
+ "x": 10.0,
+ "y": 142.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 137.5
+ },
+ {
+ "x": 5.0,
+ "y": 152.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 187.5
+ },
+ {
+ "x": 5.0,
+ "y": 172.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 212.5
+ },
+ {
+ "x": 10.0,
+ "y": 182.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C1"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 12.5
+ },
+ {
+ "x": 10.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C2"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 37.5
+ },
+ {
+ "x": 5.0,
+ "y": 52.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C3"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C4"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 87.5
+ },
+ {
+ "x": 5.0,
+ "y": 72.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 142.5
+ },
+ {
+ "x": 70.0,
+ "y": 120.0
+ },
+ {
+ "x": 30.0,
+ "y": 120.0
+ },
+ {
+ "x": 30.0,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 152.5
+ },
+ {
+ "x": 65.0,
+ "y": 125.0
+ },
+ {
+ "x": 25.0,
+ "y": 125.0
+ },
+ {
+ "x": 25.0,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 162.5
+ },
+ {
+ "x": 60.0,
+ "y": 130.0
+ },
+ {
+ "x": 20.0,
+ "y": 130.0
+ },
+ {
+ "x": 20.0,
+ "y": 102.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 172.5
+ },
+ {
+ "x": 55.0,
+ "y": 135.0
+ },
+ {
+ "x": 15.0,
+ "y": 135.0
+ },
+ {
+ "x": 15.0,
+ "y": 112.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIor_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 42.5
+ },
+ {
+ "x": 75.0,
+ "y": 12.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIor_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": [
+ {
+ "x": 80.0,
+ "y": 52.5
+ },
+ {
+ "x": 80.0,
+ "y": 37.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIor_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIor_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": [
+ {
+ "x": 80.0,
+ "y": 72.5
+ },
+ {
+ "x": 80.0,
+ "y": 87.5
+ }
+ ]
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIandor414",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 40.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y00",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y11",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y10",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y01",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "S0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "S1",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 2.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 52.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#2"
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 27.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#1"
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 77.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#3"
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 16.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 36.5,
+ "y": 61.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 66.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 41.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S0"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 62.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 67.5
+ },
+ {
+ "x": 32.5,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 37.5,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 37.5,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y00"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y01"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y10"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y11"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIdemux2",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "_Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "D",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.2,
+ "subComps": [
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 10.0
+ },
+ "id": "GUI_rsLatch",
+ "name": "GUI_rsLatch#0"
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 40.0
+ },
+ "id": "GUInand3",
+ "name": "GUInand3#0"
+ },
+ {
+ "pos": {
+ "x": 120.0,
+ "y": 60.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 120.0,
+ "y": 30.0
+ },
+ "id": "GUI_rsLatch",
+ "name": "GUI_rsLatch#1"
+ },
+ {
+ "pos": {
+ "x": 19.0,
+ "y": 64.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 99.0,
+ "y": 44.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 99.0,
+ "y": 34.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_R"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 55.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 145.0,
+ "y": 70.0
+ },
+ {
+ "x": 145.0,
+ "y": 85.0
+ },
+ {
+ "x": 20.0,
+ "y": 85.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_S"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_Q"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 35.0
+ },
+ {
+ "x": 30.0,
+ "y": 45.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#1",
+ "pinName": "_S"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUInand3#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#1",
+ "pinName": "_R"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 65.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUI_rsLatch#1",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUI_rsLatch#1",
+ "pinName": "_Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "_Q"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIdff",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "_Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "D",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "E",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 7.5
+ },
+ "id": "GUI_rsLatch",
+ "name": "GUI_rsLatch#0"
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "E"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 25.0
+ },
+ {
+ "x": 10.0,
+ "y": 25.0
+ },
+ {
+ "x": 10.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_S"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_R"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 37.5
+ },
+ {
+ "x": 40.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "_Q"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIdlatch",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 50.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Q1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Q2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Q3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Q4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 71.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 46.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 96.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 32.5
+ },
+ "id": "GUIdlatch",
+ "name": "GUIdlatch#1"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 7.5
+ },
+ "id": "GUIdlatch",
+ "name": "GUIdlatch#0"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 82.5
+ },
+ "id": "GUIdlatch",
+ "name": "GUIdlatch#3"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 57.5
+ },
+ "id": "GUIdlatch",
+ "name": "GUIdlatch#2"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 112.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch#3",
+ "pinName": "E"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch#2",
+ "pinName": "E"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch#1",
+ "pinName": "E"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch#0",
+ "pinName": "E"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "GUIdlatch#0",
+ "pinName": "D"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "GUIdlatch#1",
+ "pinName": "D"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "GUIdlatch#2",
+ "pinName": "D"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "GUIdlatch#3",
+ "pinName": "D"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch#0",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch#1",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch#2",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch#3",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIdlatch4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 30.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Z",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 57.5,
+ "y": 40.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 5.0,
+ "y": 40.0
+ },
+ "id": "GUIhalfadder",
+ "name": "GUIhalfadder#0"
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 7.5
+ },
+ "id": "GUIhalfadder",
+ "name": "GUIhalfadder#1"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A"
+ },
+ "pin2": {
+ "compName": "GUIhalfadder#1",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "GUIhalfadder#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "GUIhalfadder#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIhalfadder#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIhalfadder#1",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIhalfadder#0",
+ "pinName": "_Z"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIhalfadder#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIhalfadder#1",
+ "pinName": "_Z"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 82.5,
+ "y": 22.5
+ },
+ {
+ "x": 82.5,
+ "y": 35.0
+ },
+ {
+ "x": 52.5,
+ "y": 35.0
+ },
+ {
+ "x": 52.5,
+ "y": 45.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Z"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIfulladder",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "_Z",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "_Z"
+ },
+ "path": [
+ {
+ "x": 80.0,
+ "y": 25.0
+ },
+ {
+ "x": 80.0,
+ "y": 37.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 62.5,
+ "y": 12.5
+ },
+ {
+ "x": 62.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 62.5,
+ "y": 37.5
+ },
+ {
+ "x": 62.5,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIhalfadder",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 30.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "S0",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 22.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 7.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 60.0,
+ "y": 30.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 21.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 47.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S0"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0"
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 52.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUImux1",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 90.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I0_1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "I0_3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "I1_2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I0_2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "I1_1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "I1_4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "S0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "I0_4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "I1_3",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 112.5
+ },
+ "id": "GUImux1",
+ "name": "GUImux1#3"
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 46.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 7.5
+ },
+ "id": "GUImux1",
+ "name": "GUImux1#0"
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 81.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 77.5
+ },
+ "id": "GUImux1",
+ "name": "GUImux1#2"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 42.5
+ },
+ "id": "GUImux1",
+ "name": "GUImux1#1"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S0"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "S0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0_1"
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 37.5
+ },
+ {
+ "x": 5.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1_1"
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 137.5
+ },
+ {
+ "x": 10.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1#1",
+ "pinName": "S0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0_2"
+ },
+ "pin2": {
+ "compName": "GUImux1#1",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 62.5
+ },
+ {
+ "x": 5.0,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1_2"
+ },
+ "pin2": {
+ "compName": "GUImux1#1",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 162.5
+ },
+ {
+ "x": 15.0,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1#2",
+ "pinName": "S0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0_3"
+ },
+ "pin2": {
+ "compName": "GUImux1#2",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 87.5
+ },
+ {
+ "x": 5.0,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1_3"
+ },
+ "pin2": {
+ "compName": "GUImux1#2",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 187.5
+ },
+ {
+ "x": 20.0,
+ "y": 102.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1#3",
+ "pinName": "S0"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 117.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0_4"
+ },
+ "pin2": {
+ "compName": "GUImux1#3",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 112.5
+ },
+ {
+ "x": 5.0,
+ "y": 127.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1_4"
+ },
+ "pin2": {
+ "compName": "GUImux1#3",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 212.5
+ },
+ {
+ "x": 25.0,
+ "y": 137.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUImux1_4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 30.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 62.5,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 57.5,
+ "y": 25.0
+ },
+ {
+ "x": 57.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 62.5
+ },
+ {
+ "x": 60.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUInand3",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 40.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 77.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 52.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 86.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 61.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUInot4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 40.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.2,
+ "subComps": [
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 65.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 165.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 115.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 74.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 174.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 124.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 104.0,
+ "y": 149.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 104.0,
+ "y": 49.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 140.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 140.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 40.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 110.0,
+ "y": 140.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 110.0,
+ "y": 40.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 70.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 120.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 170.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 80.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 130.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 45.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 55.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 145.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 155.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#8",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIor4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 80.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "B4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 77.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 52.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 77.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 52.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 86.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 61.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 136.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 111.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 186.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 161.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 127.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 102.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 177.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 152.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 107.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 117.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 132.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 142.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 157.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 167.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 182.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 192.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 12.5
+ },
+ {
+ "x": 40.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 112.5
+ },
+ {
+ "x": 45.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 37.5
+ },
+ {
+ "x": 40.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 137.5
+ },
+ {
+ "x": 50.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 62.5
+ },
+ {
+ "x": 40.0,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 162.5
+ },
+ {
+ "x": 55.0,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 87.5
+ },
+ {
+ "x": 40.0,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 187.5
+ },
+ {
+ "x": 60.0,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#8",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#9",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#10",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#11",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIor_4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 90.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "QA1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "QB2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "QB1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "QA3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 75.0
+ },
+ "name": "QB4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "QA2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 65.0
+ },
+ "name": "QB3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "QA4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "B0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "WE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.1,
+ "subComps": [
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 649.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 639.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 129.0,
+ "y": 329.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#16",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 659.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 119.0,
+ "y": 349.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#18",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 124.0,
+ "y": 339.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#17",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 114.0,
+ "y": 359.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#19",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 104.0,
+ "y": 164.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 109.0,
+ "y": 154.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 94.0,
+ "y": 184.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 99.0,
+ "y": 174.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 649.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 549.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 809.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 749.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 489.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 479.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 499.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 629.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 509.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 735.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#5"
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 435.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#3"
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 585.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#4"
+ },
+ {
+ "pos": {
+ "x": 235.0,
+ "y": 635.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#1"
+ },
+ {
+ "pos": {
+ "x": 235.0,
+ "y": 785.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#2"
+ },
+ {
+ "pos": {
+ "x": 235.0,
+ "y": 485.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#0"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 475.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#1"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 325.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#0"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 775.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#3"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 625.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#2"
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 325.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#2"
+ },
+ {
+ "pos": {
+ "x": 119.0,
+ "y": 799.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#30",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 114.0,
+ "y": 809.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#31",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 130.0,
+ "y": 150.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#0"
+ },
+ {
+ "pos": {
+ "x": 235.0,
+ "y": 375.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#1"
+ },
+ {
+ "pos": {
+ "x": 124.0,
+ "y": 639.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#25",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 129.0,
+ "y": 629.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#24",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 114.0,
+ "y": 659.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#27",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 119.0,
+ "y": 649.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#26",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 124.0,
+ "y": 789.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#29",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 129.0,
+ "y": 779.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#28",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 150.0
+ },
+ "id": "GUIdemux2",
+ "name": "GUIdemux2#1"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 45.0
+ },
+ "id": "GUIdemux2",
+ "name": "GUIdemux2#0"
+ },
+ {
+ "pos": {
+ "x": 124.0,
+ "y": 489.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#21",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 129.0,
+ "y": 479.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#20",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 114.0,
+ "y": 509.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#23",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 119.0,
+ "y": 499.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#22",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A0"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#0",
+ "pinName": "S0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#0",
+ "pinName": "S1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 150.0
+ },
+ {
+ "x": 10.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B0"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#1",
+ "pinName": "S0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 250.0
+ },
+ {
+ "x": 5.0,
+ "y": 155.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#1",
+ "pinName": "S1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 350.0
+ },
+ {
+ "x": 10.0,
+ "y": 165.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y00"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y01"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y10"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y11"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "WE"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 450.0
+ },
+ {
+ "x": 5.0,
+ "y": 300.0
+ },
+ {
+ "x": 125.0,
+ "y": 300.0
+ },
+ {
+ "x": 125.0,
+ "y": 195.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 185.0,
+ "y": 155.0
+ },
+ {
+ "x": 185.0,
+ "y": 250.0
+ },
+ {
+ "x": 30.0,
+ "y": 250.0
+ },
+ {
+ "x": 30.0,
+ "y": 370.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 165.0
+ },
+ {
+ "x": 180.0,
+ "y": 245.0
+ },
+ {
+ "x": 25.0,
+ "y": 245.0
+ },
+ {
+ "x": 25.0,
+ "y": 520.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 175.0
+ },
+ {
+ "x": 175.0,
+ "y": 240.0
+ },
+ {
+ "x": 20.0,
+ "y": 240.0
+ },
+ {
+ "x": 20.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 170.0,
+ "y": 185.0
+ },
+ {
+ "x": 170.0,
+ "y": 235.0
+ },
+ {
+ "x": 15.0,
+ "y": 235.0
+ },
+ {
+ "x": 15.0,
+ "y": 820.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 850.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D1"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 330.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D2"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 340.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D3"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 350.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D4"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 360.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "D1"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 780.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "D2"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 790.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "D3"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 800.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y00"
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 50.0
+ },
+ {
+ "x": 210.0,
+ "y": 420.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y01"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 60.0
+ },
+ {
+ "x": 205.0,
+ "y": 570.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y10"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 70.0
+ },
+ {
+ "x": 200.0,
+ "y": 720.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y11"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 195.0,
+ "y": 80.0
+ },
+ {
+ "x": 195.0,
+ "y": 870.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 110.0,
+ "y": 370.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 520.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 820.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 380.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 390.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 400.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 410.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 530.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 540.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 550.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 560.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 680.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 690.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 700.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 710.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 830.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 840.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 850.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 860.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 380.0
+ },
+ {
+ "x": 290.0,
+ "y": 445.0
+ },
+ {
+ "x": 230.0,
+ "y": 445.0
+ },
+ {
+ "x": 230.0,
+ "y": 490.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 285.0,
+ "y": 390.0
+ },
+ {
+ "x": 285.0,
+ "y": 440.0
+ },
+ {
+ "x": 225.0,
+ "y": 440.0
+ },
+ {
+ "x": 225.0,
+ "y": 500.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 280.0,
+ "y": 400.0
+ },
+ {
+ "x": 280.0,
+ "y": 435.0
+ },
+ {
+ "x": 220.0,
+ "y": 435.0
+ },
+ {
+ "x": 220.0,
+ "y": 510.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 275.0,
+ "y": 410.0
+ },
+ {
+ "x": 275.0,
+ "y": 430.0
+ },
+ {
+ "x": 215.0,
+ "y": 430.0
+ },
+ {
+ "x": 215.0,
+ "y": 520.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 490.0
+ },
+ {
+ "x": 290.0,
+ "y": 595.0
+ },
+ {
+ "x": 230.0,
+ "y": 595.0
+ },
+ {
+ "x": 230.0,
+ "y": 640.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 285.0,
+ "y": 500.0
+ },
+ {
+ "x": 285.0,
+ "y": 590.0
+ },
+ {
+ "x": 225.0,
+ "y": 590.0
+ },
+ {
+ "x": 225.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 280.0,
+ "y": 510.0
+ },
+ {
+ "x": 280.0,
+ "y": 585.0
+ },
+ {
+ "x": 220.0,
+ "y": 585.0
+ },
+ {
+ "x": 220.0,
+ "y": 660.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 275.0,
+ "y": 520.0
+ },
+ {
+ "x": 275.0,
+ "y": 580.0
+ },
+ {
+ "x": 215.0,
+ "y": 580.0
+ },
+ {
+ "x": 215.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 640.0
+ },
+ {
+ "x": 290.0,
+ "y": 745.0
+ },
+ {
+ "x": 230.0,
+ "y": 745.0
+ },
+ {
+ "x": 230.0,
+ "y": 790.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 285.0,
+ "y": 650.0
+ },
+ {
+ "x": 285.0,
+ "y": 740.0
+ },
+ {
+ "x": 225.0,
+ "y": 740.0
+ },
+ {
+ "x": 225.0,
+ "y": 800.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 280.0,
+ "y": 660.0
+ },
+ {
+ "x": 280.0,
+ "y": 735.0
+ },
+ {
+ "x": 220.0,
+ "y": 735.0
+ },
+ {
+ "x": 220.0,
+ "y": 810.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 275.0,
+ "y": 670.0
+ },
+ {
+ "x": 275.0,
+ "y": 730.0
+ },
+ {
+ "x": 215.0,
+ "y": 730.0
+ },
+ {
+ "x": 215.0,
+ "y": 820.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA1"
+ },
+ "path": [
+ {
+ "x": 300.0,
+ "y": 790.0
+ },
+ {
+ "x": 300.0,
+ "y": 50.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA2"
+ },
+ "path": [
+ {
+ "x": 305.0,
+ "y": 800.0
+ },
+ {
+ "x": 305.0,
+ "y": 150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA3"
+ },
+ "path": [
+ {
+ "x": 310.0,
+ "y": 810.0
+ },
+ {
+ "x": 310.0,
+ "y": 250.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA4"
+ },
+ "path": [
+ {
+ "x": 315.0,
+ "y": 820.0
+ },
+ {
+ "x": 315.0,
+ "y": 350.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 190.0,
+ "y": 330.0
+ },
+ {
+ "x": 190.0,
+ "y": 430.0
+ },
+ {
+ "x": 130.0,
+ "y": 430.0
+ },
+ {
+ "x": 130.0,
+ "y": 440.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 185.0,
+ "y": 340.0
+ },
+ {
+ "x": 185.0,
+ "y": 425.0
+ },
+ {
+ "x": 125.0,
+ "y": 425.0
+ },
+ {
+ "x": 125.0,
+ "y": 450.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 350.0
+ },
+ {
+ "x": 180.0,
+ "y": 420.0
+ },
+ {
+ "x": 120.0,
+ "y": 420.0
+ },
+ {
+ "x": 120.0,
+ "y": 460.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 360.0
+ },
+ {
+ "x": 175.0,
+ "y": 415.0
+ },
+ {
+ "x": 115.0,
+ "y": 415.0
+ },
+ {
+ "x": 115.0,
+ "y": 470.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 190.0,
+ "y": 440.0
+ },
+ {
+ "x": 190.0,
+ "y": 580.0
+ },
+ {
+ "x": 130.0,
+ "y": 580.0
+ },
+ {
+ "x": 130.0,
+ "y": 590.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 185.0,
+ "y": 450.0
+ },
+ {
+ "x": 185.0,
+ "y": 575.0
+ },
+ {
+ "x": 125.0,
+ "y": 575.0
+ },
+ {
+ "x": 125.0,
+ "y": 600.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 460.0
+ },
+ {
+ "x": 180.0,
+ "y": 570.0
+ },
+ {
+ "x": 120.0,
+ "y": 570.0
+ },
+ {
+ "x": 120.0,
+ "y": 610.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 470.0
+ },
+ {
+ "x": 175.0,
+ "y": 565.0
+ },
+ {
+ "x": 115.0,
+ "y": 565.0
+ },
+ {
+ "x": 115.0,
+ "y": 620.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 190.0,
+ "y": 590.0
+ },
+ {
+ "x": 190.0,
+ "y": 730.0
+ },
+ {
+ "x": 130.0,
+ "y": 730.0
+ },
+ {
+ "x": 130.0,
+ "y": 740.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 185.0,
+ "y": 600.0
+ },
+ {
+ "x": 185.0,
+ "y": 725.0
+ },
+ {
+ "x": 125.0,
+ "y": 725.0
+ },
+ {
+ "x": 125.0,
+ "y": 750.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 610.0
+ },
+ {
+ "x": 180.0,
+ "y": 720.0
+ },
+ {
+ "x": 120.0,
+ "y": 720.0
+ },
+ {
+ "x": 120.0,
+ "y": 760.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 620.0
+ },
+ {
+ "x": 175.0,
+ "y": 715.0
+ },
+ {
+ "x": 115.0,
+ "y": 715.0
+ },
+ {
+ "x": 115.0,
+ "y": 770.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB1"
+ },
+ "path": [
+ {
+ "x": 190.0,
+ "y": 740.0
+ },
+ {
+ "x": 190.0,
+ "y": 880.0
+ },
+ {
+ "x": 325.0,
+ "y": 880.0
+ },
+ {
+ "x": 325.0,
+ "y": 450.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB2"
+ },
+ "path": [
+ {
+ "x": 185.0,
+ "y": 750.0
+ },
+ {
+ "x": 185.0,
+ "y": 885.0
+ },
+ {
+ "x": 330.0,
+ "y": 885.0
+ },
+ {
+ "x": 330.0,
+ "y": 550.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB3"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 760.0
+ },
+ {
+ "x": 180.0,
+ "y": 890.0
+ },
+ {
+ "x": 335.0,
+ "y": 890.0
+ },
+ {
+ "x": 335.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB4"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 770.0
+ },
+ {
+ "x": 175.0,
+ "y": 895.0
+ },
+ {
+ "x": 340.0,
+ "y": 895.0
+ },
+ {
+ "x": 340.0,
+ "y": 750.0
+ }
+ ]
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIram2",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 130.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "QA1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "QB2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "QB1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "QA3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 75.0
+ },
+ "name": "QB4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "QA2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 65.0
+ },
+ "name": "QB3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "QA4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "B0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "WE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 105.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 115.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 125.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.1,
+ "subComps": [
+ {
+ "pos": {
+ "x": 69.0,
+ "y": 854.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 844.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 484.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#16",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 864.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 504.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#18",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 494.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#17",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 54.0,
+ "y": 514.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#19",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 155.0,
+ "y": 325.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#2"
+ },
+ {
+ "pos": {
+ "x": 224.0,
+ "y": 164.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 229.0,
+ "y": 154.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 214.0,
+ "y": 184.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 219.0,
+ "y": 174.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 544.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 59.0,
+ "y": 534.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 564.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 69.0,
+ "y": 554.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 694.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 59.0,
+ "y": 684.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 69.0,
+ "y": 704.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 235.0,
+ "y": 150.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#0"
+ },
+ {
+ "pos": {
+ "x": 59.0,
+ "y": 834.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 250.0,
+ "y": 375.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#1"
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 714.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 155.0,
+ "y": 735.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#5"
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 349.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#25",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 334.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#24",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 155.0,
+ "y": 435.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#3"
+ },
+ {
+ "pos": {
+ "x": 54.0,
+ "y": 749.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#27",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 155.0,
+ "y": 585.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#4"
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 649.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#26",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 780.0
+ },
+ "id": "GUIram2",
+ "name": "GUIram2#3"
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 630.0
+ },
+ "id": "GUIram2",
+ "name": "GUIram2#2"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 150.0
+ },
+ "id": "GUIdemux2",
+ "name": "GUIdemux2#1"
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 480.0
+ },
+ "id": "GUIram2",
+ "name": "GUIram2#1"
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 330.0
+ },
+ "id": "GUIram2",
+ "name": "GUIram2#0"
+ },
+ {
+ "pos": {
+ "x": 250.0,
+ "y": 635.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#1"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 45.0
+ },
+ "id": "GUIdemux2",
+ "name": "GUIdemux2#0"
+ },
+ {
+ "pos": {
+ "x": 250.0,
+ "y": 785.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#2"
+ },
+ {
+ "pos": {
+ "x": 250.0,
+ "y": 485.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#0"
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 644.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#21",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 634.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#20",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 54.0,
+ "y": 664.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#23",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 654.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#22",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A0"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#0",
+ "pinName": "S0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#0",
+ "pinName": "S1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 150.0
+ },
+ {
+ "x": 10.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B0"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#1",
+ "pinName": "S0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 450.0
+ },
+ {
+ "x": 5.0,
+ "y": 155.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#1",
+ "pinName": "S1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 550.0
+ },
+ {
+ "x": 10.0,
+ "y": 165.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y00"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y01"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y10"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y11"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "WE"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 850.0
+ },
+ {
+ "x": 15.0,
+ "y": 195.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 155.0
+ },
+ {
+ "x": 290.0,
+ "y": 230.0
+ },
+ {
+ "x": 35.0,
+ "y": 230.0
+ },
+ {
+ "x": 35.0,
+ "y": 375.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 285.0,
+ "y": 165.0
+ },
+ {
+ "x": 285.0,
+ "y": 225.0
+ },
+ {
+ "x": 30.0,
+ "y": 225.0
+ },
+ {
+ "x": 30.0,
+ "y": 525.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 280.0,
+ "y": 175.0
+ },
+ {
+ "x": 280.0,
+ "y": 220.0
+ },
+ {
+ "x": 25.0,
+ "y": 220.0
+ },
+ {
+ "x": 25.0,
+ "y": 675.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 275.0,
+ "y": 185.0
+ },
+ {
+ "x": 275.0,
+ "y": 215.0
+ },
+ {
+ "x": 20.0,
+ "y": 215.0
+ },
+ {
+ "x": 20.0,
+ "y": 825.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "A0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 345.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "B0"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 355.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 365.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "A0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "B0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "B1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "A0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "B0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "B1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "A0"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 785.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 795.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "B0"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 805.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 815.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 250.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "D1"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 385.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "D2"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 395.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "D3"
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 405.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "D4"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 415.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 950.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 1050.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 1150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 1250.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y00"
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 135.0,
+ "y": 50.0
+ },
+ {
+ "x": 135.0,
+ "y": 370.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y01"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 60.0
+ },
+ {
+ "x": 130.0,
+ "y": 520.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y10"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 70.0
+ },
+ {
+ "x": 125.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y11"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 80.0
+ },
+ {
+ "x": 120.0,
+ "y": 820.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 230.0,
+ "y": 420.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 225.0,
+ "y": 570.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 220.0,
+ "y": 720.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 215.0,
+ "y": 870.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QB1"
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 375.0
+ },
+ {
+ "x": 140.0,
+ "y": 380.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QB2"
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 385.0
+ },
+ {
+ "x": 140.0,
+ "y": 390.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QB3"
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 395.0
+ },
+ {
+ "x": 140.0,
+ "y": 400.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QB4"
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 405.0
+ },
+ {
+ "x": 140.0,
+ "y": 410.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QB1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 525.0
+ },
+ {
+ "x": 140.0,
+ "y": 530.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QB2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 535.0
+ },
+ {
+ "x": 140.0,
+ "y": 540.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QB3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 545.0
+ },
+ {
+ "x": 140.0,
+ "y": 550.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QB4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 555.0
+ },
+ {
+ "x": 140.0,
+ "y": 560.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QB1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 675.0
+ },
+ {
+ "x": 140.0,
+ "y": 680.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QB2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 685.0
+ },
+ {
+ "x": 140.0,
+ "y": 690.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QB3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 695.0
+ },
+ {
+ "x": 140.0,
+ "y": 700.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QB4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 705.0
+ },
+ {
+ "x": 140.0,
+ "y": 710.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QB1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 825.0
+ },
+ {
+ "x": 140.0,
+ "y": 830.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QB2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 835.0
+ },
+ {
+ "x": 140.0,
+ "y": 840.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QB3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 845.0
+ },
+ {
+ "x": 140.0,
+ "y": 850.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QB4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 855.0
+ },
+ {
+ "x": 140.0,
+ "y": 860.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QA1"
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 335.0
+ },
+ {
+ "x": 140.0,
+ "y": 330.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QA2"
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 345.0
+ },
+ {
+ "x": 140.0,
+ "y": 340.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QA3"
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 355.0
+ },
+ {
+ "x": 140.0,
+ "y": 350.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QA4"
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 365.0
+ },
+ {
+ "x": 140.0,
+ "y": 360.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QA1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 485.0
+ },
+ {
+ "x": 140.0,
+ "y": 480.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QA2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 495.0
+ },
+ {
+ "x": 140.0,
+ "y": 490.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QA3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 505.0
+ },
+ {
+ "x": 140.0,
+ "y": 500.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QA4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 515.0
+ },
+ {
+ "x": 140.0,
+ "y": 510.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QA1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 635.0
+ },
+ {
+ "x": 140.0,
+ "y": 630.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QA2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 645.0
+ },
+ {
+ "x": 140.0,
+ "y": 640.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QA3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 655.0
+ },
+ {
+ "x": 140.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QA4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 665.0
+ },
+ {
+ "x": 140.0,
+ "y": 660.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QA1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 785.0
+ },
+ {
+ "x": 140.0,
+ "y": 780.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QA2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 795.0
+ },
+ {
+ "x": 140.0,
+ "y": 790.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QA3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 805.0
+ },
+ {
+ "x": 140.0,
+ "y": 800.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QA4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 815.0
+ },
+ {
+ "x": 140.0,
+ "y": 810.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 305.0,
+ "y": 380.0
+ },
+ {
+ "x": 305.0,
+ "y": 445.0
+ },
+ {
+ "x": 245.0,
+ "y": 445.0
+ },
+ {
+ "x": 245.0,
+ "y": 490.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 300.0,
+ "y": 390.0
+ },
+ {
+ "x": 300.0,
+ "y": 440.0
+ },
+ {
+ "x": 240.0,
+ "y": 440.0
+ },
+ {
+ "x": 240.0,
+ "y": 500.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 295.0,
+ "y": 400.0
+ },
+ {
+ "x": 295.0,
+ "y": 435.0
+ },
+ {
+ "x": 235.0,
+ "y": 435.0
+ },
+ {
+ "x": 235.0,
+ "y": 510.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 410.0
+ },
+ {
+ "x": 290.0,
+ "y": 430.0
+ },
+ {
+ "x": 230.0,
+ "y": 430.0
+ },
+ {
+ "x": 230.0,
+ "y": 520.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 305.0,
+ "y": 490.0
+ },
+ {
+ "x": 305.0,
+ "y": 595.0
+ },
+ {
+ "x": 245.0,
+ "y": 595.0
+ },
+ {
+ "x": 245.0,
+ "y": 640.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 300.0,
+ "y": 500.0
+ },
+ {
+ "x": 300.0,
+ "y": 590.0
+ },
+ {
+ "x": 240.0,
+ "y": 590.0
+ },
+ {
+ "x": 240.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 295.0,
+ "y": 510.0
+ },
+ {
+ "x": 295.0,
+ "y": 585.0
+ },
+ {
+ "x": 235.0,
+ "y": 585.0
+ },
+ {
+ "x": 235.0,
+ "y": 660.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 520.0
+ },
+ {
+ "x": 290.0,
+ "y": 580.0
+ },
+ {
+ "x": 230.0,
+ "y": 580.0
+ },
+ {
+ "x": 230.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 305.0,
+ "y": 640.0
+ },
+ {
+ "x": 305.0,
+ "y": 745.0
+ },
+ {
+ "x": 245.0,
+ "y": 745.0
+ },
+ {
+ "x": 245.0,
+ "y": 790.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 300.0,
+ "y": 650.0
+ },
+ {
+ "x": 300.0,
+ "y": 740.0
+ },
+ {
+ "x": 240.0,
+ "y": 740.0
+ },
+ {
+ "x": 240.0,
+ "y": 800.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 295.0,
+ "y": 660.0
+ },
+ {
+ "x": 295.0,
+ "y": 735.0
+ },
+ {
+ "x": 235.0,
+ "y": 735.0
+ },
+ {
+ "x": 235.0,
+ "y": 810.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 670.0
+ },
+ {
+ "x": 290.0,
+ "y": 730.0
+ },
+ {
+ "x": 230.0,
+ "y": 730.0
+ },
+ {
+ "x": 230.0,
+ "y": 820.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB1"
+ },
+ "path": [
+ {
+ "x": 330.0,
+ "y": 790.0
+ },
+ {
+ "x": 330.0,
+ "y": 450.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB2"
+ },
+ "path": [
+ {
+ "x": 335.0,
+ "y": 800.0
+ },
+ {
+ "x": 335.0,
+ "y": 550.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB3"
+ },
+ "path": [
+ {
+ "x": 340.0,
+ "y": 810.0
+ },
+ {
+ "x": 340.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB4"
+ },
+ "path": [
+ {
+ "x": 345.0,
+ "y": 820.0
+ },
+ {
+ "x": 345.0,
+ "y": 750.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 330.0
+ },
+ {
+ "x": 210.0,
+ "y": 430.0
+ },
+ {
+ "x": 150.0,
+ "y": 430.0
+ },
+ {
+ "x": 150.0,
+ "y": 440.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 340.0
+ },
+ {
+ "x": 205.0,
+ "y": 425.0
+ },
+ {
+ "x": 145.0,
+ "y": 425.0
+ },
+ {
+ "x": 145.0,
+ "y": 450.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 350.0
+ },
+ {
+ "x": 200.0,
+ "y": 420.0
+ },
+ {
+ "x": 140.0,
+ "y": 420.0
+ },
+ {
+ "x": 140.0,
+ "y": 460.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 195.0,
+ "y": 360.0
+ },
+ {
+ "x": 195.0,
+ "y": 415.0
+ },
+ {
+ "x": 135.0,
+ "y": 415.0
+ },
+ {
+ "x": 135.0,
+ "y": 470.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 440.0
+ },
+ {
+ "x": 210.0,
+ "y": 580.0
+ },
+ {
+ "x": 150.0,
+ "y": 580.0
+ },
+ {
+ "x": 150.0,
+ "y": 590.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 450.0
+ },
+ {
+ "x": 205.0,
+ "y": 575.0
+ },
+ {
+ "x": 145.0,
+ "y": 575.0
+ },
+ {
+ "x": 145.0,
+ "y": 600.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 460.0
+ },
+ {
+ "x": 200.0,
+ "y": 570.0
+ },
+ {
+ "x": 140.0,
+ "y": 570.0
+ },
+ {
+ "x": 140.0,
+ "y": 610.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 195.0,
+ "y": 470.0
+ },
+ {
+ "x": 195.0,
+ "y": 565.0
+ },
+ {
+ "x": 135.0,
+ "y": 565.0
+ },
+ {
+ "x": 135.0,
+ "y": 620.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 590.0
+ },
+ {
+ "x": 210.0,
+ "y": 730.0
+ },
+ {
+ "x": 150.0,
+ "y": 730.0
+ },
+ {
+ "x": 150.0,
+ "y": 740.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 600.0
+ },
+ {
+ "x": 205.0,
+ "y": 725.0
+ },
+ {
+ "x": 145.0,
+ "y": 725.0
+ },
+ {
+ "x": 145.0,
+ "y": 750.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 610.0
+ },
+ {
+ "x": 200.0,
+ "y": 720.0
+ },
+ {
+ "x": 140.0,
+ "y": 720.0
+ },
+ {
+ "x": 140.0,
+ "y": 760.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 195.0,
+ "y": 620.0
+ },
+ {
+ "x": 195.0,
+ "y": 715.0
+ },
+ {
+ "x": 135.0,
+ "y": 715.0
+ },
+ {
+ "x": 135.0,
+ "y": 770.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA1"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 740.0
+ },
+ {
+ "x": 210.0,
+ "y": 880.0
+ },
+ {
+ "x": 310.0,
+ "y": 880.0
+ },
+ {
+ "x": 310.0,
+ "y": 50.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA2"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 750.0
+ },
+ {
+ "x": 205.0,
+ "y": 885.0
+ },
+ {
+ "x": 315.0,
+ "y": 885.0
+ },
+ {
+ "x": 315.0,
+ "y": 150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA3"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 760.0
+ },
+ {
+ "x": 200.0,
+ "y": 890.0
+ },
+ {
+ "x": 320.0,
+ "y": 890.0
+ },
+ {
+ "x": 320.0,
+ "y": 250.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA4"
+ },
+ "path": [
+ {
+ "x": 195.0,
+ "y": 770.0
+ },
+ {
+ "x": 195.0,
+ "y": 895.0
+ },
+ {
+ "x": 325.0,
+ "y": 895.0
+ },
+ {
+ "x": 325.0,
+ "y": 350.0
+ }
+ ]
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIram4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 100.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "SA",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "SB",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "B4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 52.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 152.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 102.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 77.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 52.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 66.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 16.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 41.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 116.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 141.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 91.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 77.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 177.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 127.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 62.5
+ },
+ {
+ "x": 15.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 17.5,
+ "y": 87.5
+ },
+ {
+ "x": 17.5,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 17.5,
+ "y": 112.5
+ },
+ {
+ "x": 17.5,
+ "y": 107.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 17.5,
+ "y": 137.5
+ },
+ {
+ "x": 17.5,
+ "y": 157.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 162.5
+ },
+ {
+ "x": 10.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 12.5,
+ "y": 187.5
+ },
+ {
+ "x": 12.5,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 212.5
+ },
+ {
+ "x": 15.0,
+ "y": 132.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B4"
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 237.5
+ },
+ {
+ "x": 10.0,
+ "y": 182.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SA"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SB"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 167.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 192.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 42.5,
+ "y": 12.5
+ },
+ {
+ "x": 42.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 37.5
+ },
+ {
+ "x": 45.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 47.5,
+ "y": 62.5
+ },
+ {
+ "x": 47.5,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 87.5
+ },
+ {
+ "x": 50.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 52.5,
+ "y": 112.5
+ },
+ {
+ "x": 52.5,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 137.5
+ },
+ {
+ "x": 55.0,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 57.5,
+ "y": 162.5
+ },
+ {
+ "x": 57.5,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 187.5
+ },
+ {
+ "x": 60.0,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#8",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#9",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#10",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#11",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIsel2_4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 150.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "SA",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 115.0
+ },
+ "name": "C1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "SB",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 125.0
+ },
+ "name": "C2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "SC",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 135.0
+ },
+ "name": "C3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 145.0
+ },
+ "name": "C4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 105.0
+ },
+ "name": "B4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.2,
+ "subComps": [
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 620.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 570.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 720.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 670.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 75.0,
+ "y": 250.0
+ },
+ "id": "GUInot4",
+ "name": "GUInot4#0"
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 634.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 584.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 684.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 152.5,
+ "y": 65.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 250.0
+ },
+ "id": "GUIsel2_4",
+ "name": "GUIsel2_4#0"
+ },
+ {
+ "pos": {
+ "x": 152.5,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 152.5,
+ "y": 165.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 152.5,
+ "y": 115.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SA"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "SA"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 25.0
+ },
+ {
+ "x": 25.0,
+ "y": 255.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SB"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "SB"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 75.0
+ },
+ {
+ "x": 20.0,
+ "y": 265.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 175.0
+ },
+ {
+ "x": 15.0,
+ "y": 275.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 225.0
+ },
+ {
+ "x": 10.0,
+ "y": 285.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 275.0
+ },
+ {
+ "x": 5.0,
+ "y": 295.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 325.0
+ },
+ {
+ "x": 5.0,
+ "y": 305.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 375.0
+ },
+ {
+ "x": 10.0,
+ "y": 315.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 425.0
+ },
+ {
+ "x": 15.0,
+ "y": 325.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 475.0
+ },
+ {
+ "x": 20.0,
+ "y": 335.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B4"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 525.0
+ },
+ {
+ "x": 25.0,
+ "y": 345.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUInot4#0",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUInot4#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUInot4#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUInot4#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SC"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 125.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 125.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 125.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 735.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C1"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C2"
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C3"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C4"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUInot4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 255.0
+ },
+ {
+ "x": 115.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUInot4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 265.0
+ },
+ {
+ "x": 120.0,
+ "y": 70.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUInot4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 275.0
+ },
+ {
+ "x": 125.0,
+ "y": 120.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUInot4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 285.0
+ },
+ {
+ "x": 130.0,
+ "y": 170.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 135.0,
+ "y": 580.0
+ },
+ {
+ "x": 135.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 630.0
+ },
+ {
+ "x": 140.0,
+ "y": 80.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 145.0,
+ "y": 680.0
+ },
+ {
+ "x": 145.0,
+ "y": 130.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 150.0,
+ "y": 730.0
+ },
+ {
+ "x": 150.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIsel3_4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 7.5,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 62.5,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIxor",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 270.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 85.0
+ },
+ "name": "ORAMn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 265.0
+ },
+ "name": "IQn+3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "I0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 255.0
+ },
+ "name": "IQn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "I1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "I2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "I3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 65.0
+ },
+ "name": "OVR",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "I4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 105.0
+ },
+ "name": "Cn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 115.0
+ },
+ "name": "OQn+3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "I5",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I6",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 105.0
+ },
+ "name": "OQn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I7",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I8",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 155.0
+ },
+ "name": "A0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 165.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 175.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 185.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 235.0
+ },
+ "name": "IRAMn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "Cn+4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 95.0
+ },
+ "name": "ORAMn+3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "F\u003d0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 115.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 245.0
+ },
+ "name": "IRAMn+3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 75.0
+ },
+ "name": "F3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 125.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 195.0
+ },
+ "name": "B0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 135.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 205.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 145.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 215.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 225.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.1,
+ "subComps": [
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 2310.0
+ },
+ "id": "GUIsel3_4",
+ "name": "GUIsel3_4#0"
+ },
+ {
+ "pos": {
+ "x": 144.0,
+ "y": 2524.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 2510.0
+ },
+ "id": "GUIsel3_4",
+ "name": "GUIsel3_4#1"
+ },
+ {
+ "pos": {
+ "x": 139.0,
+ "y": 2514.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 234.0,
+ "y": 2524.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#16",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 219.0,
+ "y": 2494.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 45.0
+ },
+ "id": "GUIAm2901DestDecode",
+ "name": "GUIAm2901DestDecode#0"
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 2634.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#18",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 2624.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#17",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 279.0,
+ "y": 2114.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#19",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 154.0,
+ "y": 89.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 154.0,
+ "y": 949.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 154.0,
+ "y": 2319.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 154.0,
+ "y": 2264.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 2324.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 2314.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 219.0,
+ "y": 2224.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 2334.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 229.0,
+ "y": 2244.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 224.0,
+ "y": 2234.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 234.0,
+ "y": 2254.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 134.0,
+ "y": 2504.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 129.0,
+ "y": 2494.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 160.0,
+ "y": 2275.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#1"
+ },
+ {
+ "pos": {
+ "x": 160.0,
+ "y": 2220.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#0"
+ },
+ {
+ "pos": {
+ "x": 314.0,
+ "y": 449.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#40",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 90.0,
+ "y": 2490.0
+ },
+ "id": "GUIAm2901QReg",
+ "name": "GUIAm2901QReg#0"
+ },
+ {
+ "pos": {
+ "x": 320.0,
+ "y": 440.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 2384.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#36",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 160.0,
+ "y": 75.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 2414.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#35",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 19.0,
+ "y": 2434.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#38",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 2424.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#37",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 2444.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#39",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 190.0,
+ "y": 65.0
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 275.0,
+ "y": 135.0
+ },
+ "id": "GUImux1_4",
+ "name": "GUImux1_4#0"
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 2354.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#30",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 19.0,
+ "y": 2374.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#32",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 2364.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#31",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 19.0,
+ "y": 2404.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#34",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 2394.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#33",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 269.0,
+ "y": 2104.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#25",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 264.0,
+ "y": 2099.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#24",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 259.0,
+ "y": 459.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#27",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 254.0,
+ "y": 449.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#26",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 275.0,
+ "y": 445.0
+ },
+ "id": "GUIor4",
+ "name": "GUIor4#0"
+ },
+ {
+ "pos": {
+ "x": 269.0,
+ "y": 479.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#29",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 240.0,
+ "y": 2110.0
+ },
+ "id": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode",
+ "name": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0"
+ },
+ {
+ "pos": {
+ "x": 264.0,
+ "y": 469.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#28",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 95.0,
+ "y": 2220.0
+ },
+ "id": "GUIram4",
+ "name": "GUIram4#0"
+ },
+ {
+ "pos": {
+ "x": 329.0,
+ "y": 949.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#21",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 294.0,
+ "y": 2144.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#20",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 259.0,
+ "y": 2094.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#23",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 254.0,
+ "y": 2089.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#22",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I8"
+ },
+ "pin2": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "I8"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I7"
+ },
+ "pin2": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "I7"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 150.0
+ },
+ {
+ "x": 5.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I6"
+ },
+ "pin2": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "I6"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 250.0
+ },
+ {
+ "x": 10.0,
+ "y": 70.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I5"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I5"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 350.0
+ },
+ {
+ "x": 130.0,
+ "y": 2115.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I4"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 450.0
+ },
+ {
+ "x": 125.0,
+ "y": 2125.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I3"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 550.0
+ },
+ {
+ "x": 120.0,
+ "y": 2135.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I2"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 650.0
+ },
+ {
+ "x": 115.0,
+ "y": 2145.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 110.0,
+ "y": 750.0
+ },
+ {
+ "x": 110.0,
+ "y": 2155.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 850.0
+ },
+ {
+ "x": 105.0,
+ "y": 2165.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 155.0,
+ "y": 80.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 155.0,
+ "y": 2485.0
+ },
+ {
+ "x": 80.0,
+ "y": 2485.0
+ },
+ {
+ "x": 80.0,
+ "y": 2495.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "LSH"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 90.0
+ },
+ {
+ "x": 55.0,
+ "y": 125.0
+ },
+ {
+ "x": 40.0,
+ "y": 125.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "NSH"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 50.0
+ },
+ {
+ "x": 60.0,
+ "y": 120.0
+ },
+ {
+ "x": 35.0,
+ "y": 120.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "RSH"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 60.0
+ },
+ {
+ "x": 65.0,
+ "y": 115.0
+ },
+ {
+ "x": 30.0,
+ "y": 115.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SA"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SB"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SC"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "SA"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 2515.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "SB"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 2525.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "SC"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 2535.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A0"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "A0"
+ },
+ "path": [
+ {
+ "x": 80.0,
+ "y": 1550.0
+ },
+ {
+ "x": 80.0,
+ "y": 2225.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 1650.0
+ },
+ {
+ "x": 75.0,
+ "y": 2235.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 1750.0
+ },
+ {
+ "x": 70.0,
+ "y": 2245.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 1850.0
+ },
+ {
+ "x": 65.0,
+ "y": 2255.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B0"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "B0"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 1950.0
+ },
+ {
+ "x": 60.0,
+ "y": 2265.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 2050.0
+ },
+ {
+ "x": 55.0,
+ "y": 2275.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 2150.0
+ },
+ {
+ "x": 50.0,
+ "y": 2285.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 2250.0
+ },
+ {
+ "x": 45.0,
+ "y": 2295.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QA1"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QA2"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QA3"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QA4"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QB1"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D1"
+ },
+ "path": [
+ {
+ "x": 150.0,
+ "y": 2265.0
+ },
+ {
+ "x": 150.0,
+ "y": 2280.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QB2"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D2"
+ },
+ "path": [
+ {
+ "x": 145.0,
+ "y": 2275.0
+ },
+ {
+ "x": 145.0,
+ "y": 2290.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QB3"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 2285.0
+ },
+ {
+ "x": 140.0,
+ "y": 2300.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QB4"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D4"
+ },
+ "path": [
+ {
+ "x": 135.0,
+ "y": 2295.0
+ },
+ {
+ "x": 135.0,
+ "y": 2310.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Cn"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 1050.0
+ },
+ {
+ "x": 100.0,
+ "y": 2175.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "D1"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 1150.0
+ },
+ {
+ "x": 180.0,
+ "y": 2185.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "D2"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 1250.0
+ },
+ {
+ "x": 175.0,
+ "y": 2195.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "D3"
+ },
+ "path": [
+ {
+ "x": 170.0,
+ "y": 1350.0
+ },
+ {
+ "x": 170.0,
+ "y": 2205.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "D4"
+ },
+ "path": [
+ {
+ "x": 165.0,
+ "y": 1450.0
+ },
+ {
+ "x": 165.0,
+ "y": 2215.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I0_1"
+ },
+ "path": [
+ {
+ "x": 220.0,
+ "y": 150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I0_2"
+ },
+ "path": [
+ {
+ "x": 225.0,
+ "y": 160.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I0_3"
+ },
+ "path": [
+ {
+ "x": 230.0,
+ "y": 170.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I0_4"
+ },
+ "path": [
+ {
+ "x": 235.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 2280.0
+ },
+ {
+ "x": 200.0,
+ "y": 2265.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 2290.0
+ },
+ {
+ "x": 205.0,
+ "y": 2275.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 2300.0
+ },
+ {
+ "x": 210.0,
+ "y": 2285.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 215.0,
+ "y": 2310.0
+ },
+ {
+ "x": 215.0,
+ "y": 2295.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "OQn"
+ },
+ "path": [
+ {
+ "x": 335.0,
+ "y": 2495.0
+ },
+ {
+ "x": 335.0,
+ "y": 1050.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "OQn+3"
+ },
+ "path": [
+ {
+ "x": 340.0,
+ "y": 2525.0
+ },
+ {
+ "x": 340.0,
+ "y": 1150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 135.0,
+ "y": 2670.0
+ },
+ {
+ "x": 30.0,
+ "y": 2670.0
+ },
+ {
+ "x": 30.0,
+ "y": 2635.0
+ },
+ {
+ "x": 35.0,
+ "y": 2635.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 2675.0
+ },
+ {
+ "x": 35.0,
+ "y": 2675.0
+ },
+ {
+ "x": 35.0,
+ "y": 2640.0
+ },
+ {
+ "x": 40.0,
+ "y": 2640.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "C1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "C2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 145.0,
+ "y": 2680.0
+ },
+ {
+ "x": 40.0,
+ "y": 2680.0
+ },
+ {
+ "x": 40.0,
+ "y": 2645.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "IQn+3"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 2650.0
+ },
+ {
+ "x": 5.0,
+ "y": 2655.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "IQn"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 2550.0
+ },
+ {
+ "x": 5.0,
+ "y": 2545.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 2665.0
+ },
+ {
+ "x": 25.0,
+ "y": 2665.0
+ },
+ {
+ "x": 25.0,
+ "y": 2630.0
+ },
+ {
+ "x": 30.0,
+ "y": 2630.0
+ },
+ {
+ "x": 30.0,
+ "y": 2555.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Q1"
+ },
+ "path": [
+ {
+ "x": 220.0,
+ "y": 2305.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Q2"
+ },
+ "path": [
+ {
+ "x": 225.0,
+ "y": 2505.0
+ },
+ {
+ "x": 225.0,
+ "y": 2315.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Q3"
+ },
+ "path": [
+ {
+ "x": 230.0,
+ "y": 2515.0
+ },
+ {
+ "x": 230.0,
+ "y": 2325.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Q4"
+ },
+ "path": [
+ {
+ "x": 235.0,
+ "y": 2335.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 2565.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 2575.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Cn+4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn+4"
+ },
+ "path": [
+ {
+ "x": 315.0,
+ "y": 2155.0
+ },
+ {
+ "x": 315.0,
+ "y": 550.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "OVR"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "OVR"
+ },
+ "path": [
+ {
+ "x": 320.0,
+ "y": 2165.0
+ },
+ {
+ "x": 320.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "F1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "F4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "ORAMn"
+ },
+ "path": [
+ {
+ "x": 325.0,
+ "y": 2115.0
+ },
+ {
+ "x": 325.0,
+ "y": 850.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 330.0,
+ "y": 2145.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "ORAMn+3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F3"
+ },
+ "path": [
+ {
+ "x": 330.0,
+ "y": 750.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 280.0,
+ "y": 2090.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "F2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 285.0,
+ "y": 2125.0
+ },
+ {
+ "x": 285.0,
+ "y": 2095.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "F3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 2135.0
+ },
+ {
+ "x": 290.0,
+ "y": 2100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 295.0,
+ "y": 2105.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIor4#0",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIor4#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIor4#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIor4#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I1_1"
+ },
+ "path": [
+ {
+ "x": 255.0,
+ "y": 190.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I1_2"
+ },
+ "path": [
+ {
+ "x": 260.0,
+ "y": 200.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I1_3"
+ },
+ "path": [
+ {
+ "x": 265.0,
+ "y": 210.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I1_4"
+ },
+ "path": [
+ {
+ "x": 270.0,
+ "y": 220.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 2090.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 2095.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#32",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 2100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "IRAMn"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 2350.0
+ },
+ {
+ "x": 5.0,
+ "y": 2345.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#32",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#33",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#32",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#34",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#35",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 2105.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#36",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#36",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#33",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#34",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#35",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#33",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#37",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#34",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#38",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#35",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#39",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#37",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#38",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#39",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "IRAMn+3"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 2450.0
+ },
+ {
+ "x": 5.0,
+ "y": 2455.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#36",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 2585.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#37",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 2595.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#38",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 2605.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#39",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 2615.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "RAMWE"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 230.0,
+ "y": 70.0
+ },
+ {
+ "x": 230.0,
+ "y": 105.0
+ },
+ {
+ "x": 90.0,
+ "y": 105.0
+ },
+ {
+ "x": 90.0,
+ "y": 2305.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "QWE"
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 100.0
+ },
+ {
+ "x": 85.0,
+ "y": 2505.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "YF"
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "S0"
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 80.0
+ },
+ {
+ "x": 70.0,
+ "y": 140.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": [
+ {
+ "x": 335.0,
+ "y": 140.0
+ },
+ {
+ "x": 335.0,
+ "y": 50.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": [
+ {
+ "x": 335.0,
+ "y": 160.0
+ },
+ {
+ "x": 335.0,
+ "y": 250.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": [
+ {
+ "x": 325.0,
+ "y": 170.0
+ },
+ {
+ "x": 325.0,
+ "y": 350.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIor4#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#40",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#40",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 315.0,
+ "y": 445.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#40",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 315.0,
+ "y": 455.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F\u003d0"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 60.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "SBE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "FN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "SN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I5",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "L",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "RN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "CinE",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.25,
+ "subComps": [
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 10.0
+ },
+ "id": "GUInand3",
+ "name": "GUInand3#0"
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 70.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 45.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 100.0,
+ "y": 135.0
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 44.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 64.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 54.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 99.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 84.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 74.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 34.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 100.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I5"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 45.0
+ },
+ {
+ "x": 45.0,
+ "y": 50.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "FN"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 40.0
+ },
+ {
+ "x": 45.0,
+ "y": 40.0
+ },
+ {
+ "x": 45.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "SN"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 105.0
+ },
+ {
+ "x": 135.0,
+ "y": 105.0
+ },
+ {
+ "x": 135.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "RN"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 220.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "CinE"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 5.0
+ },
+ {
+ "x": 115.0,
+ "y": 5.0
+ },
+ {
+ "x": 115.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUInand3#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "L"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "SBE"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901ALUFuncDecode",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 120.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "R2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 105.0
+ },
+ "name": "S3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "R3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 115.0
+ },
+ "name": "S4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "R4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "OVR",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "Cn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "F1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I5",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "F2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "F3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "F4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "Cn+4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "S1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "R1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "S2",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.25,
+ "subComps": [
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 354.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 254.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 36.5,
+ "y": 264.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#16",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 36.5,
+ "y": 164.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 84.0,
+ "y": 374.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#18",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 36.5,
+ "y": 364.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#17",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 2.5
+ },
+ "id": "GUIAm2901ALUFuncDecode",
+ "name": "GUIAm2901ALUFuncDecode#0"
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 80.0
+ },
+ "id": "GUIAm2901ALUOneBit",
+ "name": "GUIAm2901ALUOneBit#0"
+ },
+ {
+ "pos": {
+ "x": 84.0,
+ "y": 384.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#19",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 95.0,
+ "y": 400.0
+ },
+ "id": "GUIxor",
+ "name": "GUIxor#0"
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 194.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 94.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 26.5,
+ "y": 104.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 294.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 26.5,
+ "y": 304.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 26.5,
+ "y": 204.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 180.0
+ },
+ "id": "GUIAm2901ALUOneBit",
+ "name": "GUIAm2901ALUOneBit#1"
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 224.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 280.0
+ },
+ "id": "GUIAm2901ALUOneBit",
+ "name": "GUIAm2901ALUOneBit#2"
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 124.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 380.0
+ },
+ "id": "GUIAm2901ALUOneBit",
+ "name": "GUIAm2901ALUOneBit#3"
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 144.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 324.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 244.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 154.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 344.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I5"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "I5"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 20.0
+ },
+ {
+ "x": 5.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "I4"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 60.0
+ },
+ {
+ "x": 10.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "I3"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 100.0
+ },
+ {
+ "x": 15.0,
+ "y": 27.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "SBE"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 62.5,
+ "y": 37.5
+ },
+ {
+ "x": 62.5,
+ "y": 70.0
+ },
+ {
+ "x": 25.0,
+ "y": 70.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "CoutE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "CoutE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "CoutE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "CoutE"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 395.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "CinE"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 7.5
+ },
+ {
+ "x": 70.0,
+ "y": 77.5
+ },
+ {
+ "x": 27.5,
+ "y": 77.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "CinE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "CinE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "CinE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "CinE"
+ },
+ "path": [
+ {
+ "x": 27.5,
+ "y": 405.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "RN"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 57.5,
+ "y": 57.5
+ },
+ {
+ "x": 57.5,
+ "y": 65.0
+ },
+ {
+ "x": 30.0,
+ "y": 65.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "RN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "RN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "RN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "RN"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 425.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "SN"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 27.5
+ },
+ {
+ "x": 65.0,
+ "y": 72.5
+ },
+ {
+ "x": 32.5,
+ "y": 72.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "SN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "SN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "SN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "SN"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 445.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "FN"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 47.5
+ },
+ {
+ "x": 60.0,
+ "y": 67.5
+ },
+ {
+ "x": 35.0,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "FN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "FN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "FN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "FN"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 455.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "L"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 67.5,
+ "y": 17.5
+ },
+ {
+ "x": 67.5,
+ "y": 75.0
+ },
+ {
+ "x": 37.5,
+ "y": 75.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "L"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "L"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "L"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "L"
+ },
+ "path": [
+ {
+ "x": 37.5,
+ "y": 465.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "R1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "R"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 180.0
+ },
+ {
+ "x": 10.0,
+ "y": 115.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "R2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "R"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 220.0
+ },
+ {
+ "x": 10.0,
+ "y": 215.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "R3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "R"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 260.0
+ },
+ {
+ "x": 10.0,
+ "y": 315.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "R4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "R"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 300.0
+ },
+ {
+ "x": 20.0,
+ "y": 415.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "S"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 340.0
+ },
+ {
+ "x": 15.0,
+ "y": 135.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "S"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 380.0
+ },
+ {
+ "x": 5.0,
+ "y": 235.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "S"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 420.0
+ },
+ {
+ "x": 10.0,
+ "y": 335.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "S"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 460.0
+ },
+ {
+ "x": 10.0,
+ "y": 435.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "Cin"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 140.0
+ },
+ {
+ "x": 5.0,
+ "y": 85.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "Cout"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "Cin"
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 85.0
+ },
+ {
+ "x": 85.0,
+ "y": 175.0
+ },
+ {
+ "x": 40.0,
+ "y": 175.0
+ },
+ {
+ "x": 40.0,
+ "y": 185.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "Cout"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "Cin"
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 185.0
+ },
+ {
+ "x": 85.0,
+ "y": 275.0
+ },
+ {
+ "x": 40.0,
+ "y": 275.0
+ },
+ {
+ "x": 40.0,
+ "y": 285.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "Cout"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 285.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "Cin"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 375.0
+ },
+ {
+ "x": 40.0,
+ "y": 385.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "Cout"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "F"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F1"
+ },
+ "path": [
+ {
+ "x": 90.0,
+ "y": 95.0
+ },
+ {
+ "x": 90.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "F"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F2"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 195.0
+ },
+ {
+ "x": 95.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "F"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F3"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 295.0
+ },
+ {
+ "x": 100.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "F"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F4"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 395.0
+ },
+ {
+ "x": 105.0,
+ "y": 140.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIxor#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 90.0,
+ "y": 375.0
+ },
+ {
+ "x": 90.0,
+ "y": 405.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIxor#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 415.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn+4"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 385.0
+ },
+ {
+ "x": 130.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIxor#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "OVR"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901ALUInclDecode",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 230.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 195.0
+ },
+ "name": "Q1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 205.0
+ },
+ "name": "Q2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 215.0
+ },
+ "name": "Q3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 225.0
+ },
+ "name": "Q4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "I0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "I1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "I2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "OVR",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "Cn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I5",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 115.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 125.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 135.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 145.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "Cn+4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "F1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "F2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "F3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "F4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 155.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 105.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 165.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 175.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 185.0
+ },
+ "name": "B4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.25,
+ "subComps": [
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 575.0
+ },
+ "id": "GUIsel3_4",
+ "name": "GUIsel3_4#0"
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 499.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 459.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 60.0,
+ "y": 15.0
+ },
+ "id": "GUIAm2901ALUInclDecode",
+ "name": "GUIAm2901ALUInclDecode#0"
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 579.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 19.0,
+ "y": 539.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 365.0
+ },
+ "id": "GUIsel2_4",
+ "name": "GUIsel2_4#0"
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 165.0
+ },
+ "id": "GUIAm2901SourceDecode",
+ "name": "GUIAm2901SourceDecode#0"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I5"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "I5"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "I4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 60.0
+ },
+ {
+ "x": 5.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "I3"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 100.0
+ },
+ {
+ "x": 15.0,
+ "y": 40.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "I2"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 140.0
+ },
+ {
+ "x": 5.0,
+ "y": 170.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "I1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0"
+ },
+ "pin2": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 220.0
+ },
+ {
+ "x": 5.0,
+ "y": 190.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "Cn"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 260.0
+ },
+ {
+ "x": 10.0,
+ "y": 50.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 300.0
+ },
+ {
+ "x": 15.0,
+ "y": 390.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 340.0
+ },
+ {
+ "x": 10.0,
+ "y": 400.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 380.0
+ },
+ {
+ "x": 5.0,
+ "y": 410.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 430.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 440.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 450.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 460.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 610.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 620.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 630.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 640.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 620.0
+ },
+ {
+ "x": 5.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 700.0
+ },
+ {
+ "x": 5.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B4"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 740.0
+ },
+ {
+ "x": 10.0,
+ "y": 680.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 780.0
+ },
+ {
+ "x": 15.0,
+ "y": 690.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 820.0
+ },
+ {
+ "x": 20.0,
+ "y": 700.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 860.0
+ },
+ {
+ "x": 25.0,
+ "y": 710.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 900.0
+ },
+ {
+ "x": 30.0,
+ "y": 720.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "SQ"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SC"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 170.0
+ },
+ {
+ "x": 75.0,
+ "y": 240.0
+ },
+ {
+ "x": 30.0,
+ "y": 240.0
+ },
+ {
+ "x": 30.0,
+ "y": 600.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "RA"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "SB"
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 180.0
+ },
+ {
+ "x": 70.0,
+ "y": 235.0
+ },
+ {
+ "x": 20.0,
+ "y": 235.0
+ },
+ {
+ "x": 20.0,
+ "y": 380.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "SB"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SB"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 190.0
+ },
+ {
+ "x": 65.0,
+ "y": 230.0
+ },
+ {
+ "x": 35.0,
+ "y": 230.0
+ },
+ {
+ "x": 35.0,
+ "y": 590.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "SA"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SA"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 200.0
+ },
+ {
+ "x": 60.0,
+ "y": 225.0
+ },
+ {
+ "x": 40.0,
+ "y": 225.0
+ },
+ {
+ "x": 40.0,
+ "y": 580.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "RD"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "SA"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 210.0
+ },
+ {
+ "x": 55.0,
+ "y": 220.0
+ },
+ {
+ "x": 25.0,
+ "y": 220.0
+ },
+ {
+ "x": 25.0,
+ "y": 370.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "R1"
+ },
+ "path": [
+ {
+ "x": 82.5,
+ "y": 370.0
+ },
+ {
+ "x": 82.5,
+ "y": 162.5
+ },
+ {
+ "x": 20.0,
+ "y": 162.5
+ },
+ {
+ "x": 20.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "R2"
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 380.0
+ },
+ {
+ "x": 85.0,
+ "y": 160.0
+ },
+ {
+ "x": 22.5,
+ "y": 160.0
+ },
+ {
+ "x": 22.5,
+ "y": 70.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "R3"
+ },
+ "path": [
+ {
+ "x": 87.5,
+ "y": 390.0
+ },
+ {
+ "x": 87.5,
+ "y": 157.5
+ },
+ {
+ "x": 25.0,
+ "y": 157.5
+ },
+ {
+ "x": 25.0,
+ "y": 80.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "R4"
+ },
+ "path": [
+ {
+ "x": 90.0,
+ "y": 400.0
+ },
+ {
+ "x": 90.0,
+ "y": 155.0
+ },
+ {
+ "x": 27.5,
+ "y": 155.0
+ },
+ {
+ "x": 27.5,
+ "y": 90.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "S1"
+ },
+ "path": [
+ {
+ "x": 92.5,
+ "y": 580.0
+ },
+ {
+ "x": 92.5,
+ "y": 152.5
+ },
+ {
+ "x": 30.0,
+ "y": 152.5
+ },
+ {
+ "x": 30.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "S2"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 590.0
+ },
+ {
+ "x": 95.0,
+ "y": 150.0
+ },
+ {
+ "x": 32.5,
+ "y": 150.0
+ },
+ {
+ "x": 32.5,
+ "y": 110.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "S3"
+ },
+ "path": [
+ {
+ "x": 97.5,
+ "y": 600.0
+ },
+ {
+ "x": 97.5,
+ "y": 147.5
+ },
+ {
+ "x": 35.0,
+ "y": 147.5
+ },
+ {
+ "x": 35.0,
+ "y": 120.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "S4"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 610.0
+ },
+ {
+ "x": 100.0,
+ "y": 145.0
+ },
+ {
+ "x": 37.5,
+ "y": 145.0
+ },
+ {
+ "x": 37.5,
+ "y": 130.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "F1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "F2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F2"
+ },
+ "path": [
+ {
+ "x": 135.0,
+ "y": 30.0
+ },
+ {
+ "x": 135.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "F3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F3"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 40.0
+ },
+ {
+ "x": 130.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "F4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F4"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 50.0
+ },
+ {
+ "x": 125.0,
+ "y": 140.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "Cn+4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn+4"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 60.0
+ },
+ {
+ "x": 120.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "OVR"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "OVR"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 70.0
+ },
+ {
+ "x": 115.0,
+ "y": 220.0
+ }
+ ]
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 90.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "R",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "S",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "F",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "FN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "Cin",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "SN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Cout",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "RN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "L",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "CinE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "CoutE",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.2,
+ "subComps": [
+ {
+ "pos": {
+ "x": 60.0,
+ "y": 55.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 54.0,
+ "y": 69.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 90.0,
+ "y": 70.0
+ },
+ "id": "GUImux1",
+ "name": "GUImux1#0"
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 20.0
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 290.0
+ },
+ "id": "GUIxor",
+ "name": "GUIxor#1"
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 70.0
+ },
+ "id": "GUIxor",
+ "name": "GUIxor#2"
+ },
+ {
+ "pos": {
+ "x": 60.0,
+ "y": 20.0
+ },
+ "id": "GUIfulladder",
+ "name": "GUIfulladder#0"
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 190.0
+ },
+ "id": "GUIxor",
+ "name": "GUIxor#0"
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 20.0
+ },
+ "id": "GUIand",
+ "name": "GUIand#1"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Cin"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "CoutE"
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 75.0
+ },
+ {
+ "x": 5.0,
+ "y": 10.0
+ },
+ {
+ "x": 130.0,
+ "y": 10.0
+ },
+ {
+ "x": 130.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "CinE"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 125.0
+ },
+ {
+ "x": 7.5,
+ "y": 35.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "R"
+ },
+ "pin2": {
+ "compName": "GUIxor#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "RN"
+ },
+ "pin2": {
+ "compName": "GUIxor#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S"
+ },
+ "pin2": {
+ "compName": "GUIxor#1",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SN"
+ },
+ "pin2": {
+ "compName": "GUIxor#1",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "FN"
+ },
+ "pin2": {
+ "compName": "GUIxor#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 375.0
+ },
+ {
+ "x": 130.0,
+ "y": 85.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "L"
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "S0"
+ },
+ "path": [
+ {
+ "x": 87.5,
+ "y": 425.0
+ },
+ {
+ "x": 87.5,
+ "y": 75.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIfulladder#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIxor#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 195.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIfulladder#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 35.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIxor#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 295.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIfulladder#0",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 45.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIfulladder#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 25.0
+ },
+ {
+ "x": 100.0,
+ "y": 65.0
+ },
+ {
+ "x": 85.0,
+ "y": 65.0
+ },
+ {
+ "x": 85.0,
+ "y": 85.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIfulladder#0",
+ "pinName": "Z"
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 82.5,
+ "y": 65.0
+ },
+ {
+ "x": 82.5,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIxor#2",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Cout"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIxor#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901ALUOneBit",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 60.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "LSH",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "NSH",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "RSH",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I6",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "YF",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I7",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "RAMWE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "QWE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I8",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.25,
+ "subComps": [
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 159.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 104.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 150.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 109.0,
+ "y": 214.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 14.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 104.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 64.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 154.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 54.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 134.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 99.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 115.0,
+ "y": 210.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 110.0,
+ "y": 105.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 145.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 130.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I8"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I7"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 55.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I6"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 165.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 5.0
+ },
+ {
+ "x": 40.0,
+ "y": 5.0
+ },
+ {
+ "x": 40.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 65.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "NSH"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 5.0
+ },
+ {
+ "x": 135.0,
+ "y": 5.0
+ },
+ {
+ "x": 135.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 115.0
+ },
+ {
+ "x": 45.0,
+ "y": 115.0
+ },
+ {
+ "x": 45.0,
+ "y": 105.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 145.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "RAMWE"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 60.0
+ },
+ {
+ "x": 125.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "LSH"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 140.0
+ },
+ {
+ "x": 125.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#8",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "RSH"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 20.0
+ },
+ {
+ "x": 130.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#9",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 170.0
+ },
+ {
+ "x": 105.0,
+ "y": 170.0
+ },
+ {
+ "x": 105.0,
+ "y": 120.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#10",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 110.0,
+ "y": 155.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#12",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#12",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 110.0,
+ "y": 225.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#11",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "YF"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#12",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QWE"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901DestDecode",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 60.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Q1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Q2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Q3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Q4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "WE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 32.5
+ },
+ "id": "GUIdff",
+ "name": "GUIdff#1"
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 7.5
+ },
+ "id": "GUIdff",
+ "name": "GUIdff#0"
+ },
+ {
+ "pos": {
+ "x": 41.5,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 41.5,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 41.5,
+ "y": 61.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 5.0,
+ "y": 15.0
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 82.5
+ },
+ "id": "GUIdff",
+ "name": "GUIdff#3"
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 57.5
+ },
+ "id": "GUIdff",
+ "name": "GUIdff#2"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "WE"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdff#0",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 42.5,
+ "y": 12.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdff#1",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdff#2",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdff#3",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 42.5,
+ "y": 87.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "GUIdff#0",
+ "pinName": "D"
+ },
+ "path": [
+ {
+ "x": 17.5,
+ "y": 62.5
+ },
+ {
+ "x": 17.5,
+ "y": 42.5
+ },
+ {
+ "x": 45.0,
+ "y": 42.5
+ },
+ {
+ "x": 45.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "GUIdff#1",
+ "pinName": "D"
+ },
+ "path": [
+ {
+ "x": 22.5,
+ "y": 87.5
+ },
+ {
+ "x": 22.5,
+ "y": 47.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "GUIdff#2",
+ "pinName": "D"
+ },
+ "path": [
+ {
+ "x": 27.5,
+ "y": 112.5
+ },
+ {
+ "x": 27.5,
+ "y": 72.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "GUIdff#3",
+ "pinName": "D"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 137.5
+ },
+ {
+ "x": 32.5,
+ "y": 97.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdff#0",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdff#1",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdff#2",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdff#3",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901QReg",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 50.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "RD",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "SQ",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "SA",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "RA",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "SB",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.25,
+ "subComps": [
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 94.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 139.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 94.0,
+ "y": 179.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 144.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 104.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 99.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 54.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 134.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 64.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 36.5,
+ "y": 99.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 99.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 70.0,
+ "y": 170.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 70.0,
+ "y": 130.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 100.0,
+ "y": 170.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 100.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 70.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 70.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 70.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 170.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 130.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 5.0
+ },
+ {
+ "x": 35.0,
+ "y": 5.0
+ },
+ {
+ "x": 35.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#12",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 195.0
+ },
+ {
+ "x": 65.0,
+ "y": 195.0
+ },
+ {
+ "x": 65.0,
+ "y": 185.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 55.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 65.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 112.5
+ },
+ {
+ "x": 32.5,
+ "y": 112.5
+ },
+ {
+ "x": 32.5,
+ "y": 105.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 175.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 37.5,
+ "y": 35.0
+ },
+ {
+ "x": 65.0,
+ "y": 35.0
+ },
+ {
+ "x": 65.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 37.5,
+ "y": 185.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 55.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 65.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 105.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 135.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 145.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#12",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#8",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#13",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#13",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#9",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "RA"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#10",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "SB"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#11",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "SA"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#12",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#14",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 175.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#14",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 185.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#13",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "SQ"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#14",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "RD"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "Am2901SourceDecode",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.examples;
+
+import java.io.IOException;
+import java.util.function.Function;
+
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUI_rsLatch;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand41;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIandor414;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdemux2;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdff;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdlatch;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdlatch4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIfulladder;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIhalfadder;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUImux1;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUImux1_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUInand3;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUInot4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIor4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIor_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIram2;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIram4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIsel2_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIsel3_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIxor;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901ALUFuncDecode;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901ALUInclDecode;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901ALUInclSourceDecodeInclFunctionDecode;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901ALUOneBit;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901DestDecode;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901QReg;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901SourceDecode;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams;
+import net.mograsim.logic.model.util.JsonHandler;
+
+public class ComponenetSerializer
+{
+ public static void main(String[] args) throws IOException
+ {
+ // we know we only use components where this works
+ Function<GUIComponent, String> getIdentifier = c -> c.getClass().getSimpleName();
+
+ ViewModelModifiable model = new ViewModelModifiable();
+ SubmodelComponent[] components = { new GUIAm2901(model), new GUIAm2901ALUFuncDecode(model), new GUIAm2901ALUInclDecode(model),
+ new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(model), new GUIAm2901ALUOneBit(model), new GUIAm2901DestDecode(model),
+ new GUIAm2901QReg(model), new GUIAm2901SourceDecode(model), new GUI_rsLatch(model), new GUIand(model), new GUIand41(model),
+ new GUIandor414(model), new GUIdemux2(model), new GUIdff(model), new GUIdlatch(model), new GUIdlatch4(model),
+ new GUIfulladder(model), new GUIhalfadder(model), new GUImux1(model), new GUImux1_4(model), new GUInand3(model),
+ new GUInot4(model), new GUIor4(model), new GUIor_4(model), new GUIram2(model), new GUIram4(model), new GUIsel2_4(model),
+ new GUIsel3_4(model), new GUIxor(model) };
+
+ for (SubmodelComponent comp : components)
+ {
+ SubmodelComponentParams params = comp.calculateParams(getIdentifier);
+ JsonHandler.writeJson(params, "components/"
+ + comp.getClass().getName().substring("net.mograsim.logic.ui.model.components.mi.nandbased.".length()).replace('.', '/')
+ + ".json");
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.examples;
+
+import java.io.IOException;
+
+import com.google.gson.JsonNull;
+
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUI_rsLatch;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIfulladder;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.logic.model.serializing.SubmodelComponentDeserializer;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams;
+import net.mograsim.logic.model.util.JsonHandler;
+
+public class JsonExample
+{
+ public static void main(String[] args)
+ {
+ SimpleLogicUIStandalone.executeVisualisation(JsonExample::basicTest);
+ }
+
+ public static void mappingTest(ViewModelModifiable model)
+ {
+ IndirectGUIComponentCreator.createComponent(model, "Am2901", JsonNull.INSTANCE, "Am2901 instance");
+ }
+
+ private static class TestComponent extends SimpleRectangularSubmodelComponent
+ {
+ protected TestComponent(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "Test", name);
+ setSubmodelScale(.4);
+ setInputPins("Input pin #0");
+ SubmodelComponentDeserializer.create(submodelModifiable, "HalfAdder.json", "halfadder");
+ }
+ }
+
+ @SuppressWarnings("unused") // GUIWires being created
+ private static void basicTest(ViewModelModifiable viewModel)
+ {
+ GUI_rsLatch comp = new GUI_rsLatch(viewModel, "Original RS latch");
+ comp.moveTo(30, 0);
+ SubmodelComponentParams params = comp.calculateParams();
+ String jsonString = JsonHandler.toJson(params);
+ System.out.println(jsonString);
+ SubmodelComponentParams paramsD = JsonHandler.fromJson(jsonString, SubmodelComponentParams.class);
+ SubmodelComponent componentD = SubmodelComponentDeserializer.create(viewModel, paramsD, "Deserialized RS latch");
+ componentD.moveTo(30, 50);
+ double h = 0;
+ for (String s : comp.getInputPinNames())
+ {
+ GUIManualSwitch sw = new GUIManualSwitch(viewModel);
+ sw.moveTo(0, h);
+ new GUIWire(viewModel, sw.getOutputPin(), comp.getPin(s));
+ sw = new GUIManualSwitch(viewModel);
+ sw.moveTo(0, h + 50);
+ new GUIWire(viewModel, sw.getOutputPin(), componentD.getPin(s));
+ h += 20;
+ }
+ h = 0;
+ for (String s : comp.getOutputPinNames())
+ {
+ GUIBitDisplay bd = new GUIBitDisplay(viewModel);
+ bd.moveTo(80, h);
+ new GUIWire(viewModel, bd.getInputPin(), comp.getPin(s));
+ bd = new GUIBitDisplay(viewModel);
+ bd.moveTo(80, h + 50);
+ new GUIWire(viewModel, bd.getInputPin(), componentD.getPin(s));
+ h += 20;
+ }
+ }
+
+ // Execute only after HalfAdder.json has been created
+ public static void refJsonFromJsonTest(ViewModelModifiable model)
+ {
+ TestComponent t = new TestComponent(model, "Original component");
+ t.calculateParams().writeJson("Test.json");
+ SubmodelComponent c = SubmodelComponentDeserializer.create(model, "Test.json", "Deserialized component");
+ c.moveTo(0, 50);
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ public static void createFromJsonExample(ViewModelModifiable model)
+ {
+ SimpleRectangularSubmodelComponent tmp = new GUIfulladder(model, "Original full adder");
+ SubmodelComponentParams pC = tmp.calculateParams();
+ tmp.moveTo(1000, 100);
+ try
+ {
+ pC.writeJson("FullAdder.json");
+ pC = SubmodelComponentParams.readJson("FullAdder.json");
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+
+ SimpleRectangularSubmodelComponent adder = (SimpleRectangularSubmodelComponent) SubmodelComponentDeserializer.create(model,
+ "FullAdder.json", "Deserialized full adder");
+
+ GUIManualSwitch swA = new GUIManualSwitch(model);
+ swA.moveTo(0, 0);
+ GUIManualSwitch swB = new GUIManualSwitch(model);
+ swB.moveTo(0, 25);
+ GUIManualSwitch swC = new GUIManualSwitch(model);
+ swC.moveTo(0, 50);
+
+ adder.moveTo(30, 10);
+ GUIBitDisplay bdY = new GUIBitDisplay(model);
+ bdY.moveTo(90, 12.5);
+ GUIBitDisplay bdZ = new GUIBitDisplay(model);
+ bdZ.moveTo(90, 30);
+
+ new GUIWire(model, swA.getOutputPin(), adder.getPin("A"));
+ new GUIWire(model, swB.getOutputPin(), adder.getPin("B"));
+ new GUIWire(model, swC.getOutputPin(), adder.getPin("C"));
+
+ new GUIWire(model, adder.getPin("Y"), bdY.getInputPin());
+ new GUIWire(model, adder.getPin("Z"), bdZ.getInputPin());
+
+ SubmodelComponent adder2 = SubmodelComponentDeserializer.create(model, pC, "Full adder created from params instance");
+
+ swA = new GUIManualSwitch(model);
+ swA.moveTo(0, 70);
+ swB = new GUIManualSwitch(model);
+ swB.moveTo(0, 85);
+ swC = new GUIManualSwitch(model);
+ swC.moveTo(0, 100);
+
+ adder2.moveTo(30, 80);
+ bdY = new GUIBitDisplay(model);
+ bdY.moveTo(90, 70);
+ bdZ = new GUIBitDisplay(model);
+ bdZ.moveTo(90, 85);
+
+ new GUIWire(model, swA.getOutputPin(), adder2.getPin("A"));
+ new GUIWire(model, swB.getOutputPin(), adder2.getPin("B"));
+ new GUIWire(model, swC.getOutputPin(), adder2.getPin("C"));
+
+ new GUIWire(model, adder2.getPin("Y"), bdY.getInputPin());
+ new GUIWire(model, adder2.getPin("Z"), bdZ.getInputPin());
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.examples;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.SubmodelComponentDeserializer;
+
+public class SubmodelComponentTestbench
+{
+ public static void main(String[] args)
+ {
+ SimpleLogicUIStandalone.executeVisualisation(SubmodelComponentTestbench::createTestbench);
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ public static void createTestbench(ViewModelModifiable model)
+ {
+ SubmodelComponent comp = SubmodelComponentDeserializer.create(model, "components/am2901/GUIAm2901.json");
+
+ // guess which pins are outputs and which are inputs
+ // TODO this code exists three times... but it seems too "hacky" to put it in a helper class
+ List<String> inputPinNames = new ArrayList<>();
+ List<String> outputPinNames = new ArrayList<>();
+ for (Pin p : comp.getPins().values())
+ if (p.getRelX() == 0)
+ inputPinNames.add(p.name);
+ else
+ outputPinNames.add(p.name);
+
+ comp.moveTo(100, 0);
+ for (int i = 0; i < inputPinNames.size(); i++)
+ {
+ GUIManualSwitch sw = new GUIManualSwitch(model);
+ sw.moveTo(0, 20 * i);
+ new GUIWire(model, comp.getPin(inputPinNames.get(i)), sw.getOutputPin());
+ }
+ for (int i = 0; i < outputPinNames.size(); i++)
+ {
+ GUIBitDisplay bd = new GUIBitDisplay(model);
+ bd.moveTo(200, 20 * i);
+ new GUIWire(model, comp.getPin(outputPinNames.get(i)), bd.getInputPin());
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUI_rsLatch extends SimpleRectangularSubmodelComponent
+{
+ private GUIWire wireQ, wire_Q;
+
+ public GUI_rsLatch(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUI_rsLatch(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "_rsLatch", name);
+ setSubmodelScale(.4);
+ setInputPins("_S", "_R");
+ setOutputPins("Q", "_Q");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin _S = getSubmodelPin("_S");
+ Pin _R = getSubmodelPin("_R");
+ Pin Q = getSubmodelPin("Q");
+ Pin _Q = getSubmodelPin("_Q");
+
+ GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+
+ nand1.moveTo(10, 7.5);
+ nand2.moveTo(40, 12.5);
+ cp1.moveCenterTo(35, 17.5);
+ cp2.moveCenterTo(65, 37.5);
+
+ new GUIWire(submodelModifiable, _S, nand1.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, _R, nand2.getPin("B"), new Point(35, 37.5), new Point(35, 27.5));
+ new GUIWire(submodelModifiable, nand1.getPin("Y"), cp1, new Point[0]);
+ new GUIWire(submodelModifiable, nand2.getPin("Y"), cp2, new Point(65, 22.5));
+ new GUIWire(submodelModifiable, cp1, nand2.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, cp2, nand1.getPin("B"), new Point(65, 42.5), new Point(5, 42.5), new Point(5, 22.5));
+ wireQ = new GUIWire(submodelModifiable, cp1, Q, new Point(35, 17.5), new Point(35, 7.5), new Point(65, 7.5), new Point(65, 12.5));
+ wire_Q = new GUIWire(submodelModifiable, cp2, _Q, new Point[0]);
+
+ addAtomicHighLevelStateID("q");
+ }
+
+ @Override
+ public void setAtomicHighLevelState(String stateID, Object newState)
+ {
+ switch (stateID)
+ {
+ case "q":
+ if (wireQ != null)
+ {
+ // TODO force this to happen without any Timeline updates in the meantime.
+ // Maybe make it a requirement of setHighLevelState that the Timeline is "halted" during a call?
+ Bit newStateCasted = (Bit) newState;
+ BitVector newStateVector = BitVector.of(newStateCasted);
+ if (wireQ.hasLogicModelBinding())
+ wireQ.forceWireValues(newStateVector);
+ // We set both wires because then both outputs go to their correct state at the same time, and to avoid problems when not
+ // both
+ // inputs are 1
+ if (wire_Q.hasLogicModelBinding())
+ wire_Q.forceWireValues(newStateVector.not());
+ }
+ break;
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ @Override
+ public Object getAtomicHighLevelState(String stateID)
+ {
+ switch (stateID)
+ {
+ case "q":
+ if (wireQ.hasLogicModelBinding())
+ return wireQ.getWireValues().getLSBit(0);
+ return null;
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUI_rsLatch.class.getCanonicalName(), (m, p, n) -> new GUI_rsLatch(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIand extends SimpleRectangularSubmodelComponent
+{
+ public GUIand(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIand(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIand", name);
+ setSubmodelScale(.4);
+ setInputPins("A", "B");
+ setOutputPins("Y");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin A = getSubmodelPin("A");
+ Pin B = getSubmodelPin("B");
+ Pin Y = getSubmodelPin("Y");
+
+ GUINandGate nand = new GUINandGate(submodelModifiable, 1);
+ GUINandGate not = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+
+ nand.moveTo(20, 15);
+ not.moveTo(50, 15);
+ cp1.moveCenterTo(45, 25);
+
+ new GUIWire(submodelModifiable, A, nand.getPin("A"));
+ new GUIWire(submodelModifiable, B, nand.getPin("B"));
+ new GUIWire(submodelModifiable, nand.getPin("Y"), cp1, new Point[0]);
+ new GUIWire(submodelModifiable, cp1, not.getPin("A"), new Point(45, 20));
+ new GUIWire(submodelModifiable, cp1, not.getPin("B"), new Point(45, 30));
+ new GUIWire(submodelModifiable, not.getPin("Y"), Y);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIand.class.getCanonicalName(), (m, p, n) -> new GUIand(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIand41 extends SimpleRectangularSubmodelComponent
+{
+ public GUIand41(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIand41(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIand41", name);
+ setSubmodelScale(.4);
+ setInputPins("A1", "A2", "A3", "A4", "B");
+ setOutputPins("Y1", "Y2", "Y3", "Y4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin A1 = getSubmodelPin("A1");
+ Pin A2 = getSubmodelPin("A2");
+ Pin A3 = getSubmodelPin("A3");
+ Pin A4 = getSubmodelPin("A4");
+ Pin B = getSubmodelPin("B");
+ Pin Y1 = getSubmodelPin("Y1");
+ Pin Y2 = getSubmodelPin("Y2");
+ Pin Y3 = getSubmodelPin("Y3");
+ Pin Y4 = getSubmodelPin("Y4");
+
+ GUIand and1 = new GUIand(submodelModifiable);
+ GUIand and2 = new GUIand(submodelModifiable);
+ GUIand and3 = new GUIand(submodelModifiable);
+ GUIand and4 = new GUIand(submodelModifiable);
+
+ WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB4 = new WireCrossPoint(submodelModifiable, 1);
+
+ and1.moveTo(30, 7.5);
+ and2.moveTo(30, 32.5);
+ and3.moveTo(30, 57.5);
+ and4.moveTo(30, 82.5);
+ cpB2.moveCenterTo(25, 47.5);
+ cpB3.moveCenterTo(25, 72.5);
+ cpB4.moveCenterTo(25, 97.5);
+
+ new GUIWire(submodelModifiable, A1, and1.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, A2, and2.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, A3, and3.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, A4, and4.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, B, cpB4, new Point(25, 112.5));
+ new GUIWire(submodelModifiable, cpB4, and4.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpB4, cpB3, new Point[0]);
+ new GUIWire(submodelModifiable, cpB3, and3.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpB3, cpB2, new Point[0]);
+ new GUIWire(submodelModifiable, cpB2, and2.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpB2, and1.getPin("B"), new Point(25, 22.5));
+ new GUIWire(submodelModifiable, and1.getPin("Y"), Y1, new Point[0]);
+ new GUIWire(submodelModifiable, and2.getPin("Y"), Y2, new Point[0]);
+ new GUIWire(submodelModifiable, and3.getPin("Y"), Y3, new Point[0]);
+ new GUIWire(submodelModifiable, and4.getPin("Y"), Y4, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIand41.class.getCanonicalName(), (m, p, n) -> new GUIand41(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIandor414 extends SimpleRectangularSubmodelComponent
+{
+ public GUIandor414(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIandor414(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIandor414", name);
+ setSubmodelScale(.4);
+ setInputPins("C1", "C2", "C3", "C4", "A1", "A2", "A3", "A4", "B");
+ setOutputPins("Y1", "Y2", "Y3", "Y4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin C1 = getSubmodelPin("C1");
+ Pin C2 = getSubmodelPin("C2");
+ Pin C3 = getSubmodelPin("C3");
+ Pin C4 = getSubmodelPin("C4");
+ Pin A1 = getSubmodelPin("A1");
+ Pin A2 = getSubmodelPin("A2");
+ Pin A3 = getSubmodelPin("A3");
+ Pin A4 = getSubmodelPin("A4");
+ Pin B = getSubmodelPin("B");
+ Pin Y1 = getSubmodelPin("Y1");
+ Pin Y2 = getSubmodelPin("Y2");
+ Pin Y3 = getSubmodelPin("Y3");
+ Pin Y4 = getSubmodelPin("Y4");
+
+ GUIand41 and = new GUIand41(submodelModifiable);
+ GUIor_4 or = new GUIor_4(submodelModifiable);
+
+ and.moveTo(15, 137.5);
+ or.moveTo(35, 37.5);
+
+ new GUIWire(submodelModifiable, A1, and.getPin("A1"), new Point(10, 112.5), new Point(10, 142.5));
+ new GUIWire(submodelModifiable, A2, and.getPin("A2"), new Point(5, 137.5), new Point(5, 152.5));
+ new GUIWire(submodelModifiable, A3, and.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, A4, and.getPin("A4"), new Point(5, 187.5), new Point(5, 172.5));
+ new GUIWire(submodelModifiable, B, and.getPin("B"), new Point(10, 212.5), new Point(10, 182.5));
+ new GUIWire(submodelModifiable, C1, or.getPin("A1"), new Point(10, 12.5), new Point(10, 42.5));
+ new GUIWire(submodelModifiable, C2, or.getPin("A2"), new Point(5, 37.5), new Point(5, 52.5));
+ new GUIWire(submodelModifiable, C3, or.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, C4, or.getPin("A4"), new Point(5, 87.5), new Point(5, 72.5));
+ new GUIWire(submodelModifiable, and.getPin("Y1"), or.getPin("B1"), new Point(70, 142.5), new Point(70, 120), new Point(30, 120),
+ new Point(30, 82.5));
+ new GUIWire(submodelModifiable, and.getPin("Y2"), or.getPin("B2"), new Point(65, 152.5), new Point(65, 125), new Point(25, 125),
+ new Point(25, 92.5));
+ new GUIWire(submodelModifiable, and.getPin("Y3"), or.getPin("B3"), new Point(60, 162.5), new Point(60, 130), new Point(20, 130),
+ new Point(20, 102.5));
+ new GUIWire(submodelModifiable, and.getPin("Y4"), or.getPin("B4"), new Point(55, 172.5), new Point(55, 135), new Point(15, 135),
+ new Point(15, 112.5));
+ new GUIWire(submodelModifiable, or.getPin("Y1"), Y1, new Point(75, 42.5), new Point(75, 12.5));
+ new GUIWire(submodelModifiable, or.getPin("Y2"), Y2, new Point(80, 52.5), new Point(80, 37.5));
+ new GUIWire(submodelModifiable, or.getPin("Y3"), Y3, new Point[0]);
+ new GUIWire(submodelModifiable, or.getPin("Y4"), Y4, new Point(80, 72.5), new Point(80, 87.5));
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIandor414.class.getCanonicalName(), (m, p, n) -> new GUIandor414(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIdemux2 extends SimpleRectangularSubmodelComponent
+{
+ public GUIdemux2(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIdemux2(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIdemux2", name);
+ setSubmodelScale(.4);
+ setInputPins("S0", "S1");
+ setOutputPins("Y00", "Y01", "Y10", "Y11");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin S0 = getSubmodelPin("S0");
+ Pin S1 = getSubmodelPin("S1");
+ Pin Y00 = getSubmodelPin("Y00");
+ Pin Y01 = getSubmodelPin("Y01");
+ Pin Y10 = getSubmodelPin("Y10");
+ Pin Y11 = getSubmodelPin("Y11");
+
+ GUINandGate notS0 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notS1 = new GUINandGate(submodelModifiable, 1);
+ GUIand andY00 = new GUIand(submodelModifiable);
+ GUIand andY01 = new GUIand(submodelModifiable);
+ GUIand andY10 = new GUIand(submodelModifiable);
+ GUIand andY11 = new GUIand(submodelModifiable);
+
+ WireCrossPoint cpS01 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpS02 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpS03 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpS11 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpS12 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpS13 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotS0 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotS1 = new WireCrossPoint(submodelModifiable, 1);
+
+ notS0.moveTo(10, 2.5);
+ notS1.moveTo(10, 27.5);
+ andY00.moveTo(40, 2.5);
+ andY01.moveTo(40, 27.5);
+ andY10.moveTo(40, 52.5);
+ andY11.moveTo(40, 77.5);
+ cpS01.moveCenterTo(7.5, 12.5);
+ cpS11.moveCenterTo(5, 37.5);
+ cpS02.moveCenterTo(7.5, 17.5);
+ cpS12.moveCenterTo(5, 42.5);
+ cpS03.moveCenterTo(37.5, 62.5);
+ cpS13.moveCenterTo(32.5, 67.5);
+ cpNotS0.moveCenterTo(32.5, 12.5);
+ cpNotS1.moveCenterTo(35, 37.5);
+
+ new GUIWire(submodelModifiable, S0, cpS01, new Point[0]);
+ new GUIWire(submodelModifiable, S1, cpS11, new Point[0]);
+ new GUIWire(submodelModifiable, cpS01, notS0.getPin("A"), new Point(7.5, 7.5));
+ new GUIWire(submodelModifiable, cpS11, notS1.getPin("A"), new Point(5, 32.5));
+ new GUIWire(submodelModifiable, cpS01, cpS02, new Point[0]);
+ new GUIWire(submodelModifiable, cpS11, cpS12, new Point[0]);
+ new GUIWire(submodelModifiable, cpS02, notS0.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpS12, notS1.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpS02, cpS03, new Point(7.5, 62.5));
+ new GUIWire(submodelModifiable, cpS12, cpS13, new Point(5, 67.5), new Point(32.5, 67.5));
+ new GUIWire(submodelModifiable, notS0.getPin("Y"), cpNotS0, new Point[0]);
+ new GUIWire(submodelModifiable, notS1.getPin("Y"), cpNotS1, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotS0, andY00.getPin("A"), new Point(32.5, 7.5));
+ new GUIWire(submodelModifiable, cpNotS1, andY00.getPin("B"), new Point(35, 17.5));
+ new GUIWire(submodelModifiable, cpS03, andY01.getPin("A"), new Point(37.5, 32.5));
+ new GUIWire(submodelModifiable, cpNotS1, andY01.getPin("B"), new Point(35, 42.5));
+ new GUIWire(submodelModifiable, cpNotS0, andY10.getPin("A"), new Point(32.5, 57.5));
+ new GUIWire(submodelModifiable, cpS13, andY10.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpS03, andY11.getPin("A"), new Point(37.5, 82.5));
+ new GUIWire(submodelModifiable, cpS13, andY11.getPin("B"), new Point(32.5, 92.5));
+ new GUIWire(submodelModifiable, andY00.getPin("Y"), Y00);
+ new GUIWire(submodelModifiable, andY01.getPin("Y"), Y01);
+ new GUIWire(submodelModifiable, andY10.getPin("Y"), Y10);
+ new GUIWire(submodelModifiable, andY11.getPin("Y"), Y11);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIdemux2.class.getCanonicalName(), (m, p, n) -> new GUIdemux2(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIdff extends SimpleRectangularSubmodelComponent
+{
+ private GUI_rsLatch _rsLatch;
+
+ public GUIdff(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIdff(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIdff", name);
+ setSubmodelScale(.2);
+ setInputPins("C", "D");
+ setOutputPins("Q", "_Q");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin C = getSubmodelPin("C");
+ Pin D = getSubmodelPin("D");
+ Pin Q = getSubmodelPin("Q");
+ Pin _Q = getSubmodelPin("_Q");
+
+ GUI_rsLatch _rsLatch1 = new GUI_rsLatch(submodelModifiable);
+ GUInand3 nand3 = new GUInand3(submodelModifiable);
+ GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
+ GUI_rsLatch _rsLatch2 = this._rsLatch = new GUI_rsLatch(submodelModifiable);
+
+ WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
+
+ _rsLatch1.moveTo(40, 10);
+ nand3.moveTo(40, 40);
+ nand2.moveTo(120, 60);
+ _rsLatch2.moveTo(120, 30);
+ cp1.moveCenterTo(10, 25);
+ cp2.moveCenterTo(20, 65);
+ cp3.moveCenterTo(100, 35);
+ cp4.moveCenterTo(100, 45);
+
+ new GUIWire(submodelModifiable, C, cp1, new Point[0]);
+ new GUIWire(submodelModifiable, cp1, _rsLatch1.getPin("_R"), new Point[0]);
+ new GUIWire(submodelModifiable, cp1, nand3.getPin("B"), new Point(10, 55));
+ new GUIWire(submodelModifiable, D, nand2.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, nand2.getPin("Y"), cp2, new Point(145, 70), new Point(145, 85), new Point(20, 85));
+ new GUIWire(submodelModifiable, cp2, _rsLatch1.getPin("_S"), new Point(20, 15));
+ new GUIWire(submodelModifiable, cp2, nand3.getPin("C"), new Point[0]);
+ new GUIWire(submodelModifiable, _rsLatch1.getPin("_Q"), cp3, new Point(100, 25));
+ new GUIWire(submodelModifiable, cp3, nand3.getPin("A"), new Point(30, 35), new Point(30, 45));
+ new GUIWire(submodelModifiable, cp3, _rsLatch2.getPin("_S"), new Point[0]);
+ new GUIWire(submodelModifiable, nand3.getPin("Y"), cp4, new Point[0]);
+ new GUIWire(submodelModifiable, cp4, _rsLatch2.getPin("_R"), new Point[0]);
+ new GUIWire(submodelModifiable, cp4, nand2.getPin("A"), new Point(100, 65));
+ new GUIWire(submodelModifiable, _rsLatch2.getPin("Q"), Q);
+ new GUIWire(submodelModifiable, _rsLatch2.getPin("_Q"), _Q);
+
+ addAtomicHighLevelStateID("q");
+ }
+
+ @Override
+ public void setAtomicHighLevelState(String stateID, Object newState)
+ {
+ switch (stateID)
+ {
+ case "q":
+ _rsLatch.setHighLevelState("q", newState);
+ break;
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ @Override
+ public Object getAtomicHighLevelState(String stateID)
+ {
+ switch (stateID)
+ {
+ case "q":
+ return _rsLatch.getHighLevelState("q");
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIdff.class.getCanonicalName(), (m, p, n) -> new GUIdff(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIdlatch extends SimpleRectangularSubmodelComponent
+{
+ private GUI_rsLatch _rsLatch;
+
+ public GUIdlatch(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIdlatch(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIdlatch", name);
+ setSubmodelScale(.4);
+ setInputPins("D", "E");
+ setOutputPins("Q", "_Q");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin D = getSubmodelPin("D");
+ Pin E = getSubmodelPin("E");
+ Pin Q = getSubmodelPin("Q");
+ Pin _Q = getSubmodelPin("_Q");
+
+ GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
+ _rsLatch = new GUI_rsLatch(submodelModifiable);
+
+ WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+
+ nand1.moveTo(10, 2.5);
+ nand2.moveTo(15, 27.5);
+ _rsLatch.moveTo(45, 7.5);
+ cp1.moveCenterTo(5, 37.5);
+ cp2.moveCenterTo(35, 12.5);
+
+ new GUIWire(submodelModifiable, D, nand1.getPin("A"));
+ new GUIWire(submodelModifiable, E, cp1, new Point[0]);
+ new GUIWire(submodelModifiable, cp1, nand1.getPin("B"), new Point(5, 17.5));
+ new GUIWire(submodelModifiable, cp1, nand2.getPin("B"), new Point(5, 42.5));
+ new GUIWire(submodelModifiable, nand1.getPin("Y"), cp2, new Point[0]);
+ new GUIWire(submodelModifiable, cp2, nand2.getPin("A"), new Point(35, 25), new Point(10, 25), new Point(10, 32.5));
+ new GUIWire(submodelModifiable, cp2, _rsLatch.getPin("_S"), new Point[0]);
+ new GUIWire(submodelModifiable, nand2.getPin("Y"), _rsLatch.getPin("_R"), new Point(40, 37.5), new Point(40, 22.5));
+ new GUIWire(submodelModifiable, _rsLatch.getPin("Q"), Q, new Point[0]);
+ new GUIWire(submodelModifiable, _rsLatch.getPin("_Q"), _Q);
+
+ addAtomicHighLevelStateID("q");
+ }
+
+ @Override
+ public void setAtomicHighLevelState(String stateID, Object newState)
+ {
+ switch (stateID)
+ {
+ case "q":
+ _rsLatch.setHighLevelState("q", newState);
+ break;
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ @Override
+ public Object getAtomicHighLevelState(String stateID)
+ {
+ switch (stateID)
+ {
+ case "q":
+ return _rsLatch.getHighLevelState("q");
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIdlatch.class.getCanonicalName(), (m, p, n) -> new GUIdlatch(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIdlatch4 extends SimpleRectangularSubmodelComponent
+{
+ private GUIdlatch dlatch1;
+ private GUIdlatch dlatch2;
+ private GUIdlatch dlatch3;
+ private GUIdlatch dlatch4;
+
+ public GUIdlatch4(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIdlatch4(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIdlatch4", name);
+ setSubmodelScale(.4);
+ setInputPins("D1", "D2", "D3", "D4", "C");
+ setOutputPins("Q1", "Q2", "Q3", "Q4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin D1 = getSubmodelPin("D1");
+ Pin D2 = getSubmodelPin("D2");
+ Pin D3 = getSubmodelPin("D3");
+ Pin D4 = getSubmodelPin("D4");
+ Pin C = getSubmodelPin("C");
+ Pin Q1 = getSubmodelPin("Q1");
+ Pin Q2 = getSubmodelPin("Q2");
+ Pin Q3 = getSubmodelPin("Q3");
+ Pin Q4 = getSubmodelPin("Q4");
+
+ dlatch1 = new GUIdlatch(submodelModifiable);
+ dlatch2 = new GUIdlatch(submodelModifiable);
+ dlatch3 = new GUIdlatch(submodelModifiable);
+ dlatch4 = new GUIdlatch(submodelModifiable);
+
+ WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
+
+ dlatch1.moveTo(30, 7.5);
+ dlatch2.moveTo(30, 32.5);
+ dlatch3.moveTo(30, 57.5);
+ dlatch4.moveTo(30, 82.5);
+ cp2.moveCenterTo(15, 47.5);
+ cp3.moveCenterTo(15, 72.5);
+ cp4.moveCenterTo(15, 97.5);
+
+ new GUIWire(submodelModifiable, C, cp4, new Point(15, 112.5));
+ new GUIWire(submodelModifiable, cp4, dlatch4.getPin("E"), new Point[0]);
+ new GUIWire(submodelModifiable, cp4, cp3, new Point[0]);
+ new GUIWire(submodelModifiable, cp3, dlatch3.getPin("E"), new Point[0]);
+ new GUIWire(submodelModifiable, cp3, cp2, new Point[0]);
+ new GUIWire(submodelModifiable, cp2, dlatch2.getPin("E"), new Point[0]);
+ new GUIWire(submodelModifiable, cp2, dlatch1.getPin("E"), new Point(15, 22.5));
+ new GUIWire(submodelModifiable, D1, dlatch1.getPin("D"), new Point[0]);
+ new GUIWire(submodelModifiable, D2, dlatch2.getPin("D"), new Point[0]);
+ new GUIWire(submodelModifiable, D3, dlatch3.getPin("D"), new Point[0]);
+ new GUIWire(submodelModifiable, D4, dlatch4.getPin("D"), new Point[0]);
+ new GUIWire(submodelModifiable, dlatch1.getPin("Q"), Q1, new Point[0]);
+ new GUIWire(submodelModifiable, dlatch2.getPin("Q"), Q2, new Point[0]);
+ new GUIWire(submodelModifiable, dlatch3.getPin("Q"), Q3, new Point[0]);
+ new GUIWire(submodelModifiable, dlatch4.getPin("Q"), Q4, new Point[0]);
+
+ addAtomicHighLevelStateID("q1");
+ addAtomicHighLevelStateID("q2");
+ addAtomicHighLevelStateID("q3");
+ addAtomicHighLevelStateID("q4");
+ addAtomicHighLevelStateID("q");
+ }
+
+ @Override
+ public void setAtomicHighLevelState(String stateID, Object newState)
+ {
+ switch (stateID)
+ {
+ case "q1":
+ dlatch1.setHighLevelState("q", newState);
+ break;
+ case "q2":
+ dlatch2.setHighLevelState("q", newState);
+ break;
+ case "q3":
+ dlatch3.setHighLevelState("q", newState);
+ break;
+ case "q4":
+ dlatch4.setHighLevelState("q", newState);
+ break;
+ case "q":
+ BitVector newStateCasted = (BitVector) newState;
+ setHighLevelState("q1", newStateCasted.getLSBit(0));
+ setHighLevelState("q2", newStateCasted.getLSBit(1));
+ setHighLevelState("q3", newStateCasted.getLSBit(2));
+ setHighLevelState("q4", newStateCasted.getLSBit(3));
+ break;
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ @Override
+ public Object getAtomicHighLevelState(String stateID)
+ {
+ switch (stateID)
+ {
+ case "q1":
+ return dlatch1.getHighLevelState("q");
+ case "q2":
+ return dlatch2.getHighLevelState("q");
+ case "q3":
+ return dlatch3.getHighLevelState("q");
+ case "q4":
+ return dlatch4.getHighLevelState("q");
+ case "q":
+ Bit q1 = (Bit) getHighLevelState("q1");
+ Bit q2 = (Bit) getHighLevelState("q2");
+ Bit q3 = (Bit) getHighLevelState("q3");
+ Bit q4 = (Bit) getHighLevelState("q4");
+ return BitVector.of(q4, q3, q2, q1);
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIdlatch4.class.getCanonicalName(), (m, p, n) -> new GUIdlatch4(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIfulladder extends SimpleRectangularSubmodelComponent
+{
+ public GUIfulladder(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIfulladder(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIfulladder", name);
+ setSubmodelScale(.4);
+ setInputPins("A", "B", "C");
+ setOutputPins("Y", "Z");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin A = getSubmodelPin("A");
+ Pin B = getSubmodelPin("B");
+ Pin C = getSubmodelPin("C");
+ Pin Y = getSubmodelPin("Y");
+ Pin Z = getSubmodelPin("Z");
+
+ GUIhalfadder halfBC = new GUIhalfadder(submodelModifiable);
+ GUIhalfadder halfAY = new GUIhalfadder(submodelModifiable);
+ GUINandGate nandZ = new GUINandGate(submodelModifiable, 1);
+
+ halfAY.moveTo(45, 7.5);
+ halfBC.moveTo(5, 40);
+ nandZ.moveTo(57.5, 40);
+
+ new GUIWire(submodelModifiable, A, halfAY.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, B, halfBC.getPin("A"));
+ new GUIWire(submodelModifiable, C, halfBC.getPin("B"));
+ new GUIWire(submodelModifiable, halfBC.getPin("Y"), halfAY.getPin("B"));
+ new GUIWire(submodelModifiable, halfBC.getPin("_Z"), nandZ.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, halfAY.getPin("Y"), Y, new Point[0]);
+ new GUIWire(submodelModifiable, halfAY.getPin("_Z"), nandZ.getPin("A"), new Point(82.5, 22.5), new Point(82.5, 35),
+ new Point(52.5, 35), new Point(52.5, 45));
+ new GUIWire(submodelModifiable, nandZ.getPin("Y"), Z);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIfulladder.class.getCanonicalName(), (m, p, n) -> new GUIfulladder(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIhalfadder extends SimpleRectangularSubmodelComponent
+{
+ public GUIhalfadder(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIhalfadder(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIhalfadder", name);
+ setSubmodelScale(.4);
+ setInputPins("A", "B");
+ setOutputPins("Y", "_Z");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin A = getSubmodelPin("A");
+ Pin B = getSubmodelPin("B");
+ Pin Y = getSubmodelPin("Y");
+ Pin _Z = getSubmodelPin("_Z");
+
+ GUINandGate nand_Z = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandYA = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandYB = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cpA = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp_Z = new WireCrossPoint(submodelModifiable, 1);
+
+ nand_Z.moveTo(10, 15);
+ nandYA.moveTo(40, 2.5);
+ nandYB.moveTo(40, 27.5);
+ nandY.moveTo(65, 2.5);
+ cpA.moveCenterTo(5, 12.5);
+ cpB.moveCenterTo(5, 37.5);
+ cp_Z.moveCenterTo(35, 25);
+
+ new GUIWire(submodelModifiable, A, cpA, new Point[0]);
+ new GUIWire(submodelModifiable, cpA, nandYA.getPin("A"), new Point(5, 7.5));
+ new GUIWire(submodelModifiable, cpA, nand_Z.getPin("A"), new Point(5, 20));
+ new GUIWire(submodelModifiable, B, cpB, new Point[0]);
+ new GUIWire(submodelModifiable, cpB, nandYB.getPin("B"), new Point(5, 42.5));
+ new GUIWire(submodelModifiable, cpB, nand_Z.getPin("B"), new Point(5, 30));
+ new GUIWire(submodelModifiable, nand_Z.getPin("Y"), cp_Z, new Point[0]);
+ new GUIWire(submodelModifiable, cp_Z, _Z, new Point(80, 25), new Point(80, 37.5));
+ new GUIWire(submodelModifiable, cp_Z, nandYA.getPin("B"), new Point(35, 17.5));
+ new GUIWire(submodelModifiable, cp_Z, nandYB.getPin("A"), new Point(35, 32.5));
+ new GUIWire(submodelModifiable, nandYA.getPin("Y"), nandY.getPin("A"), new Point(62.5, 12.5), new Point(62.5, 7.5));
+ new GUIWire(submodelModifiable, nandYB.getPin("Y"), nandY.getPin("B"), new Point(62.5, 37.5), new Point(62.5, 17.5));
+ new GUIWire(submodelModifiable, nandY.getPin("Y"), Y, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIhalfadder.class.getCanonicalName(), (m, p, n) -> new GUIhalfadder(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUImux1 extends SimpleRectangularSubmodelComponent
+{
+ public GUImux1(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUImux1(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUImux1", name);
+ setSubmodelScale(.4);
+ setInputPins("S0", "I0", "I1");
+ setOutputPins("Y");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused")
+ private void initSubmodelComponents()
+ {
+ Pin S0 = getSubmodelPin("S0");
+ Pin I0 = getSubmodelPin("I0");
+ Pin I1 = getSubmodelPin("I1");
+ Pin Y = getSubmodelPin("Y");
+
+ GUINandGate nandS0 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandI0 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandI1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cp0 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+
+ nandS0.moveTo(10, 7.5);
+ nandI0.moveTo(35, 22.5);
+ nandI1.moveTo(35, 47.5);
+ nandY.moveTo(60, 30);
+ cp0.moveCenterTo(5, 12.5);
+ cp1.moveCenterTo(5, 22.5);
+
+ new GUIWire(submodelModifiable, S0, cp0, new Point[0]);
+ new GUIWire(submodelModifiable, cp0, nandS0.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, cp0, cp1, new Point[0]);
+ new GUIWire(submodelModifiable, cp1, nandS0.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, nandS0.getPin("Y"), nandI0.getPin("A"));
+ new GUIWire(submodelModifiable, I0, nandI0.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cp1, nandI1.getPin("A"), new Point(5, 52.5));
+ new GUIWire(submodelModifiable, I1, nandI1.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, nandI0.getPin("Y"), nandY.getPin("A"));
+ new GUIWire(submodelModifiable, nandI1.getPin("Y"), nandY.getPin("B"));
+ new GUIWire(submodelModifiable, nandY.getPin("Y"), Y);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUImux1.class.getCanonicalName(), (m, p, n) -> new GUImux1(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUImux1_4 extends SimpleRectangularSubmodelComponent
+{
+ public GUImux1_4(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUImux1_4(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUImux1_4", name);
+ setSubmodelScale(.4);
+ setInputPins("S0", "I0_1", "I0_2", "I0_3", "I0_4", "I1_1", "I1_2", "I1_3", "I1_4");
+ setOutputPins("Y1", "Y2", "Y3", "Y4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused")
+ private void initSubmodelComponents()
+ {
+ Pin S0 = getSubmodelPin("S0");
+ Pin I0_1 = getSubmodelPin("I0_1");
+ Pin I0_2 = getSubmodelPin("I0_2");
+ Pin I0_3 = getSubmodelPin("I0_3");
+ Pin I0_4 = getSubmodelPin("I0_4");
+ Pin I1_1 = getSubmodelPin("I1_1");
+ Pin I1_2 = getSubmodelPin("I1_2");
+ Pin I1_3 = getSubmodelPin("I1_3");
+ Pin I1_4 = getSubmodelPin("I1_4");
+ Pin Y1 = getSubmodelPin("Y1");
+ Pin Y2 = getSubmodelPin("Y2");
+ Pin Y3 = getSubmodelPin("Y3");
+ Pin Y4 = getSubmodelPin("Y4");
+
+ GUImux1 mux1 = new GUImux1(submodelModifiable);
+ GUImux1 mux2 = new GUImux1(submodelModifiable);
+ GUImux1 mux3 = new GUImux1(submodelModifiable);
+ GUImux1 mux4 = new GUImux1(submodelModifiable);
+
+ WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
+
+ mux1.moveTo(30, 7.5);
+ mux2.moveTo(30, 42.5);
+ mux3.moveTo(30, 77.5);
+ mux4.moveTo(30, 112.5);
+ cp1.moveCenterTo(25, 12.5);
+ cp2.moveCenterTo(25, 47.5);
+ cp3.moveCenterTo(25, 82.5);
+
+ new GUIWire(submodelModifiable, S0, cp1, new Point[0]);
+ new GUIWire(submodelModifiable, cp1, mux1.getPin("S0"), new Point[0]);
+ new GUIWire(submodelModifiable, I0_1, mux1.getPin("I0"), new Point(5, 37.5), new Point(5, 22.5));
+ new GUIWire(submodelModifiable, I1_1, mux1.getPin("I1"), new Point(10, 137.5), new Point(10, 32.5));
+ new GUIWire(submodelModifiable, mux1.getPin("Y"), Y1, new Point[0]);
+ new GUIWire(submodelModifiable, cp1, cp2, new Point[0]);
+ new GUIWire(submodelModifiable, cp2, mux2.getPin("S0"), new Point[0]);
+ new GUIWire(submodelModifiable, I0_2, mux2.getPin("I0"), new Point(5, 62.5), new Point(5, 57.5));
+ new GUIWire(submodelModifiable, I1_2, mux2.getPin("I1"), new Point(15, 162.5), new Point(15, 67.5));
+ new GUIWire(submodelModifiable, mux2.getPin("Y"), Y2);
+ new GUIWire(submodelModifiable, cp2, cp3, new Point[0]);
+ new GUIWire(submodelModifiable, cp3, mux3.getPin("S0"), new Point[0]);
+ new GUIWire(submodelModifiable, I0_3, mux3.getPin("I0"), new Point(5, 87.5), new Point(5, 92.5));
+ new GUIWire(submodelModifiable, I1_3, mux3.getPin("I1"), new Point(20, 187.5), new Point(20, 102.5));
+ new GUIWire(submodelModifiable, mux3.getPin("Y"), Y3);
+ new GUIWire(submodelModifiable, cp3, mux4.getPin("S0"), new Point(25, 117.5));
+ new GUIWire(submodelModifiable, I0_4, mux4.getPin("I0"), new Point(5, 112.5), new Point(5, 127.5));
+ new GUIWire(submodelModifiable, I1_4, mux4.getPin("I1"), new Point(25, 212.5), new Point(25, 137.5));
+ new GUIWire(submodelModifiable, mux4.getPin("Y"), Y4);
+
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUImux1_4.class.getCanonicalName(), (m, p, n) -> new GUImux1_4(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUInand3 extends SimpleRectangularSubmodelComponent
+{
+ public GUInand3(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUInand3(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUInand3", name);
+ setSubmodelScale(.4);
+ setInputPins("A", "B", "C");
+ setOutputPins("Y");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin A = getSubmodelPin("A");
+ Pin B = getSubmodelPin("B");
+ Pin C = getSubmodelPin("C");
+ Pin Y = getSubmodelPin("Y");
+
+ GUINandGate nandAB = new GUINandGate(submodelModifiable, 1);
+ GUINandGate andAB = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandABC = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cpNandAB = new WireCrossPoint(submodelModifiable, 1);
+
+ nandAB.moveTo(10, 15);
+ andAB.moveTo(35, 15);
+ nandABC.moveTo(62.5, 2.5);
+ cpNandAB.moveCenterTo(32.5, 25);
+
+ new GUIWire(submodelModifiable, A, nandAB.getPin("A"));
+ new GUIWire(submodelModifiable, B, nandAB.getPin("B"));
+ new GUIWire(submodelModifiable, nandAB.getPin("Y"), cpNandAB, new Point[0]);
+ new GUIWire(submodelModifiable, cpNandAB, andAB.getPin("A"), new Point(32.5, 20));
+ new GUIWire(submodelModifiable, cpNandAB, andAB.getPin("B"), new Point(32.5, 30));
+ new GUIWire(submodelModifiable, andAB.getPin("Y"), nandABC.getPin("A"), new Point(57.5, 25), new Point(57.5, 7.5));
+ new GUIWire(submodelModifiable, C, nandABC.getPin("B"), new Point(60, 62.5), new Point(60, 17.5));
+ new GUIWire(submodelModifiable, nandABC.getPin("Y"), Y, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUInand3.class.getCanonicalName(), (m, p, n) -> new GUInand3(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUInot4 extends SimpleRectangularSubmodelComponent
+{
+ public GUInot4(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUInot4(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUInot4", name);
+ setSubmodelScale(.4);
+ setInputPins("A1", "A2", "A3", "A4");
+ setOutputPins("Y1", "Y2", "Y3", "Y4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin A1 = getSubmodelPin("A1");
+ Pin A2 = getSubmodelPin("A2");
+ Pin A3 = getSubmodelPin("A3");
+ Pin A4 = getSubmodelPin("A4");
+ Pin Y1 = getSubmodelPin("Y1");
+ Pin Y2 = getSubmodelPin("Y2");
+ Pin Y3 = getSubmodelPin("Y3");
+ Pin Y4 = getSubmodelPin("Y4");
+
+ GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand3 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand4 = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
+
+ nand1.moveTo(30, 2.5);
+ nand2.moveTo(30, 27.5);
+ nand3.moveTo(30, 52.5);
+ nand4.moveTo(30, 77.5);
+ cp1.moveCenterTo(15, 12.5);
+ cp2.moveCenterTo(15, 37.5);
+ cp3.moveCenterTo(15, 62.5);
+ cp4.moveCenterTo(15, 87.5);
+
+ new GUIWire(submodelModifiable, A1, cp1, new Point[0]);
+ new GUIWire(submodelModifiable, A2, cp2, new Point[0]);
+ new GUIWire(submodelModifiable, A3, cp3, new Point[0]);
+ new GUIWire(submodelModifiable, A4, cp4, new Point[0]);
+ new GUIWire(submodelModifiable, cp1, nand1.getPin("A"), new Point(15, 7.5));
+ new GUIWire(submodelModifiable, cp2, nand2.getPin("A"), new Point(15, 32.5));
+ new GUIWire(submodelModifiable, cp3, nand3.getPin("A"), new Point(15, 57.5));
+ new GUIWire(submodelModifiable, cp4, nand4.getPin("A"), new Point(15, 82.5));
+ new GUIWire(submodelModifiable, cp1, nand1.getPin("B"), new Point(15, 17.5));
+ new GUIWire(submodelModifiable, cp2, nand2.getPin("B"), new Point(15, 42.5));
+ new GUIWire(submodelModifiable, cp3, nand3.getPin("B"), new Point(15, 67.5));
+ new GUIWire(submodelModifiable, cp4, nand4.getPin("B"), new Point(15, 92.5));
+ new GUIWire(submodelModifiable, nand1.getPin("Y"), Y1, new Point[0]);
+ new GUIWire(submodelModifiable, nand2.getPin("Y"), Y2, new Point[0]);
+ new GUIWire(submodelModifiable, nand3.getPin("Y"), Y3, new Point[0]);
+ new GUIWire(submodelModifiable, nand4.getPin("Y"), Y4, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUInot4.class.getCanonicalName(), (m, p, n) -> new GUInot4(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIor4 extends SimpleRectangularSubmodelComponent
+{
+ public GUIor4(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIor4(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIor4", name);
+ setSubmodelScale(.2);
+ setInputPins("A1", "A2", "A3", "A4");
+ setOutputPins("Y");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin A1 = getSubmodelPin("A1");
+ Pin A2 = getSubmodelPin("A2");
+ Pin A3 = getSubmodelPin("A3");
+ Pin A4 = getSubmodelPin("A4");
+ Pin Y = getSubmodelPin("Y");
+
+ GUINandGate nandA1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandA2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandA3 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandA4 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate or12 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate or34 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nor12 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nor34 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate or1234 = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpOr12 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpOr34 = new WireCrossPoint(submodelModifiable, 1);
+
+ nandA1.moveTo(20, 15);
+ nandA2.moveTo(20, 65);
+ nandA3.moveTo(20, 115);
+ nandA4.moveTo(20, 165);
+ or12.moveTo(50, 40);
+ or34.moveTo(50, 140);
+ nor12.moveTo(110, 40);
+ nor34.moveTo(110, 140);
+ or1234.moveTo(140, 90);
+ cpA1.moveCenterTo(15, 25);
+ cpA2.moveCenterTo(15, 75);
+ cpA3.moveCenterTo(15, 125);
+ cpA4.moveCenterTo(15, 175);
+ cpOr12.moveCenterTo(105, 50);
+ cpOr34.moveCenterTo(105, 150);
+
+ new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
+ new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
+ new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
+ new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
+ new GUIWire(submodelModifiable, cpA1, nandA1.getPin("A"), new Point(15, 20));
+ new GUIWire(submodelModifiable, cpA2, nandA2.getPin("A"), new Point(15, 70));
+ new GUIWire(submodelModifiable, cpA3, nandA3.getPin("A"), new Point(15, 120));
+ new GUIWire(submodelModifiable, cpA4, nandA4.getPin("A"), new Point(15, 170));
+ new GUIWire(submodelModifiable, cpA1, nandA1.getPin("B"), new Point(15, 30));
+ new GUIWire(submodelModifiable, cpA2, nandA2.getPin("B"), new Point(15, 80));
+ new GUIWire(submodelModifiable, cpA3, nandA3.getPin("B"), new Point(15, 130));
+ new GUIWire(submodelModifiable, cpA4, nandA4.getPin("B"), new Point(15, 180));
+ new GUIWire(submodelModifiable, nandA1.getPin("Y"), or12.getPin("A"));
+ new GUIWire(submodelModifiable, nandA2.getPin("Y"), or12.getPin("B"));
+ new GUIWire(submodelModifiable, nandA3.getPin("Y"), or34.getPin("A"));
+ new GUIWire(submodelModifiable, nandA4.getPin("Y"), or34.getPin("B"));
+ new GUIWire(submodelModifiable, or12.getPin("Y"), cpOr12, new Point[0]);
+ new GUIWire(submodelModifiable, or34.getPin("Y"), cpOr34, new Point[0]);
+ new GUIWire(submodelModifiable, cpOr12, nor12.getPin("A"), new Point(105, 45));
+ new GUIWire(submodelModifiable, cpOr12, nor12.getPin("B"), new Point(105, 55));
+ new GUIWire(submodelModifiable, cpOr34, nor34.getPin("A"), new Point(105, 145));
+ new GUIWire(submodelModifiable, cpOr34, nor34.getPin("B"), new Point(105, 155));
+ new GUIWire(submodelModifiable, nor12.getPin("Y"), or1234.getPin("A"));
+ new GUIWire(submodelModifiable, nor34.getPin("Y"), or1234.getPin("B"));
+ new GUIWire(submodelModifiable, or1234.getPin("Y"), Y);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIor4.class.getCanonicalName(), (m, p, n) -> new GUIor4(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIor_4 extends SimpleRectangularSubmodelComponent
+{
+ public GUIor_4(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIor_4(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIor_4", name);
+ setSubmodelScale(.4);
+ setInputPins("A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4");
+ setOutputPins("Y1", "Y2", "Y3", "Y4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin A1 = getSubmodelPin("A1");
+ Pin A2 = getSubmodelPin("A2");
+ Pin A3 = getSubmodelPin("A3");
+ Pin A4 = getSubmodelPin("A4");
+ Pin B1 = getSubmodelPin("B1");
+ Pin B2 = getSubmodelPin("B2");
+ Pin B3 = getSubmodelPin("B3");
+ Pin B4 = getSubmodelPin("B4");
+ Pin Y1 = getSubmodelPin("Y1");
+ Pin Y2 = getSubmodelPin("Y2");
+ Pin Y3 = getSubmodelPin("Y3");
+ Pin Y4 = getSubmodelPin("Y4");
+
+ GUINandGate notA1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notA2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notA3 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notA4 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notB1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notB2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notB3 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notB4 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB4 = new WireCrossPoint(submodelModifiable, 1);
+
+ notA1.moveTo(15, 2.5);
+ notA2.moveTo(15, 27.5);
+ notA3.moveTo(15, 52.5);
+ notA4.moveTo(15, 77.5);
+ notB1.moveTo(15, 102.5);
+ notB2.moveTo(15, 127.5);
+ notB3.moveTo(15, 152.5);
+ notB4.moveTo(15, 177.5);
+ nandY1.moveTo(65, 2.5);
+ nandY2.moveTo(65, 27.5);
+ nandY3.moveTo(65, 52.5);
+ nandY4.moveTo(65, 77.5);
+ cpA1.moveCenterTo(7.5, 12.5);
+ cpA2.moveCenterTo(7.5, 37.5);
+ cpA3.moveCenterTo(7.5, 62.5);
+ cpA4.moveCenterTo(7.5, 87.5);
+ cpB1.moveCenterTo(7.5, 112.5);
+ cpB2.moveCenterTo(7.5, 137.5);
+ cpB3.moveCenterTo(7.5, 162.5);
+ cpB4.moveCenterTo(7.5, 187.5);
+
+ new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
+ new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
+ new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
+ new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
+ new GUIWire(submodelModifiable, B1, cpB1, new Point[0]);
+ new GUIWire(submodelModifiable, B2, cpB2, new Point[0]);
+ new GUIWire(submodelModifiable, B3, cpB3, new Point[0]);
+ new GUIWire(submodelModifiable, B4, cpB4, new Point[0]);
+ new GUIWire(submodelModifiable, cpA1, notA1.getPin("A"), new Point(7.5, 7.5));
+ new GUIWire(submodelModifiable, cpA1, notA1.getPin("B"), new Point(7.5, 17.5));
+ new GUIWire(submodelModifiable, cpA2, notA2.getPin("A"), new Point(7.5, 32.5));
+ new GUIWire(submodelModifiable, cpA2, notA2.getPin("B"), new Point(7.5, 42.5));
+ new GUIWire(submodelModifiable, cpA3, notA3.getPin("A"), new Point(7.5, 57.5));
+ new GUIWire(submodelModifiable, cpA3, notA3.getPin("B"), new Point(7.5, 67.5));
+ new GUIWire(submodelModifiable, cpA4, notA4.getPin("A"), new Point(7.5, 82.5));
+ new GUIWire(submodelModifiable, cpA4, notA4.getPin("B"), new Point(7.5, 92.5));
+ new GUIWire(submodelModifiable, cpB1, notB1.getPin("A"), new Point(7.5, 107.5));
+ new GUIWire(submodelModifiable, cpB1, notB1.getPin("B"), new Point(7.5, 117.5));
+ new GUIWire(submodelModifiable, cpB2, notB2.getPin("A"), new Point(7.5, 132.5));
+ new GUIWire(submodelModifiable, cpB2, notB2.getPin("B"), new Point(7.5, 142.5));
+ new GUIWire(submodelModifiable, cpB3, notB3.getPin("A"), new Point(7.5, 157.5));
+ new GUIWire(submodelModifiable, cpB3, notB3.getPin("B"), new Point(7.5, 167.5));
+ new GUIWire(submodelModifiable, cpB4, notB4.getPin("A"), new Point(7.5, 182.5));
+ new GUIWire(submodelModifiable, cpB4, notB4.getPin("B"), new Point(7.5, 192.5));
+ new GUIWire(submodelModifiable, notA1.getPin("Y"), nandY1.getPin("A"), new Point(40, 12.5), new Point(40, 7.5));
+ new GUIWire(submodelModifiable, notB1.getPin("Y"), nandY1.getPin("B"), new Point(45, 112.5), new Point(45, 17.5));
+ new GUIWire(submodelModifiable, notA2.getPin("Y"), nandY2.getPin("A"), new Point(40, 37.5), new Point(40, 32.5));
+ new GUIWire(submodelModifiable, notB2.getPin("Y"), nandY2.getPin("B"), new Point(50, 137.5), new Point(50, 42.5));
+ new GUIWire(submodelModifiable, notA3.getPin("Y"), nandY3.getPin("A"), new Point(40, 62.5), new Point(40, 57.5));
+ new GUIWire(submodelModifiable, notB3.getPin("Y"), nandY3.getPin("B"), new Point(55, 162.5), new Point(55, 67.5));
+ new GUIWire(submodelModifiable, notA4.getPin("Y"), nandY4.getPin("A"), new Point(40, 87.5), new Point(40, 82.5));
+ new GUIWire(submodelModifiable, notB4.getPin("Y"), nandY4.getPin("B"), new Point(60, 187.5), new Point(60, 92.5));
+ new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
+ new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
+ new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
+ new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIor_4.class.getCanonicalName(), (m, p, n) -> new GUIor_4(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIram2 extends SimpleRectangularSubmodelComponent
+{
+ private GUIdlatch4 cell00;
+ private GUIdlatch4 cell01;
+ private GUIdlatch4 cell10;
+ private GUIdlatch4 cell11;
+
+ public GUIram2(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIram2(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIram2", name);
+ setSubmodelScale(.1);
+ setInputPins("A0", "A1", "B0", "B1", "WE", "D1", "D2", "D3", "D4");
+ setOutputPins("QA1", "QA2", "QA3", "QA4", "QB1", "QB2", "QB3", "QB4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ //@formatter:off
+ Pin A0 = getSubmodelPin("A0");
+ Pin A1 = getSubmodelPin("A1");
+ Pin B0 = getSubmodelPin("B0");
+ Pin B1 = getSubmodelPin("B1");
+ Pin WE = getSubmodelPin("WE");
+ Pin D1 = getSubmodelPin("D1");
+ Pin D2 = getSubmodelPin("D2");
+ Pin D3 = getSubmodelPin("D3");
+ Pin D4 = getSubmodelPin("D4");
+ Pin QA1 = getSubmodelPin("QA1");
+ Pin QA2 = getSubmodelPin("QA2");
+ Pin QA3 = getSubmodelPin("QA3");
+ Pin QA4 = getSubmodelPin("QA4");
+ Pin QB1 = getSubmodelPin("QB1");
+ Pin QB2 = getSubmodelPin("QB2");
+ Pin QB3 = getSubmodelPin("QB3");
+ Pin QB4 = getSubmodelPin("QB4");
+
+ GUIdemux2 demuxA = new GUIdemux2 (submodelModifiable);
+ GUIdemux2 demuxB = new GUIdemux2 (submodelModifiable);
+ GUIand41 weAndB = new GUIand41 (submodelModifiable);
+ cell00 = new GUIdlatch4 (submodelModifiable);
+ cell01 = new GUIdlatch4 (submodelModifiable);
+ cell10 = new GUIdlatch4 (submodelModifiable);
+ cell11 = new GUIdlatch4 (submodelModifiable);
+ GUIand41 andA00 = new GUIand41 (submodelModifiable);
+ GUIandor414 andorA01 = new GUIandor414(submodelModifiable);
+ GUIandor414 andorA10 = new GUIandor414(submodelModifiable);
+ GUIandor414 andorA11 = new GUIandor414(submodelModifiable);
+ GUIand41 andB00 = new GUIand41 (submodelModifiable);
+ GUIandor414 andorB01 = new GUIandor414(submodelModifiable);
+ GUIandor414 andorB10 = new GUIandor414(submodelModifiable);
+ GUIandor414 andorB11 = new GUIandor414(submodelModifiable);
+
+ WireCrossPoint cpB00 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB01 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB10 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB11 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD1in = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD2in = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD3in = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD4in = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD101 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD201 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD301 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD401 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD110 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD210 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD310 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD410 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ100 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ200 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ300 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ400 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ101 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ201 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ301 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ401 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ110 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ210 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ310 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ410 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ111 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ211 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ311 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ411 = new WireCrossPoint(submodelModifiable, 1);
+
+ demuxA .moveTo( 55, 45);
+ demuxB .moveTo( 55, 150);
+ weAndB .moveTo(130, 150);
+ cell00 .moveTo( 55, 325);
+ cell01 .moveTo( 55, 475);
+ cell10 .moveTo( 55, 625);
+ cell11 .moveTo( 55, 775);
+ andA00 .moveTo(235, 375);
+ andorA01.moveTo(235, 485);
+ andorA10.moveTo(235, 635);
+ andorA11.moveTo(235, 785);
+ andB00 .moveTo(135, 325);
+ andorB01.moveTo(135, 435);
+ andorB10.moveTo(135, 585);
+ andorB11.moveTo(135, 735);
+ cpB00 .moveCenterTo(110, 155);
+ cpB01 .moveCenterTo(105, 165);
+ cpB10 .moveCenterTo(100, 175);
+ cpB11 .moveCenterTo( 95, 185);
+ cpD1in.moveCenterTo( 35, 550);
+ cpD2in.moveCenterTo( 40, 650);
+ cpD3in.moveCenterTo( 45, 750);
+ cpD4in.moveCenterTo( 50, 810);
+ cpD101.moveCenterTo( 35, 480);
+ cpD201.moveCenterTo( 40, 490);
+ cpD301.moveCenterTo( 45, 500);
+ cpD401.moveCenterTo( 50, 510);
+ cpD110.moveCenterTo( 35, 630);
+ cpD210.moveCenterTo( 40, 640);
+ cpD310.moveCenterTo( 45, 650);
+ cpD410.moveCenterTo( 50, 660);
+ cpQ100.moveCenterTo(130, 330);
+ cpQ200.moveCenterTo(125, 340);
+ cpQ300.moveCenterTo(120, 350);
+ cpQ400.moveCenterTo(115, 360);
+ cpQ101.moveCenterTo(130, 480);
+ cpQ201.moveCenterTo(125, 490);
+ cpQ301.moveCenterTo(120, 500);
+ cpQ401.moveCenterTo(115, 510);
+ cpQ110.moveCenterTo(130, 630);
+ cpQ210.moveCenterTo(125, 640);
+ cpQ310.moveCenterTo(120, 650);
+ cpQ410.moveCenterTo(115, 660);
+ cpQ111.moveCenterTo(130, 780);
+ cpQ211.moveCenterTo(125, 790);
+ cpQ311.moveCenterTo(120, 800);
+ cpQ411.moveCenterTo(115, 810);
+
+ new GUIWire(submodelModifiable, A0, demuxA.getPin("S0"), new Point[0]);
+ new GUIWire(submodelModifiable, A1, demuxA.getPin("S1"), new Point(10, 150), new Point(10, 60));
+ new GUIWire(submodelModifiable, B0, demuxB.getPin("S0"), new Point( 5, 250), new Point( 5, 155));
+ new GUIWire(submodelModifiable, B1, demuxB.getPin("S1"), new Point(10, 350), new Point(10, 165));
+ new GUIWire(submodelModifiable, demuxB.getPin("Y00"), cpB00, new Point[0]);
+ new GUIWire(submodelModifiable, demuxB.getPin("Y01"), cpB01, new Point[0]);
+ new GUIWire(submodelModifiable, demuxB.getPin("Y10"), cpB10, new Point[0]);
+ new GUIWire(submodelModifiable, demuxB.getPin("Y11"), cpB11, new Point[0]);
+ new GUIWire(submodelModifiable, cpB00, weAndB.getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpB01, weAndB.getPin("A2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpB10, weAndB.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpB11, weAndB.getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, WE, weAndB.getPin("B"), new Point(5, 450), new Point(5, 300), new Point(125, 300), new Point(125, 195));
+ new GUIWire(submodelModifiable, weAndB.getPin("Y1"), cell00.getPin("C"), new Point(185, 155), new Point(185, 250), new Point(30, 250), new Point(30, 370));
+ new GUIWire(submodelModifiable, weAndB.getPin("Y2"), cell01.getPin("C"), new Point(180, 165), new Point(180, 245), new Point(25, 245), new Point(25, 520));
+ new GUIWire(submodelModifiable, weAndB.getPin("Y3"), cell10.getPin("C"), new Point(175, 175), new Point(175, 240), new Point(20, 240), new Point(20, 670));
+ new GUIWire(submodelModifiable, weAndB.getPin("Y4"), cell11.getPin("C"), new Point(170, 185), new Point(170, 235), new Point(15, 235), new Point(15, 820));
+ new GUIWire(submodelModifiable, D1, cpD1in , new Point[0]);
+ new GUIWire(submodelModifiable, D2, cpD2in , new Point[0]);
+ new GUIWire(submodelModifiable, D3, cpD3in , new Point[0]);
+ new GUIWire(submodelModifiable, D4, cpD4in , new Point(50, 850));
+ new GUIWire(submodelModifiable, cpD101, cell00.getPin("D1"), new Point(35, 330));
+ new GUIWire(submodelModifiable, cpD201, cell00.getPin("D2"), new Point(40, 340));
+ new GUIWire(submodelModifiable, cpD301, cell00.getPin("D3"), new Point(45, 350));
+ new GUIWire(submodelModifiable, cpD401, cell00.getPin("D4"), new Point(50, 360));
+ new GUIWire(submodelModifiable, cpD101, cell01.getPin("D1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD201, cell01.getPin("D2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD301, cell01.getPin("D3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD401, cell01.getPin("D4"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD101, cpD1in , new Point[0]);
+ new GUIWire(submodelModifiable, cpD1in, cpD110 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD201, cpD210 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD301, cpD310 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD401, cpD410 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD110, cell10.getPin("D1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD210, cell10.getPin("D2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD310, cell10.getPin("D3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD410, cell10.getPin("D4"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD210, cpD2in , new Point[0]);
+ new GUIWire(submodelModifiable, cpD310, cpD3in , new Point[0]);
+ new GUIWire(submodelModifiable, cpD410, cpD4in , new Point[0]);
+ new GUIWire(submodelModifiable, cpD110, cell11.getPin("D1"), new Point(35, 780));
+ new GUIWire(submodelModifiable, cpD2in, cell11.getPin("D2"), new Point(40, 790));
+ new GUIWire(submodelModifiable, cpD3in, cell11.getPin("D3"), new Point(45, 800));
+ new GUIWire(submodelModifiable, cpD4in, cell11.getPin("D4"), new Point[0]);
+ new GUIWire(submodelModifiable, cell00.getPin("Q1"), cpQ100, new Point[0]);
+ new GUIWire(submodelModifiable, cell00.getPin("Q2"), cpQ200, new Point[0]);
+ new GUIWire(submodelModifiable, cell00.getPin("Q3"), cpQ300, new Point[0]);
+ new GUIWire(submodelModifiable, cell00.getPin("Q4"), cpQ400, new Point[0]);
+ new GUIWire(submodelModifiable, cell01.getPin("Q1"), cpQ101, new Point[0]);
+ new GUIWire(submodelModifiable, cell01.getPin("Q2"), cpQ201, new Point[0]);
+ new GUIWire(submodelModifiable, cell01.getPin("Q3"), cpQ301, new Point[0]);
+ new GUIWire(submodelModifiable, cell01.getPin("Q4"), cpQ401, new Point[0]);
+ new GUIWire(submodelModifiable, cell10.getPin("Q1"), cpQ110, new Point[0]);
+ new GUIWire(submodelModifiable, cell10.getPin("Q2"), cpQ210, new Point[0]);
+ new GUIWire(submodelModifiable, cell10.getPin("Q3"), cpQ310, new Point[0]);
+ new GUIWire(submodelModifiable, cell10.getPin("Q4"), cpQ410, new Point[0]);
+ new GUIWire(submodelModifiable, cell11.getPin("Q1"), cpQ111, new Point[0]);
+ new GUIWire(submodelModifiable, cell11.getPin("Q2"), cpQ211, new Point[0]);
+ new GUIWire(submodelModifiable, cell11.getPin("Q3"), cpQ311, new Point[0]);
+ new GUIWire(submodelModifiable, cell11.getPin("Q4"), cpQ411, new Point[0]);
+ new GUIWire(submodelModifiable, demuxA.getPin("Y00"), andA00 .getPin("B"), new Point(210, 50), new Point(210, 420));
+ new GUIWire(submodelModifiable, demuxA.getPin("Y01"), andorA01.getPin("B"), new Point(205, 60), new Point(205, 570));
+ new GUIWire(submodelModifiable, demuxA.getPin("Y10"), andorA10.getPin("B"), new Point(200, 70), new Point(200, 720));
+ new GUIWire(submodelModifiable, demuxA.getPin("Y11"), andorA11.getPin("B"), new Point(195, 80), new Point(195, 870));
+ new GUIWire(submodelModifiable, cpB00 , andB00 .getPin("B"), new Point(110, 370));
+ new GUIWire(submodelModifiable, cpB01 , andorB01.getPin("B"), new Point(105, 520));
+ new GUIWire(submodelModifiable, cpB10 , andorB10.getPin("B"), new Point(100, 670));
+ new GUIWire(submodelModifiable, cpB11 , andorB11.getPin("B"), new Point(95, 820));
+ new GUIWire(submodelModifiable, cpQ100, andA00 .getPin("A1"), new Point(130, 380));
+ new GUIWire(submodelModifiable, cpQ200, andA00 .getPin("A2"), new Point(125, 390));
+ new GUIWire(submodelModifiable, cpQ300, andA00 .getPin("A3"), new Point(120, 400));
+ new GUIWire(submodelModifiable, cpQ400, andA00 .getPin("A4"), new Point(115, 410));
+ new GUIWire(submodelModifiable, cpQ101, andorA01.getPin("A1"), new Point(130, 530));
+ new GUIWire(submodelModifiable, cpQ201, andorA01.getPin("A2"), new Point(125, 540));
+ new GUIWire(submodelModifiable, cpQ301, andorA01.getPin("A3"), new Point(120, 550));
+ new GUIWire(submodelModifiable, cpQ401, andorA01.getPin("A4"), new Point(115, 560));
+ new GUIWire(submodelModifiable, cpQ110, andorA10.getPin("A1"), new Point(130, 680));
+ new GUIWire(submodelModifiable, cpQ210, andorA10.getPin("A2"), new Point(125, 690));
+ new GUIWire(submodelModifiable, cpQ310, andorA10.getPin("A3"), new Point(120, 700));
+ new GUIWire(submodelModifiable, cpQ410, andorA10.getPin("A4"), new Point(115, 710));
+ new GUIWire(submodelModifiable, cpQ111, andorA11.getPin("A1"), new Point(130, 830));
+ new GUIWire(submodelModifiable, cpQ211, andorA11.getPin("A2"), new Point(125, 840));
+ new GUIWire(submodelModifiable, cpQ311, andorA11.getPin("A3"), new Point(120, 850));
+ new GUIWire(submodelModifiable, cpQ411, andorA11.getPin("A4"), new Point(115, 860));
+ new GUIWire(submodelModifiable, cpQ100, andB00 .getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ200, andB00 .getPin("A2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ300, andB00 .getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ400, andB00 .getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ101, andorB01.getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ201, andorB01.getPin("A2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ301, andorB01.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ401, andorB01.getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ110, andorB10.getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ210, andorB10.getPin("A2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ310, andorB10.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ410, andorB10.getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ111, andorB11.getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ211, andorB11.getPin("A2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ311, andorB11.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ411, andorB11.getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, andA00 .getPin("Y1"), andorA01.getPin("C1"), new Point(290, 380), new Point(290, 445), new Point(230, 445), new Point(230, 490));
+ new GUIWire(submodelModifiable, andA00 .getPin("Y2"), andorA01.getPin("C2"), new Point(285, 390), new Point(285, 440), new Point(225, 440), new Point(225, 500));
+ new GUIWire(submodelModifiable, andA00 .getPin("Y3"), andorA01.getPin("C3"), new Point(280, 400), new Point(280, 435), new Point(220, 435), new Point(220, 510));
+ new GUIWire(submodelModifiable, andA00 .getPin("Y4"), andorA01.getPin("C4"), new Point(275, 410), new Point(275, 430), new Point(215, 430), new Point(215, 520));
+ new GUIWire(submodelModifiable, andorA01.getPin("Y1"), andorA10.getPin("C1"), new Point(290, 490), new Point(290, 595), new Point(230, 595), new Point(230, 640));
+ new GUIWire(submodelModifiable, andorA01.getPin("Y2"), andorA10.getPin("C2"), new Point(285, 500), new Point(285, 590), new Point(225, 590), new Point(225, 650));
+ new GUIWire(submodelModifiable, andorA01.getPin("Y3"), andorA10.getPin("C3"), new Point(280, 510), new Point(280, 585), new Point(220, 585), new Point(220, 660));
+ new GUIWire(submodelModifiable, andorA01.getPin("Y4"), andorA10.getPin("C4"), new Point(275, 520), new Point(275, 580), new Point(215, 580), new Point(215, 670));
+ new GUIWire(submodelModifiable, andorA10.getPin("Y1"), andorA11.getPin("C1"), new Point(290, 640), new Point(290, 745), new Point(230, 745), new Point(230, 790));
+ new GUIWire(submodelModifiable, andorA10.getPin("Y2"), andorA11.getPin("C2"), new Point(285, 650), new Point(285, 740), new Point(225, 740), new Point(225, 800));
+ new GUIWire(submodelModifiable, andorA10.getPin("Y3"), andorA11.getPin("C3"), new Point(280, 660), new Point(280, 735), new Point(220, 735), new Point(220, 810));
+ new GUIWire(submodelModifiable, andorA10.getPin("Y4"), andorA11.getPin("C4"), new Point(275, 670), new Point(275, 730), new Point(215, 730), new Point(215, 820));
+ new GUIWire(submodelModifiable, andorA11.getPin("Y1"), QA1 , new Point(300, 790), new Point(300, 50));
+ new GUIWire(submodelModifiable, andorA11.getPin("Y2"), QA2 , new Point(305, 800), new Point(305, 150));
+ new GUIWire(submodelModifiable, andorA11.getPin("Y3"), QA3 , new Point(310, 810), new Point(310, 250));
+ new GUIWire(submodelModifiable, andorA11.getPin("Y4"), QA4 , new Point(315, 820), new Point(315, 350));
+ new GUIWire(submodelModifiable, andB00 .getPin("Y1"), andorB01.getPin("C1"), new Point(190, 330), new Point(190, 430), new Point(130, 430), new Point(130, 440));
+ new GUIWire(submodelModifiable, andB00 .getPin("Y2"), andorB01.getPin("C2"), new Point(185, 340), new Point(185, 425), new Point(125, 425), new Point(125, 450));
+ new GUIWire(submodelModifiable, andB00 .getPin("Y3"), andorB01.getPin("C3"), new Point(180, 350), new Point(180, 420), new Point(120, 420), new Point(120, 460));
+ new GUIWire(submodelModifiable, andB00 .getPin("Y4"), andorB01.getPin("C4"), new Point(175, 360), new Point(175, 415), new Point(115, 415), new Point(115, 470));
+ new GUIWire(submodelModifiable, andorB01.getPin("Y1"), andorB10.getPin("C1"), new Point(190, 440), new Point(190, 580), new Point(130, 580), new Point(130, 590));
+ new GUIWire(submodelModifiable, andorB01.getPin("Y2"), andorB10.getPin("C2"), new Point(185, 450), new Point(185, 575), new Point(125, 575), new Point(125, 600));
+ new GUIWire(submodelModifiable, andorB01.getPin("Y3"), andorB10.getPin("C3"), new Point(180, 460), new Point(180, 570), new Point(120, 570), new Point(120, 610));
+ new GUIWire(submodelModifiable, andorB01.getPin("Y4"), andorB10.getPin("C4"), new Point(175, 470), new Point(175, 565), new Point(115, 565), new Point(115, 620));
+ new GUIWire(submodelModifiable, andorB10.getPin("Y1"), andorB11.getPin("C1"), new Point(190, 590), new Point(190, 730), new Point(130, 730), new Point(130, 740));
+ new GUIWire(submodelModifiable, andorB10.getPin("Y2"), andorB11.getPin("C2"), new Point(185, 600), new Point(185, 725), new Point(125, 725), new Point(125, 750));
+ new GUIWire(submodelModifiable, andorB10.getPin("Y3"), andorB11.getPin("C3"), new Point(180, 610), new Point(180, 720), new Point(120, 720), new Point(120, 760));
+ new GUIWire(submodelModifiable, andorB10.getPin("Y4"), andorB11.getPin("C4"), new Point(175, 620), new Point(175, 715), new Point(115, 715), new Point(115, 770));
+ new GUIWire(submodelModifiable, andorB11.getPin("Y1"), QB1 , new Point(190, 740), new Point(190, 880), new Point(325, 880), new Point(325, 450));
+ new GUIWire(submodelModifiable, andorB11.getPin("Y2"), QB2 , new Point(185, 750), new Point(185, 885), new Point(330, 885), new Point(330, 550));
+ new GUIWire(submodelModifiable, andorB11.getPin("Y3"), QB3 , new Point(180, 760), new Point(180, 890), new Point(335, 890), new Point(335, 650));
+ new GUIWire(submodelModifiable, andorB11.getPin("Y4"), QB4 , new Point(175, 770), new Point(175, 895), new Point(340, 895), new Point(340, 750));
+ //@formatter:on
+
+ addHighLevelStateSubcomponentID("c00", cell00);
+ addHighLevelStateSubcomponentID("c01", cell01);
+ addHighLevelStateSubcomponentID("c10", cell10);
+ addHighLevelStateSubcomponentID("c11", cell11);
+ addAtomicHighLevelStateID("q");
+ }
+
+ @Override
+ public void setAtomicHighLevelState(String stateID, Object newState)
+ {
+ switch (stateID)
+ {
+ case "q":
+ BitVector newStateCasted = (BitVector) newState;
+ setHighLevelState("c00.q", newStateCasted.subVector(0, 4));
+ setHighLevelState("c01.q", newStateCasted.subVector(4, 8));
+ setHighLevelState("c10.q", newStateCasted.subVector(8, 12));
+ setHighLevelState("c11.q", newStateCasted.subVector(12, 16));
+ break;
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ @Override
+ public Object getAtomicHighLevelState(String stateID)
+ {
+ switch (stateID)
+ {
+ case "q":
+ BitVector q00 = (BitVector) getHighLevelState("c00.q");
+ BitVector q01 = (BitVector) getHighLevelState("c01.q");
+ BitVector q10 = (BitVector) getHighLevelState("c10.q");
+ BitVector q11 = (BitVector) getHighLevelState("c11.q");
+ return q00.concat(q01).concat(q10).concat(q11);
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIram2.class.getCanonicalName(), (m, p, n) -> new GUIram2(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIram4 extends SimpleRectangularSubmodelComponent
+{
+ public GUIram4(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIram4(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIram4", name);
+ setSubmodelScale(.1);
+ setInputPins("A0", "A1", "A2", "A3", "B0", "B1", "B2", "B3", "WE", "D1", "D2", "D3", "D4");
+ setOutputPins("QA1", "QA2", "QA3", "QA4", "QB1", "QB2", "QB3", "QB4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ //@formatter:off
+ Pin A0 = getSubmodelPin("A0");
+ Pin A1 = getSubmodelPin("A1");
+ Pin A2 = getSubmodelPin("A2");
+ Pin A3 = getSubmodelPin("A3");
+ Pin B0 = getSubmodelPin("B0");
+ Pin B1 = getSubmodelPin("B1");
+ Pin B2 = getSubmodelPin("B2");
+ Pin B3 = getSubmodelPin("B3");
+ Pin WE = getSubmodelPin("WE");
+ Pin D1 = getSubmodelPin("D1");
+ Pin D2 = getSubmodelPin("D2");
+ Pin D3 = getSubmodelPin("D3");
+ Pin D4 = getSubmodelPin("D4");
+ Pin QA1 =getSubmodelPin("QA1");
+ Pin QA2 =getSubmodelPin("QA2");
+ Pin QA3 =getSubmodelPin("QA3");
+ Pin QA4 =getSubmodelPin("QA4");
+ Pin QB1 =getSubmodelPin("QB1");
+ Pin QB2 =getSubmodelPin("QB2");
+ Pin QB3 =getSubmodelPin("QB3");
+ Pin QB4 =getSubmodelPin("QB4");
+
+ GUIdemux2 demuxA = new GUIdemux2 (submodelModifiable);
+ GUIdemux2 demuxB = new GUIdemux2 (submodelModifiable);
+ GUIand41 weAndB = new GUIand41 (submodelModifiable);
+ GUIram2 cell00 = new GUIram2 (submodelModifiable);
+ GUIram2 cell01 = new GUIram2 (submodelModifiable);
+ GUIram2 cell10 = new GUIram2 (submodelModifiable);
+ GUIram2 cell11 = new GUIram2 (submodelModifiable);
+ GUIand41 andB00 = new GUIand41 (submodelModifiable);
+ GUIandor414 andorB01 = new GUIandor414(submodelModifiable);
+ GUIandor414 andorB10 = new GUIandor414(submodelModifiable);
+ GUIandor414 andorB11 = new GUIandor414(submodelModifiable);
+ GUIand41 andA00 = new GUIand41 (submodelModifiable);
+ GUIandor414 andorA01 = new GUIandor414(submodelModifiable);
+ GUIandor414 andorA10 = new GUIandor414(submodelModifiable);
+ GUIandor414 andorA11 = new GUIandor414(submodelModifiable);
+
+ WireCrossPoint cpB00 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB01 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB10 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB11 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_101 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_201 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_301 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_401 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_110 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_210 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_310 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_410 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_111 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_211 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_311 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpD_411 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB101 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB201 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB301 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB401 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB110 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB210 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB310 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB410 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB1in = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB2in = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB3in = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB4in = new WireCrossPoint(submodelModifiable, 1);
+
+ demuxA .moveTo( 55, 45);
+ demuxB .moveTo( 55, 150);
+ weAndB .moveTo(235, 150);
+ cell00 .moveTo( 80, 330);
+ cell01 .moveTo( 80, 480);
+ cell10 .moveTo( 80, 630);
+ cell11 .moveTo( 80, 780);
+ andB00 .moveTo(250, 375);
+ andorB01.moveTo(250, 485);
+ andorB10.moveTo(250, 635);
+ andorB11.moveTo(250, 785);
+ andA00 .moveTo(155, 325);
+ andorA01.moveTo(155, 435);
+ andorA10.moveTo(155, 585);
+ andorA11.moveTo(155, 735);
+ cpB00 .moveCenterTo(230, 155);
+ cpB01 .moveCenterTo(225, 165);
+ cpB10 .moveCenterTo(220, 175);
+ cpB11 .moveCenterTo(215, 185);
+ cpD_101.moveCenterTo( 60, 535);
+ cpD_201.moveCenterTo( 65, 545);
+ cpD_301.moveCenterTo( 70, 555);
+ cpD_401.moveCenterTo( 75, 565);
+ cpD_110.moveCenterTo( 60, 685);
+ cpD_210.moveCenterTo( 65, 695);
+ cpD_310.moveCenterTo( 70, 705);
+ cpD_410.moveCenterTo( 75, 715);
+ cpD_111.moveCenterTo( 60, 835);
+ cpD_211.moveCenterTo( 65, 845);
+ cpD_311.moveCenterTo( 70, 855);
+ cpD_411.moveCenterTo( 75, 865);
+ cpAB101.moveCenterTo( 40, 485);
+ cpAB201.moveCenterTo( 45, 495);
+ cpAB301.moveCenterTo( 50, 505);
+ cpAB401.moveCenterTo( 55, 515);
+ cpAB110.moveCenterTo( 40, 635);
+ cpAB210.moveCenterTo( 45, 645);
+ cpAB310.moveCenterTo( 50, 655);
+ cpAB410.moveCenterTo( 55, 665);
+ cpAB1in.moveCenterTo( 40, 335);
+ cpAB2in.moveCenterTo( 45, 350);
+ cpAB3in.moveCenterTo( 50, 650);
+ cpAB4in.moveCenterTo( 55, 750);
+
+ new GUIWire(submodelModifiable, A0, demuxA.getPin("S0"), new Point[0]);
+ new GUIWire(submodelModifiable, A1, demuxA.getPin("S1"), new Point(10, 150), new Point(10, 60));
+ new GUIWire(submodelModifiable, B0, demuxB.getPin("S0"), new Point( 5, 450), new Point( 5, 155));
+ new GUIWire(submodelModifiable, B1, demuxB.getPin("S1"), new Point(10, 550), new Point(10, 165));
+ new GUIWire(submodelModifiable, demuxB.getPin("Y00"), cpB00, new Point[0]);
+ new GUIWire(submodelModifiable, demuxB.getPin("Y01"), cpB01, new Point[0]);
+ new GUIWire(submodelModifiable, demuxB.getPin("Y10"), cpB10, new Point[0]);
+ new GUIWire(submodelModifiable, demuxB.getPin("Y11"), cpB11, new Point[0]);
+ new GUIWire(submodelModifiable, cpB00, weAndB.getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpB01, weAndB.getPin("A2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpB10, weAndB.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpB11, weAndB.getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, WE, weAndB.getPin("B"), new Point(15, 850), new Point(15, 195));
+ new GUIWire(submodelModifiable, weAndB.getPin("Y1"), cell00.getPin("WE"), new Point(290, 155), new Point(290, 230), new Point(35, 230), new Point(35, 375));
+ new GUIWire(submodelModifiable, weAndB.getPin("Y2"), cell01.getPin("WE"), new Point(285, 165), new Point(285, 225), new Point(30, 225), new Point(30, 525));
+ new GUIWire(submodelModifiable, weAndB.getPin("Y3"), cell10.getPin("WE"), new Point(280, 175), new Point(280, 220), new Point(25, 220), new Point(25, 675));
+ new GUIWire(submodelModifiable, weAndB.getPin("Y4"), cell11.getPin("WE"), new Point(275, 185), new Point(275, 215), new Point(20, 215), new Point(20, 825));
+ new GUIWire(submodelModifiable, cpAB101, cpAB1in , new Point[0]);
+ new GUIWire(submodelModifiable, cpAB1in, cell00.getPin("A0"), new Point[0]);
+ new GUIWire(submodelModifiable, cpAB201, cpAB2in , new Point[0]);
+ new GUIWire(submodelModifiable, cpAB2in, cell00.getPin("A1"), new Point(45, 345));
+ new GUIWire(submodelModifiable, cpAB301, cell00.getPin("B0"), new Point(50, 355));
+ new GUIWire(submodelModifiable, cpAB401, cell00.getPin("B1"), new Point(55, 365));
+ new GUIWire(submodelModifiable, cpAB101, cell01.getPin("A0"), new Point[0]);
+ new GUIWire(submodelModifiable, cpAB201, cell01.getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpAB301, cell01.getPin("B0"), new Point[0]);
+ new GUIWire(submodelModifiable, cpAB401, cell01.getPin("B1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpAB101, cpAB110 , new Point[0]);
+ new GUIWire(submodelModifiable, cpAB201, cpAB210 , new Point[0]);
+ new GUIWire(submodelModifiable, cpAB301, cpAB3in , new Point[0]);
+ new GUIWire(submodelModifiable, B2 , cpAB3in , new Point[0]);
+ new GUIWire(submodelModifiable, cpAB3in, cpAB310 , new Point[0]);
+ new GUIWire(submodelModifiable, cpAB401, cpAB410 , new Point[0]);
+ new GUIWire(submodelModifiable, cpAB110, cell10.getPin("A0"), new Point[0]);
+ new GUIWire(submodelModifiable, cpAB210, cell10.getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpAB310, cell10.getPin("B0"), new Point[0]);
+ new GUIWire(submodelModifiable, cpAB410, cell10.getPin("B1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpAB110, cell11.getPin("A0"), new Point(40, 785));
+ new GUIWire(submodelModifiable, cpAB210, cell11.getPin("A1"), new Point(45, 795));
+ new GUIWire(submodelModifiable, cpAB310, cell11.getPin("B0"), new Point(50, 805));
+ new GUIWire(submodelModifiable, cpAB410, cpAB4in , new Point[0]);
+ new GUIWire(submodelModifiable, cpAB4in, cell11.getPin("B1"), new Point(55, 815));
+ new GUIWire(submodelModifiable, A2, cpAB1in , new Point(40, 250));
+ new GUIWire(submodelModifiable, A3, cpAB2in , new Point[0]);
+ new GUIWire(submodelModifiable, B3, cpAB4in , new Point[0]);
+ new GUIWire(submodelModifiable, cpD_101, cell00.getPin("D1"), new Point(60, 385));
+ new GUIWire(submodelModifiable, cpD_201, cell00.getPin("D2"), new Point(65, 395));
+ new GUIWire(submodelModifiable, cpD_301, cell00.getPin("D3"), new Point(70, 405));
+ new GUIWire(submodelModifiable, cpD_401, cell00.getPin("D4"), new Point(75, 415));
+ new GUIWire(submodelModifiable, cpD_101, cell01.getPin("D1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_201, cell01.getPin("D2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_301, cell01.getPin("D3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_401, cell01.getPin("D4"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_101, cpD_110 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD_201, cpD_210 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD_301, cpD_310 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD_401, cpD_410 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD_110, cell10.getPin("D1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_210, cell10.getPin("D2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_310, cell10.getPin("D3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_410, cell10.getPin("D4"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_110, cpD_111 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD_210, cpD_211 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD_310, cpD_311 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD_410, cpD_411 , new Point[0]);
+ new GUIWire(submodelModifiable, cpD_111, cell11.getPin("D1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_211, cell11.getPin("D2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_311, cell11.getPin("D3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpD_411, cell11.getPin("D4"), new Point[0]);
+ new GUIWire(submodelModifiable, D1, cpD_111 , new Point(60, 950));
+ new GUIWire(submodelModifiable, D2, cpD_211 , new Point(65, 1050));
+ new GUIWire(submodelModifiable, D3, cpD_311 , new Point(70, 1150));
+ new GUIWire(submodelModifiable, D4, cpD_411 , new Point(75, 1250));
+ new GUIWire(submodelModifiable, demuxA.getPin("Y00"), andA00 .getPin("B"), new Point(135, 50), new Point(135, 370));
+ new GUIWire(submodelModifiable, demuxA.getPin("Y01"), andorA01.getPin("B"), new Point(130, 60), new Point(130, 520));
+ new GUIWire(submodelModifiable, demuxA.getPin("Y10"), andorA10.getPin("B"), new Point(125, 70), new Point(125, 670));
+ new GUIWire(submodelModifiable, demuxA.getPin("Y11"), andorA11.getPin("B"), new Point(120, 80), new Point(120, 820));
+ new GUIWire(submodelModifiable, cpB00, andB00 .getPin("B"), new Point(230, 420));
+ new GUIWire(submodelModifiable, cpB01, andorB01.getPin("B"), new Point(225, 570));
+ new GUIWire(submodelModifiable, cpB10, andorB10.getPin("B"), new Point(220, 720));
+ new GUIWire(submodelModifiable, cpB11, andorB11.getPin("B"), new Point(215, 870));
+ new GUIWire(submodelModifiable, cell00.getPin("QB1"), andB00 .getPin("A1"), new Point(140, 375), new Point(140, 380));
+ new GUIWire(submodelModifiable, cell00.getPin("QB2"), andB00 .getPin("A2"), new Point(140, 385), new Point(140, 390));
+ new GUIWire(submodelModifiable, cell00.getPin("QB3"), andB00 .getPin("A3"), new Point(140, 395), new Point(140, 400));
+ new GUIWire(submodelModifiable, cell00.getPin("QB4"), andB00 .getPin("A4"), new Point(140, 405), new Point(140, 410));
+ new GUIWire(submodelModifiable, cell01.getPin("QB1"), andorB01.getPin("A1"), new Point(140, 525), new Point(140, 530));
+ new GUIWire(submodelModifiable, cell01.getPin("QB2"), andorB01.getPin("A2"), new Point(140, 535), new Point(140, 540));
+ new GUIWire(submodelModifiable, cell01.getPin("QB3"), andorB01.getPin("A3"), new Point(140, 545), new Point(140, 550));
+ new GUIWire(submodelModifiable, cell01.getPin("QB4"), andorB01.getPin("A4"), new Point(140, 555), new Point(140, 560));
+ new GUIWire(submodelModifiable, cell10.getPin("QB1"), andorB10.getPin("A1"), new Point(140, 675), new Point(140, 680));
+ new GUIWire(submodelModifiable, cell10.getPin("QB2"), andorB10.getPin("A2"), new Point(140, 685), new Point(140, 690));
+ new GUIWire(submodelModifiable, cell10.getPin("QB3"), andorB10.getPin("A3"), new Point(140, 695), new Point(140, 700));
+ new GUIWire(submodelModifiable, cell10.getPin("QB4"), andorB10.getPin("A4"), new Point(140, 705), new Point(140, 710));
+ new GUIWire(submodelModifiable, cell11.getPin("QB1"), andorB11.getPin("A1"), new Point(140, 825), new Point(140, 830));
+ new GUIWire(submodelModifiable, cell11.getPin("QB2"), andorB11.getPin("A2"), new Point(140, 835), new Point(140, 840));
+ new GUIWire(submodelModifiable, cell11.getPin("QB3"), andorB11.getPin("A3"), new Point(140, 845), new Point(140, 850));
+ new GUIWire(submodelModifiable, cell11.getPin("QB4"), andorB11.getPin("A4"), new Point(140, 855), new Point(140, 860));
+ new GUIWire(submodelModifiable, cell00.getPin("QA1"), andA00 .getPin("A1"), new Point(140, 335), new Point(140, 330));
+ new GUIWire(submodelModifiable, cell00.getPin("QA2"), andA00 .getPin("A2"), new Point(140, 345), new Point(140, 340));
+ new GUIWire(submodelModifiable, cell00.getPin("QA3"), andA00 .getPin("A3"), new Point(140, 355), new Point(140, 350));
+ new GUIWire(submodelModifiable, cell00.getPin("QA4"), andA00 .getPin("A4"), new Point(140, 365), new Point(140, 360));
+ new GUIWire(submodelModifiable, cell01.getPin("QA1"), andorA01.getPin("A1"), new Point(140, 485), new Point(140, 480));
+ new GUIWire(submodelModifiable, cell01.getPin("QA2"), andorA01.getPin("A2"), new Point(140, 495), new Point(140, 490));
+ new GUIWire(submodelModifiable, cell01.getPin("QA3"), andorA01.getPin("A3"), new Point(140, 505), new Point(140, 500));
+ new GUIWire(submodelModifiable, cell01.getPin("QA4"), andorA01.getPin("A4"), new Point(140, 515), new Point(140, 510));
+ new GUIWire(submodelModifiable, cell10.getPin("QA1"), andorA10.getPin("A1"), new Point(140, 635), new Point(140, 630));
+ new GUIWire(submodelModifiable, cell10.getPin("QA2"), andorA10.getPin("A2"), new Point(140, 645), new Point(140, 640));
+ new GUIWire(submodelModifiable, cell10.getPin("QA3"), andorA10.getPin("A3"), new Point(140, 655), new Point(140, 650));
+ new GUIWire(submodelModifiable, cell10.getPin("QA4"), andorA10.getPin("A4"), new Point(140, 665), new Point(140, 660));
+ new GUIWire(submodelModifiable, cell11.getPin("QA1"), andorA11.getPin("A1"), new Point(140, 785), new Point(140, 780));
+ new GUIWire(submodelModifiable, cell11.getPin("QA2"), andorA11.getPin("A2"), new Point(140, 795), new Point(140, 790));
+ new GUIWire(submodelModifiable, cell11.getPin("QA3"), andorA11.getPin("A3"), new Point(140, 805), new Point(140, 800));
+ new GUIWire(submodelModifiable, cell11.getPin("QA4"), andorA11.getPin("A4"), new Point(140, 815), new Point(140, 810));
+ new GUIWire(submodelModifiable, andB00 .getPin("Y1"), andorB01.getPin("C1"), new Point(305, 380), new Point(305, 445), new Point(245, 445), new Point(245, 490));
+ new GUIWire(submodelModifiable, andB00 .getPin("Y2"), andorB01.getPin("C2"), new Point(300, 390), new Point(300, 440), new Point(240, 440), new Point(240, 500));
+ new GUIWire(submodelModifiable, andB00 .getPin("Y3"), andorB01.getPin("C3"), new Point(295, 400), new Point(295, 435), new Point(235, 435), new Point(235, 510));
+ new GUIWire(submodelModifiable, andB00 .getPin("Y4"), andorB01.getPin("C4"), new Point(290, 410), new Point(290, 430), new Point(230, 430), new Point(230, 520));
+ new GUIWire(submodelModifiable, andorB01.getPin("Y1"), andorB10.getPin("C1"), new Point(305, 490), new Point(305, 595), new Point(245, 595), new Point(245, 640));
+ new GUIWire(submodelModifiable, andorB01.getPin("Y2"), andorB10.getPin("C2"), new Point(300, 500), new Point(300, 590), new Point(240, 590), new Point(240, 650));
+ new GUIWire(submodelModifiable, andorB01.getPin("Y3"), andorB10.getPin("C3"), new Point(295, 510), new Point(295, 585), new Point(235, 585), new Point(235, 660));
+ new GUIWire(submodelModifiable, andorB01.getPin("Y4"), andorB10.getPin("C4"), new Point(290, 520), new Point(290, 580), new Point(230, 580), new Point(230, 670));
+ new GUIWire(submodelModifiable, andorB10.getPin("Y1"), andorB11.getPin("C1"), new Point(305, 640), new Point(305, 745), new Point(245, 745), new Point(245, 790));
+ new GUIWire(submodelModifiable, andorB10.getPin("Y2"), andorB11.getPin("C2"), new Point(300, 650), new Point(300, 740), new Point(240, 740), new Point(240, 800));
+ new GUIWire(submodelModifiable, andorB10.getPin("Y3"), andorB11.getPin("C3"), new Point(295, 660), new Point(295, 735), new Point(235, 735), new Point(235, 810));
+ new GUIWire(submodelModifiable, andorB10.getPin("Y4"), andorB11.getPin("C4"), new Point(290, 670), new Point(290, 730), new Point(230, 730), new Point(230, 820));
+ new GUIWire(submodelModifiable, andorB11.getPin("Y1"), QB1 , new Point(330, 790), new Point(330, 450));
+ new GUIWire(submodelModifiable, andorB11.getPin("Y2"), QB2 , new Point(335, 800), new Point(335, 550));
+ new GUIWire(submodelModifiable, andorB11.getPin("Y3"), QB3 , new Point(340, 810), new Point(340, 650));
+ new GUIWire(submodelModifiable, andorB11.getPin("Y4"), QB4 , new Point(345, 820), new Point(345, 750));
+ new GUIWire(submodelModifiable, andA00 .getPin("Y1"), andorA01.getPin("C1"), new Point(210, 330), new Point(210, 430), new Point(150, 430), new Point(150, 440));
+ new GUIWire(submodelModifiable, andA00 .getPin("Y2"), andorA01.getPin("C2"), new Point(205, 340), new Point(205, 425), new Point(145, 425), new Point(145, 450));
+ new GUIWire(submodelModifiable, andA00 .getPin("Y3"), andorA01.getPin("C3"), new Point(200, 350), new Point(200, 420), new Point(140, 420), new Point(140, 460));
+ new GUIWire(submodelModifiable, andA00 .getPin("Y4"), andorA01.getPin("C4"), new Point(195, 360), new Point(195, 415), new Point(135, 415), new Point(135, 470));
+ new GUIWire(submodelModifiable, andorA01.getPin("Y1"), andorA10.getPin("C1"), new Point(210, 440), new Point(210, 580), new Point(150, 580), new Point(150, 590));
+ new GUIWire(submodelModifiable, andorA01.getPin("Y2"), andorA10.getPin("C2"), new Point(205, 450), new Point(205, 575), new Point(145, 575), new Point(145, 600));
+ new GUIWire(submodelModifiable, andorA01.getPin("Y3"), andorA10.getPin("C3"), new Point(200, 460), new Point(200, 570), new Point(140, 570), new Point(140, 610));
+ new GUIWire(submodelModifiable, andorA01.getPin("Y4"), andorA10.getPin("C4"), new Point(195, 470), new Point(195, 565), new Point(135, 565), new Point(135, 620));
+ new GUIWire(submodelModifiable, andorA10.getPin("Y1"), andorA11.getPin("C1"), new Point(210, 590), new Point(210, 730), new Point(150, 730), new Point(150, 740));
+ new GUIWire(submodelModifiable, andorA10.getPin("Y2"), andorA11.getPin("C2"), new Point(205, 600), new Point(205, 725), new Point(145, 725), new Point(145, 750));
+ new GUIWire(submodelModifiable, andorA10.getPin("Y3"), andorA11.getPin("C3"), new Point(200, 610), new Point(200, 720), new Point(140, 720), new Point(140, 760));
+ new GUIWire(submodelModifiable, andorA10.getPin("Y4"), andorA11.getPin("C4"), new Point(195, 620), new Point(195, 715), new Point(135, 715), new Point(135, 770));
+ new GUIWire(submodelModifiable, andorA11.getPin("Y1"), QA1 , new Point(210, 740), new Point(210, 880), new Point(310, 880), new Point(310, 50));
+ new GUIWire(submodelModifiable, andorA11.getPin("Y2"), QA2 , new Point(205, 750), new Point(205, 885), new Point(315, 885), new Point(315, 150));
+ new GUIWire(submodelModifiable, andorA11.getPin("Y3"), QA3 , new Point(200, 760), new Point(200, 890), new Point(320, 890), new Point(320, 250));
+ new GUIWire(submodelModifiable, andorA11.getPin("Y4"), QA4 , new Point(195, 770), new Point(195, 895), new Point(325, 895), new Point(325, 350));
+ //@formatter:on
+
+ addHighLevelStateSubcomponentID("c00", cell00);
+ addHighLevelStateSubcomponentID("c01", cell01);
+ addHighLevelStateSubcomponentID("c10", cell10);
+ addHighLevelStateSubcomponentID("c11", cell11);
+ addAtomicHighLevelStateID("q");
+ }
+
+ @Override
+ public void setAtomicHighLevelState(String stateID, Object newState)
+ {
+ switch (stateID)
+ {
+ case "q":
+ BitVector newStateCasted = (BitVector) newState;
+ setHighLevelState("c00.q", newStateCasted.subVector(0, 16));
+ setHighLevelState("c01.q", newStateCasted.subVector(16, 32));
+ setHighLevelState("c10.q", newStateCasted.subVector(32, 48));
+ setHighLevelState("c11.q", newStateCasted.subVector(48, 64));
+ break;
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ @Override
+ protected void setSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID, Object newState)
+ {
+ if (checkSubcomponentID(subcomponentID))
+ setHighLevelState(translateDirectCellAccess(subcomponentID, subcomponentHighLevelStateID), newState);
+ else
+ super.setSubcomponentHighLevelState(subcomponentID, subcomponentHighLevelStateID, newState);
+
+ }
+
+ @Override
+ public Object getAtomicHighLevelState(String stateID)
+ {
+ switch (stateID)
+ {
+ case "q":
+ BitVector q00 = (BitVector) getHighLevelState("c00.q");
+ BitVector q01 = (BitVector) getHighLevelState("c01.q");
+ BitVector q10 = (BitVector) getHighLevelState("c10.q");
+ BitVector q11 = (BitVector) getHighLevelState("c11.q");
+ return q00.concat(q01).concat(q10).concat(q11);
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ @Override
+ protected Object getSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID)
+ {
+ if (checkSubcomponentID(subcomponentID))
+ return getHighLevelState(translateDirectCellAccess(subcomponentID, subcomponentHighLevelStateID));
+ return super.getSubcomponentHighLevelState(subcomponentID, subcomponentHighLevelStateID);
+ }
+
+ private static String translateDirectCellAccess(String subcomponentID, String subcomponentHighLevelStateID)
+ {
+ return 'c' + subcomponentID.substring(3, 5) + "." + subcomponentID.substring(0, 3) + '.' + subcomponentHighLevelStateID;
+ }
+
+ private static boolean checkSubcomponentID(String subcomponentID)
+ {
+ if (subcomponentID.length() != 5 || subcomponentID.charAt(0) != 'c')
+ return false;
+ char addr3 = subcomponentID.charAt(1);
+ char addr2 = subcomponentID.charAt(2);
+ char addr1 = subcomponentID.charAt(3);
+ char addr0 = subcomponentID.charAt(4);
+ return (addr3 == '0' || addr3 == '1') || (addr2 == '0' || addr2 == '1') || (addr1 == '0' || addr1 == '1')
+ || (addr0 == '0' || addr0 == '1');
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIram4.class.getCanonicalName(), (m, p, n) -> new GUIram4(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIsel2_4 extends SimpleRectangularSubmodelComponent
+{
+ public GUIsel2_4(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIsel2_4(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIsel2_4", name);
+ setSubmodelScale(.4);
+ setInputPins("SA", "SB", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4");
+ setOutputPins("Y1", "Y2", "Y3", "Y4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin SA = getSubmodelPin("SA");
+ Pin SB = getSubmodelPin("SB");
+ Pin A1 = getSubmodelPin("A1");
+ Pin A2 = getSubmodelPin("A2");
+ Pin A3 = getSubmodelPin("A3");
+ Pin A4 = getSubmodelPin("A4");
+ Pin B1 = getSubmodelPin("B1");
+ Pin B2 = getSubmodelPin("B2");
+ Pin B3 = getSubmodelPin("B3");
+ Pin B4 = getSubmodelPin("B4");
+ Pin Y1 = getSubmodelPin("Y1");
+ Pin Y2 = getSubmodelPin("Y2");
+ Pin Y3 = getSubmodelPin("Y3");
+ Pin Y4 = getSubmodelPin("Y4");
+
+ GUINandGate nandA1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandA2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandA3 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandA4 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandB1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandB2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandB3 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandB4 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
+
+ nandA1.moveTo(20, 2.5);
+ nandB1.moveTo(20, 27.5);
+ nandA2.moveTo(20, 52.5);
+ nandB2.moveTo(20, 77.5);
+ nandA3.moveTo(20, 102.5);
+ nandB3.moveTo(20, 127.5);
+ nandA4.moveTo(20, 152.5);
+ nandB4.moveTo(20, 177.5);
+ nandY1.moveTo(65, 2.5);
+ nandY2.moveTo(65, 27.5);
+ nandY3.moveTo(65, 52.5);
+ nandY4.moveTo(65, 77.5);
+ cpA1.moveCenterTo(7.5, 17.5);
+ cpB1.moveCenterTo(5, 42.5);
+ cpA2.moveCenterTo(7.5, 67.5);
+ cpB2.moveCenterTo(5, 92.5);
+ cpA3.moveCenterTo(7.5, 117.5);
+ cpB3.moveCenterTo(5, 142.5);
+
+ new GUIWire(submodelModifiable, A1, nandA1.getPin("A"), new Point(15, 62.5), new Point(15, 7.5));
+ new GUIWire(submodelModifiable, A2, nandA2.getPin("A"), new Point(17.5, 87.5), new Point(17.5, 57.5));
+ new GUIWire(submodelModifiable, A3, nandA3.getPin("A"), new Point(17.5, 112.5), new Point(17.5, 107.5));
+ new GUIWire(submodelModifiable, A4, nandA4.getPin("A"), new Point(17.5, 137.5), new Point(17.5, 157.5));
+ new GUIWire(submodelModifiable, B1, nandB1.getPin("A"), new Point(10, 162.5), new Point(10, 32.5));
+ new GUIWire(submodelModifiable, B2, nandB2.getPin("A"), new Point(12.5, 187.5), new Point(12.5, 82.5));
+ new GUIWire(submodelModifiable, B3, nandB3.getPin("A"), new Point(15, 212.5), new Point(15, 132.5));
+ new GUIWire(submodelModifiable, B4, nandB4.getPin("A"), new Point(10, 237.5), new Point(10, 182.5));
+ new GUIWire(submodelModifiable, SA, cpA1);
+ new GUIWire(submodelModifiable, SB, cpB1);
+ new GUIWire(submodelModifiable, cpA1, cpA2);
+ new GUIWire(submodelModifiable, cpA1, nandA1.getPin("B"));
+ new GUIWire(submodelModifiable, cpA2, cpA3);
+ new GUIWire(submodelModifiable, cpA2, nandA2.getPin("B"));
+ new GUIWire(submodelModifiable, cpA3, nandA3.getPin("B"));
+ new GUIWire(submodelModifiable, cpA3, nandA4.getPin("B"), new Point(7.5, 167.5));
+ new GUIWire(submodelModifiable, cpB1, cpB2);
+ new GUIWire(submodelModifiable, cpB1, nandB1.getPin("B"));
+ new GUIWire(submodelModifiable, cpB2, cpB3);
+ new GUIWire(submodelModifiable, cpB2, nandB2.getPin("B"));
+ new GUIWire(submodelModifiable, cpB3, nandB3.getPin("B"));
+ new GUIWire(submodelModifiable, cpB3, nandB4.getPin("B"), new Point(5, 192.5));
+ new GUIWire(submodelModifiable, nandA1.getPin("Y"), nandY1.getPin("A"), new Point(42.5, 12.5), new Point(42.5, 7.5));
+ new GUIWire(submodelModifiable, nandB1.getPin("Y"), nandY1.getPin("B"), new Point(45, 37.5), new Point(45, 17.5));
+ new GUIWire(submodelModifiable, nandA2.getPin("Y"), nandY2.getPin("A"), new Point(47.5, 62.5), new Point(47.5, 32.5));
+ new GUIWire(submodelModifiable, nandB2.getPin("Y"), nandY2.getPin("B"), new Point(50, 87.5), new Point(50, 42.5));
+ new GUIWire(submodelModifiable, nandA3.getPin("Y"), nandY3.getPin("A"), new Point(52.5, 112.5), new Point(52.5, 57.5));
+ new GUIWire(submodelModifiable, nandB3.getPin("Y"), nandY3.getPin("B"), new Point(55, 137.5), new Point(55, 67.5));
+ new GUIWire(submodelModifiable, nandA4.getPin("Y"), nandY4.getPin("A"), new Point(57.5, 162.5), new Point(57.5, 82.5));
+ new GUIWire(submodelModifiable, nandB4.getPin("Y"), nandY4.getPin("B"), new Point(60, 187.5), new Point(60, 92.5));
+ new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
+ new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
+ new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
+ new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIsel2_4.class.getCanonicalName(), (m, p, n) -> new GUIsel2_4(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIsel3_4 extends SimpleRectangularSubmodelComponent
+{
+ public GUIsel3_4(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIsel3_4(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIsel3_4", name);
+ setSubmodelScale(.2);
+ setInputPins("SA", "SB", "SC", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "C1", "C2", "C3", "C4");
+ setOutputPins("Y1", "Y2", "Y3", "Y4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin SA = getSubmodelPin("SA");
+ Pin SB = getSubmodelPin("SB");
+ Pin SC = getSubmodelPin("SC");
+ Pin A1 = getSubmodelPin("A1");
+ Pin A2 = getSubmodelPin("A2");
+ Pin A3 = getSubmodelPin("A3");
+ Pin A4 = getSubmodelPin("A4");
+ Pin B1 = getSubmodelPin("B1");
+ Pin B2 = getSubmodelPin("B2");
+ Pin B3 = getSubmodelPin("B3");
+ Pin B4 = getSubmodelPin("B4");
+ Pin C1 = getSubmodelPin("C1");
+ Pin C2 = getSubmodelPin("C2");
+ Pin C3 = getSubmodelPin("C3");
+ Pin C4 = getSubmodelPin("C4");
+ Pin Y1 = getSubmodelPin("Y1");
+ Pin Y2 = getSubmodelPin("Y2");
+ Pin Y3 = getSubmodelPin("Y3");
+ Pin Y4 = getSubmodelPin("Y4");
+
+ GUIsel2_4 sel2_4 = new GUIsel2_4(submodelModifiable);
+ GUInot4 not4 = new GUInot4(submodelModifiable);
+ GUINandGate nandC1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandC2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandC3 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandC4 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cpSC1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpSC2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpSC3 = new WireCrossPoint(submodelModifiable, 1);
+
+ sel2_4.moveTo(35, 250);
+ not4.moveTo(75, 250);
+ nandC1.moveTo(50, 570);
+ nandC2.moveTo(50, 620);
+ nandC3.moveTo(50, 670);
+ nandC4.moveTo(50, 720);
+ nandY1.moveTo(152.5, 15);
+ nandY2.moveTo(152.5, 65);
+ nandY3.moveTo(152.5, 115);
+ nandY4.moveTo(152.5, 165);
+ cpSC1.moveCenterTo(30, 585);
+ cpSC2.moveCenterTo(30, 635);
+ cpSC3.moveCenterTo(30, 685);
+
+ new GUIWire(submodelModifiable, SA, sel2_4.getPin("SA"), new Point(25, 25), new Point(25, 255));
+ new GUIWire(submodelModifiable, SB, sel2_4.getPin("SB"), new Point(20, 75), new Point(20, 265));
+ new GUIWire(submodelModifiable, A1, sel2_4.getPin("A1"), new Point(15, 175), new Point(15, 275));
+ new GUIWire(submodelModifiable, A2, sel2_4.getPin("A2"), new Point(10, 225), new Point(10, 285));
+ new GUIWire(submodelModifiable, A3, sel2_4.getPin("A3"), new Point(5, 275), new Point(5, 295));
+ new GUIWire(submodelModifiable, A4, sel2_4.getPin("A4"), new Point(5, 325), new Point(5, 305));
+ new GUIWire(submodelModifiable, B1, sel2_4.getPin("B1"), new Point(10, 375), new Point(10, 315));
+ new GUIWire(submodelModifiable, B2, sel2_4.getPin("B2"), new Point(15, 425), new Point(15, 325));
+ new GUIWire(submodelModifiable, B3, sel2_4.getPin("B3"), new Point(20, 475), new Point(20, 335));
+ new GUIWire(submodelModifiable, B4, sel2_4.getPin("B4"), new Point(25, 525), new Point(25, 345));
+ new GUIWire(submodelModifiable, sel2_4.getPin("Y1"), not4.getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, sel2_4.getPin("Y2"), not4.getPin("A2"), new Point[0]);
+ new GUIWire(submodelModifiable, sel2_4.getPin("Y3"), not4.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, sel2_4.getPin("Y4"), not4.getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, SC, cpSC1, new Point(30, 125));
+ new GUIWire(submodelModifiable, cpSC1, nandC1.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpSC1, cpSC2, new Point(30, 125));
+ new GUIWire(submodelModifiable, cpSC2, nandC2.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpSC2, cpSC3, new Point(30, 125));
+ new GUIWire(submodelModifiable, cpSC3, nandC3.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpSC3, nandC4.getPin("B"), new Point(30, 735));
+ new GUIWire(submodelModifiable, C1, nandC1.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, C2, nandC2.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, C3, nandC3.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, C4, nandC4.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, not4.getPin("Y1"), nandY1.getPin("A"), new Point(115, 255), new Point(115, 20));
+ new GUIWire(submodelModifiable, not4.getPin("Y2"), nandY2.getPin("A"), new Point(120, 265), new Point(120, 70));
+ new GUIWire(submodelModifiable, not4.getPin("Y3"), nandY3.getPin("A"), new Point(125, 275), new Point(125, 120));
+ new GUIWire(submodelModifiable, not4.getPin("Y4"), nandY4.getPin("A"), new Point(130, 285), new Point(130, 170));
+ new GUIWire(submodelModifiable, nandC1.getPin("Y"), nandY1.getPin("B"), new Point(135, 580), new Point(135, 30));
+ new GUIWire(submodelModifiable, nandC2.getPin("Y"), nandY2.getPin("B"), new Point(140, 630), new Point(140, 80));
+ new GUIWire(submodelModifiable, nandC3.getPin("Y"), nandY3.getPin("B"), new Point(145, 680), new Point(145, 130));
+ new GUIWire(submodelModifiable, nandC4.getPin("Y"), nandY4.getPin("B"), new Point(150, 730), new Point(150, 180));
+ new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
+ new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
+ new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
+ new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIsel3_4.class.getCanonicalName(), (m, p, n) -> new GUIsel3_4(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIxor extends SimpleRectangularSubmodelComponent
+{
+ public GUIxor(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIxor(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIxor", name);
+ setSubmodelScale(.4);
+ setInputPins("A", "B");
+ setOutputPins("Y");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin A = getSubmodelPin("A");
+ Pin B = getSubmodelPin("B");
+ Pin Y = getSubmodelPin("Y");
+
+ GUINandGate nandAB = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandYA = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandYB = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cpA = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpB = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpAB = new WireCrossPoint(submodelModifiable, 1);
+
+ nandAB.moveTo(7.5, 15);
+ nandYA.moveTo(35, 2.5);
+ nandYB.moveTo(35, 27.5);
+ nandY.moveTo(62.5, 15);
+ cpA.moveCenterTo(5, 12.5);
+ cpB.moveCenterTo(5, 37.5);
+ cpAB.moveCenterTo(30, 25);
+
+ new GUIWire(submodelModifiable, A, cpA, new Point[0]);
+ new GUIWire(submodelModifiable, B, cpB, new Point[0]);
+ new GUIWire(submodelModifiable, cpA, nandAB.getPin("A"), new Point(5, 20));
+ new GUIWire(submodelModifiable, cpB, nandAB.getPin("B"), new Point(5, 30));
+ new GUIWire(submodelModifiable, nandAB.getPin("Y"), cpAB);
+ new GUIWire(submodelModifiable, cpAB, nandYA.getPin("B"), new Point(30, 17.5));
+ new GUIWire(submodelModifiable, cpAB, nandYB.getPin("A"), new Point(30, 32.5));
+ new GUIWire(submodelModifiable, cpA, nandYA.getPin("A"), new Point(5, 7.5));
+ new GUIWire(submodelModifiable, cpB, nandYB.getPin("B"), new Point(5, 42.5));
+ new GUIWire(submodelModifiable, nandYA.getPin("Y"), nandY.getPin("A"));
+ new GUIWire(submodelModifiable, nandYB.getPin("Y"), nandY.getPin("B"));
+ new GUIWire(submodelModifiable, nandY.getPin("Y"), Y);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIxor.class.getCanonicalName(), (m, p, n) -> new GUIxor(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdlatch4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUImux1_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIor4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIram4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIsel3_4;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901 extends SimpleRectangularSubmodelComponent
+{
+ public GUIAm2901(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIAm2901(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIAm2901", name);
+ setSubmodelScale(.1);
+ setInputPins("I8", "I7", "I6", "I5", "I4", "I3", "I2", "I1", "I0", "C", "Cn", "D1", "D2", "D3", "D4", "A0", "A1", "A2", "A3", "B0",
+ "B1", "B2", "B3", "IRAMn", "IRAMn+3", "IQn", "IQn+3");
+ setOutputPins("Y1", "Y2", "Y3", "Y4", "F=0", "Cn+4", "OVR", "F3", "ORAMn", "ORAMn+3", "OQn", "OQn+3");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin I8 = getSubmodelPin("I8");
+ Pin I7 = getSubmodelPin("I7");
+ Pin I6 = getSubmodelPin("I6");
+ Pin I5 = getSubmodelPin("I5");
+ Pin I4 = getSubmodelPin("I4");
+ Pin I3 = getSubmodelPin("I3");
+ Pin I2 = getSubmodelPin("I2");
+ Pin I1 = getSubmodelPin("I1");
+ Pin I0 = getSubmodelPin("I0");
+ Pin C = getSubmodelPin("C");
+ Pin Cn = getSubmodelPin("Cn");
+ Pin D1 = getSubmodelPin("D1");
+ Pin D2 = getSubmodelPin("D2");
+ Pin D3 = getSubmodelPin("D3");
+ Pin D4 = getSubmodelPin("D4");
+ Pin A0 = getSubmodelPin("A0");
+ Pin A1 = getSubmodelPin("A1");
+ Pin A2 = getSubmodelPin("A2");
+ Pin A3 = getSubmodelPin("A3");
+ Pin B0 = getSubmodelPin("B0");
+ Pin B1 = getSubmodelPin("B1");
+ Pin B2 = getSubmodelPin("B2");
+ Pin B3 = getSubmodelPin("B3");
+ Pin IRAMn = getSubmodelPin("IRAMn");
+ Pin IRAMnplus3 = getSubmodelPin("IRAMn+3");
+ Pin IQn = getSubmodelPin("IQn");
+ Pin IQnplus3 = getSubmodelPin("IQn+3");
+ Pin Y1 = getSubmodelPin("Y1");
+ Pin Y2 = getSubmodelPin("Y2");
+ Pin Y3 = getSubmodelPin("Y3");
+ Pin Y4 = getSubmodelPin("Y4");
+ Pin Feq0 = getSubmodelPin("F=0");
+ Pin Cnplus4 = getSubmodelPin("Cn+4");
+ Pin OVR = getSubmodelPin("OVR");
+ Pin F3 = getSubmodelPin("F3");
+ Pin ORAMn = getSubmodelPin("ORAMn");
+ Pin ORAMnplus3 = getSubmodelPin("ORAMn+3");
+ Pin OQn = getSubmodelPin("OQn");
+ Pin OQnplus3 = getSubmodelPin("OQn+3");
+
+ GUIAm2901DestDecode destDecode = new GUIAm2901DestDecode(submodelModifiable);
+ GUImux1_4 Ymux = new GUImux1_4(submodelModifiable);
+ GUIand ramweAnd = new GUIand(submodelModifiable);
+ GUINandGate notC = new GUINandGate(submodelModifiable, 1);
+ GUIAm2901ALUInclSourceDecodeInclFunctionDecode alu = new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(submodelModifiable);
+ GUIor4 Fneq0 = new GUIor4(submodelModifiable);
+ GUINandGate notFneq0 = new GUINandGate(submodelModifiable, 1);
+ GUIram4 ram = new GUIram4(submodelModifiable);
+ GUIdlatch4 QAlatch = new GUIdlatch4(submodelModifiable);
+ GUIdlatch4 QBlatch = new GUIdlatch4(submodelModifiable);
+ GUIsel3_4 ramDsel = new GUIsel3_4(submodelModifiable);
+ GUIsel3_4 qregDsel = new GUIsel3_4(submodelModifiable);
+ GUIAm2901QReg qreg = new GUIAm2901QReg(submodelModifiable);
+
+ WireCrossPoint cpC1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpC2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpC3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpC4 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpLSH = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNSH = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpRSH = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQA1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQA2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQA3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQA4 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ4 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpOQn = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpOQnplus3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ2Rsh = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpQ3Rsh = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpORAMn = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpORAMnplus3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF11 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF21 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF31 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF41 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF12 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF22 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF32 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF42 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF1Lsh = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF2Lsh = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF3Lsh = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF2Rsh = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF3Rsh = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF4Rsh = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF13 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF23 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF33 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpF43 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpFneq0 = new WireCrossPoint(submodelModifiable, 1);
+
+ destDecode.moveTo(15, 45);
+ Ymux.moveTo(275, 135);
+ ramweAnd.moveTo(190, 65);
+ notC.moveTo(160, 75);
+ alu.moveTo(240, 2110);
+ Fneq0.moveTo(275, 445);
+ notFneq0.moveTo(320, 440);
+ ram.moveTo(95, 2220);
+ QAlatch.moveTo(160, 2220);
+ QBlatch.moveTo(160, 2275);
+ ramDsel.moveTo(45, 2310);
+ qregDsel.moveTo(45, 2510);
+ qreg.moveTo(90, 2490);
+ cpC1.moveCenterTo(155, 950);
+ cpC2.moveCenterTo(155, 90);
+ cpC3.moveCenterTo(155, 2265);
+ cpC4.moveCenterTo(155, 2320);
+ cpLSH.moveCenterTo(40, 2315);
+ cpNSH.moveCenterTo(35, 2325);
+ cpRSH.moveCenterTo(30, 2335);
+ cpQA1.moveCenterTo(220, 2225);
+ cpQA2.moveCenterTo(225, 2235);
+ cpQA3.moveCenterTo(230, 2245);
+ cpQA4.moveCenterTo(235, 2255);
+ cpQ1.moveCenterTo(130, 2495);
+ cpQ2.moveCenterTo(135, 2505);
+ cpQ3.moveCenterTo(140, 2515);
+ cpQ4.moveCenterTo(145, 2525);
+ cpOQn.moveCenterTo(220, 2495);
+ cpOQnplus3.moveCenterTo(235, 2525);
+ cpQ2Rsh.moveCenterTo(35, 2625);
+ cpQ3Rsh.moveCenterTo(40, 2635);
+ cpORAMn.moveCenterTo(280, 2115);
+ cpORAMnplus3.moveCenterTo(295, 2145);
+ cpF3.moveCenterTo(330, 950);
+ cpF11.moveCenterTo(255, 2090);
+ cpF21.moveCenterTo(260, 2095);
+ cpF31.moveCenterTo(265, 2100);
+ cpF41.moveCenterTo(270, 2105);
+ cpF12.moveCenterTo(255, 450);
+ cpF22.moveCenterTo(260, 460);
+ cpF32.moveCenterTo(265, 470);
+ cpF42.moveCenterTo(270, 480);
+ cpF1Lsh.moveCenterTo(10, 2355);
+ cpF2Lsh.moveCenterTo(15, 2365);
+ cpF3Lsh.moveCenterTo(20, 2375);
+ cpF2Rsh.moveCenterTo(15, 2395);
+ cpF3Rsh.moveCenterTo(20, 2405);
+ cpF4Rsh.moveCenterTo(25, 2415);
+ cpF13.moveCenterTo(10, 2385);
+ cpF23.moveCenterTo(15, 2425);
+ cpF33.moveCenterTo(20, 2435);
+ cpF43.moveCenterTo(25, 2445);
+ cpFneq0.moveCenterTo(315, 450);
+
+ new GUIWire(submodelModifiable, I8, destDecode.getPin("I8"), new Point[0]);
+ new GUIWire(submodelModifiable, I7, destDecode.getPin("I7"), new Point(5, 150), new Point(5, 60));
+ new GUIWire(submodelModifiable, I6, destDecode.getPin("I6"), new Point(10, 250), new Point(10, 70));
+ new GUIWire(submodelModifiable, I5, alu.getPin("I5"), new Point(130, 350), new Point(130, 2115));
+ new GUIWire(submodelModifiable, I4, alu.getPin("I4"), new Point(125, 450), new Point(125, 2125));
+ new GUIWire(submodelModifiable, I3, alu.getPin("I3"), new Point(120, 550), new Point(120, 2135));
+ new GUIWire(submodelModifiable, I2, alu.getPin("I2"), new Point(115, 650), new Point(115, 2145));
+ new GUIWire(submodelModifiable, I1, alu.getPin("I1"), new Point(110, 750), new Point(110, 2155));
+ new GUIWire(submodelModifiable, I0, alu.getPin("I0"), new Point(105, 850), new Point(105, 2165));
+ new GUIWire(submodelModifiable, C, cpC1, new Point[0]);
+ new GUIWire(submodelModifiable, cpC1, cpC2, new Point[0]);
+ new GUIWire(submodelModifiable, cpC2, notC.getPin("A"), new Point(155, 80));
+ new GUIWire(submodelModifiable, cpC2, notC.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpC1, cpC3, new Point[0]);
+ new GUIWire(submodelModifiable, cpC3, QAlatch.getPin("C"), new Point[0]);
+ new GUIWire(submodelModifiable, cpC3, cpC4, new Point[0]);
+ new GUIWire(submodelModifiable, cpC4, QBlatch.getPin("C"), new Point[0]);
+ new GUIWire(submodelModifiable, cpC4, qreg.getPin("C"), new Point(155, 2485), new Point(80, 2485), new Point(80, 2495));
+ new GUIWire(submodelModifiable, destDecode.getPin("LSH"), cpLSH, new Point(55, 90), new Point(55, 125), new Point(40, 125));
+ new GUIWire(submodelModifiable, destDecode.getPin("NSH"), cpNSH, new Point(60, 50), new Point(60, 120), new Point(35, 120));
+ new GUIWire(submodelModifiable, destDecode.getPin("RSH"), cpRSH, new Point(65, 60), new Point(65, 115), new Point(30, 115));
+ new GUIWire(submodelModifiable, cpLSH, ramDsel.getPin("SA"), new Point[0]);
+ new GUIWire(submodelModifiable, cpNSH, ramDsel.getPin("SB"), new Point[0]);
+ new GUIWire(submodelModifiable, cpRSH, ramDsel.getPin("SC"), new Point[0]);
+ new GUIWire(submodelModifiable, cpLSH, qregDsel.getPin("SA"), new Point(40, 2515));
+ new GUIWire(submodelModifiable, cpNSH, qregDsel.getPin("SB"), new Point(35, 2525));
+ new GUIWire(submodelModifiable, cpRSH, qregDsel.getPin("SC"), new Point(30, 2535));
+ new GUIWire(submodelModifiable, A0, ram.getPin("A0"), new Point(80, 1550), new Point(80, 2225));
+ new GUIWire(submodelModifiable, A1, ram.getPin("A1"), new Point(75, 1650), new Point(75, 2235));
+ new GUIWire(submodelModifiable, A2, ram.getPin("A2"), new Point(70, 1750), new Point(70, 2245));
+ new GUIWire(submodelModifiable, A3, ram.getPin("A3"), new Point(65, 1850), new Point(65, 2255));
+ new GUIWire(submodelModifiable, B0, ram.getPin("B0"), new Point(60, 1950), new Point(60, 2265));
+ new GUIWire(submodelModifiable, B1, ram.getPin("B1"), new Point(55, 2050), new Point(55, 2275));
+ new GUIWire(submodelModifiable, B2, ram.getPin("B2"), new Point(50, 2150), new Point(50, 2285));
+ new GUIWire(submodelModifiable, B3, ram.getPin("B3"), new Point(45, 2250), new Point(45, 2295));
+ new GUIWire(submodelModifiable, ram.getPin("QA1"), QAlatch.getPin("D1"), new Point[0]);
+ new GUIWire(submodelModifiable, ram.getPin("QA2"), QAlatch.getPin("D2"), new Point[0]);
+ new GUIWire(submodelModifiable, ram.getPin("QA3"), QAlatch.getPin("D3"), new Point[0]);
+ new GUIWire(submodelModifiable, ram.getPin("QA4"), QAlatch.getPin("D4"), new Point[0]);
+ new GUIWire(submodelModifiable, ram.getPin("QB1"), QBlatch.getPin("D1"), new Point(150, 2265), new Point(150, 2280));
+ new GUIWire(submodelModifiable, ram.getPin("QB2"), QBlatch.getPin("D2"), new Point(145, 2275), new Point(145, 2290));
+ new GUIWire(submodelModifiable, ram.getPin("QB3"), QBlatch.getPin("D3"), new Point(140, 2285), new Point(140, 2300));
+ new GUIWire(submodelModifiable, ram.getPin("QB4"), QBlatch.getPin("D4"), new Point(135, 2295), new Point(135, 2310));
+ new GUIWire(submodelModifiable, Cn, alu.getPin("Cn"), new Point(100, 1050), new Point(100, 2175));
+ new GUIWire(submodelModifiable, D1, alu.getPin("D1"), new Point(180, 1150), new Point(180, 2185));
+ new GUIWire(submodelModifiable, D2, alu.getPin("D2"), new Point(175, 1250), new Point(175, 2195));
+ new GUIWire(submodelModifiable, D3, alu.getPin("D3"), new Point(170, 1350), new Point(170, 2205));
+ new GUIWire(submodelModifiable, D4, alu.getPin("D4"), new Point(165, 1450), new Point(165, 2215));
+ new GUIWire(submodelModifiable, QAlatch.getPin("Q1"), cpQA1, new Point[0]);
+ new GUIWire(submodelModifiable, QAlatch.getPin("Q2"), cpQA2, new Point[0]);
+ new GUIWire(submodelModifiable, QAlatch.getPin("Q3"), cpQA3, new Point[0]);
+ new GUIWire(submodelModifiable, QAlatch.getPin("Q4"), cpQA4, new Point[0]);
+ new GUIWire(submodelModifiable, cpQA1, Ymux.getPin("I0_1"), new Point(220, 150));
+ new GUIWire(submodelModifiable, cpQA2, Ymux.getPin("I0_2"), new Point(225, 160));
+ new GUIWire(submodelModifiable, cpQA3, Ymux.getPin("I0_3"), new Point(230, 170));
+ new GUIWire(submodelModifiable, cpQA4, Ymux.getPin("I0_4"), new Point(235, 180));
+ new GUIWire(submodelModifiable, cpQA1, alu.getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQA2, alu.getPin("A2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQA3, alu.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQA4, alu.getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, QBlatch.getPin("Q1"), alu.getPin("B1"), new Point(200, 2280), new Point(200, 2265));
+ new GUIWire(submodelModifiable, QBlatch.getPin("Q2"), alu.getPin("B2"), new Point(205, 2290), new Point(205, 2275));
+ new GUIWire(submodelModifiable, QBlatch.getPin("Q3"), alu.getPin("B3"), new Point(210, 2300), new Point(210, 2285));
+ new GUIWire(submodelModifiable, QBlatch.getPin("Q4"), alu.getPin("B4"), new Point(215, 2310), new Point(215, 2295));
+ new GUIWire(submodelModifiable, qreg.getPin("Q1"), cpQ1, new Point[0]);
+ new GUIWire(submodelModifiable, qreg.getPin("Q2"), cpQ2, new Point[0]);
+ new GUIWire(submodelModifiable, qreg.getPin("Q3"), cpQ3, new Point[0]);
+ new GUIWire(submodelModifiable, qreg.getPin("Q4"), cpQ4, new Point[0]);
+ new GUIWire(submodelModifiable, cpQ1, cpOQn, new Point[0]);
+ new GUIWire(submodelModifiable, cpOQn, OQn, new Point(335, 2495), new Point(335, 1050));
+ new GUIWire(submodelModifiable, cpQ4, cpOQnplus3, new Point[0]);
+ new GUIWire(submodelModifiable, cpOQnplus3, OQnplus3, new Point(340, 2525), new Point(340, 1150));
+ new GUIWire(submodelModifiable, cpQ2, cpQ2Rsh, new Point(135, 2670), new Point(30, 2670), new Point(30, 2635), new Point(35, 2635));
+ new GUIWire(submodelModifiable, cpQ3, cpQ3Rsh, new Point(140, 2675), new Point(35, 2675), new Point(35, 2640), new Point(40, 2640));
+ new GUIWire(submodelModifiable, cpQ2Rsh, qregDsel.getPin("C1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ3Rsh, qregDsel.getPin("C2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpQ4, qregDsel.getPin("C3"), new Point(145, 2680), new Point(40, 2680), new Point(40, 2645));
+ new GUIWire(submodelModifiable, IQnplus3, qregDsel.getPin("C4"), new Point(5, 2650), new Point(5, 2655));
+ new GUIWire(submodelModifiable, IQn, qregDsel.getPin("A1"), new Point(5, 2550), new Point(5, 2545));
+ new GUIWire(submodelModifiable, cpQ1, qregDsel.getPin("A2"), new Point(130, 2665), new Point(25, 2665), new Point(25, 2630),
+ new Point(30, 2630), new Point(30, 2555));
+ new GUIWire(submodelModifiable, cpOQn, alu.getPin("Q1"), new Point(220, 2305));
+ new GUIWire(submodelModifiable, cpQ2, alu.getPin("Q2"), new Point(225, 2505), new Point(225, 2315));
+ new GUIWire(submodelModifiable, cpQ3, alu.getPin("Q3"), new Point(230, 2515), new Point(230, 2325));
+ new GUIWire(submodelModifiable, cpOQnplus3, alu.getPin("Q4"), new Point(235, 2335));
+ new GUIWire(submodelModifiable, cpQ2Rsh, qregDsel.getPin("A3"), new Point(35, 2565));
+ new GUIWire(submodelModifiable, cpQ3Rsh, qregDsel.getPin("A4"), new Point(40, 2575));
+ new GUIWire(submodelModifiable, qregDsel.getPin("Y1"), qreg.getPin("D1"), new Point[0]);
+ new GUIWire(submodelModifiable, qregDsel.getPin("Y2"), qreg.getPin("D2"), new Point[0]);
+ new GUIWire(submodelModifiable, qregDsel.getPin("Y3"), qreg.getPin("D3"), new Point[0]);
+ new GUIWire(submodelModifiable, qregDsel.getPin("Y4"), qreg.getPin("D4"), new Point[0]);
+ new GUIWire(submodelModifiable, alu.getPin("Cn+4"), Cnplus4, new Point(315, 2155), new Point(315, 550));
+ new GUIWire(submodelModifiable, alu.getPin("OVR"), OVR, new Point(320, 2165), new Point(320, 650));
+ new GUIWire(submodelModifiable, alu.getPin("F1"), cpORAMn, new Point[0]);
+ new GUIWire(submodelModifiable, alu.getPin("F4"), cpORAMnplus3, new Point[0]);
+ new GUIWire(submodelModifiable, cpORAMn, ORAMn, new Point(325, 2115), new Point(325, 850));
+ new GUIWire(submodelModifiable, cpORAMnplus3, cpF3, new Point(330, 2145));
+ new GUIWire(submodelModifiable, cpF3, ORAMnplus3, new Point[0]);
+ new GUIWire(submodelModifiable, cpF3, F3, new Point(330, 750));
+ new GUIWire(submodelModifiable, cpORAMn, cpF11, new Point(280, 2090));
+ new GUIWire(submodelModifiable, alu.getPin("F2"), cpF21, new Point(285, 2125), new Point(285, 2095));
+ new GUIWire(submodelModifiable, alu.getPin("F3"), cpF31, new Point(290, 2135), new Point(290, 2100));
+ new GUIWire(submodelModifiable, cpORAMnplus3, cpF41, new Point(295, 2105));
+ new GUIWire(submodelModifiable, cpF11, cpF12, new Point[0]);
+ new GUIWire(submodelModifiable, cpF21, cpF22, new Point[0]);
+ new GUIWire(submodelModifiable, cpF31, cpF32, new Point[0]);
+ new GUIWire(submodelModifiable, cpF41, cpF42, new Point[0]);
+ new GUIWire(submodelModifiable, cpF12, Fneq0.getPin("A1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF22, Fneq0.getPin("A2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF32, Fneq0.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF42, Fneq0.getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF12, Ymux.getPin("I1_1"), new Point(255, 190));
+ new GUIWire(submodelModifiable, cpF22, Ymux.getPin("I1_2"), new Point(260, 200));
+ new GUIWire(submodelModifiable, cpF32, Ymux.getPin("I1_3"), new Point(265, 210));
+ new GUIWire(submodelModifiable, cpF42, Ymux.getPin("I1_4"), new Point(270, 220));
+ new GUIWire(submodelModifiable, cpF11, cpF1Lsh, new Point(10, 2090));
+ new GUIWire(submodelModifiable, cpF21, cpF2Lsh, new Point(15, 2095));
+ new GUIWire(submodelModifiable, cpF31, cpF3Lsh, new Point(20, 2100));
+ new GUIWire(submodelModifiable, IRAMn, ramDsel.getPin("A1"), new Point(5, 2350), new Point(5, 2345));
+ new GUIWire(submodelModifiable, cpF1Lsh, ramDsel.getPin("A2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF2Lsh, ramDsel.getPin("A3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF3Lsh, ramDsel.getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF2Lsh, cpF2Rsh, new Point[0]);
+ new GUIWire(submodelModifiable, cpF3Lsh, cpF3Rsh, new Point[0]);
+ new GUIWire(submodelModifiable, cpF41, cpF4Rsh, new Point(25, 2105));
+ new GUIWire(submodelModifiable, cpF1Lsh, cpF13, new Point[0]);
+ new GUIWire(submodelModifiable, cpF13, ramDsel.getPin("B1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF2Rsh, ramDsel.getPin("B2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF3Rsh, ramDsel.getPin("B3"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF4Rsh, ramDsel.getPin("B4"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF2Rsh, cpF23, new Point[0]);
+ new GUIWire(submodelModifiable, cpF3Rsh, cpF33, new Point[0]);
+ new GUIWire(submodelModifiable, cpF4Rsh, cpF43, new Point[0]);
+ new GUIWire(submodelModifiable, cpF23, ramDsel.getPin("C1"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF33, ramDsel.getPin("C2"), new Point[0]);
+ new GUIWire(submodelModifiable, cpF43, ramDsel.getPin("C3"), new Point[0]);
+ new GUIWire(submodelModifiable, IRAMnplus3, ramDsel.getPin("C4"), new Point(5, 2450), new Point(5, 2455));
+ new GUIWire(submodelModifiable, cpF13, qregDsel.getPin("B1"), new Point(10, 2585));
+ new GUIWire(submodelModifiable, cpF23, qregDsel.getPin("B2"), new Point(15, 2595));
+ new GUIWire(submodelModifiable, cpF33, qregDsel.getPin("B3"), new Point(20, 2605));
+ new GUIWire(submodelModifiable, cpF43, qregDsel.getPin("B4"), new Point(25, 2615));
+ new GUIWire(submodelModifiable, ramDsel.getPin("Y1"), ram.getPin("D1"), new Point[0]);
+ new GUIWire(submodelModifiable, ramDsel.getPin("Y2"), ram.getPin("D2"), new Point[0]);
+ new GUIWire(submodelModifiable, ramDsel.getPin("Y3"), ram.getPin("D3"), new Point[0]);
+ new GUIWire(submodelModifiable, ramDsel.getPin("Y4"), ram.getPin("D4"), new Point[0]);
+ new GUIWire(submodelModifiable, destDecode.getPin("RAMWE"), ramweAnd.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, notC.getPin("Y"), ramweAnd.getPin("B"));
+ new GUIWire(submodelModifiable, ramweAnd.getPin("Y"), ram.getPin("WE"), new Point(230, 70), new Point(230, 105), new Point(90, 105),
+ new Point(90, 2305));
+ new GUIWire(submodelModifiable, destDecode.getPin("QWE"), qreg.getPin("WE"), new Point(85, 100), new Point(85, 2505));
+ new GUIWire(submodelModifiable, destDecode.getPin("YF"), Ymux.getPin("S0"), new Point(70, 80), new Point(70, 140));
+ new GUIWire(submodelModifiable, Ymux.getPin("Y1"), Y1, new Point(335, 140), new Point(335, 50));
+ new GUIWire(submodelModifiable, Ymux.getPin("Y2"), Y2, new Point[0]);
+ new GUIWire(submodelModifiable, Ymux.getPin("Y3"), Y3, new Point(335, 160), new Point(335, 250));
+ new GUIWire(submodelModifiable, Ymux.getPin("Y4"), Y4, new Point(325, 170), new Point(325, 350));
+ new GUIWire(submodelModifiable, Fneq0.getPin("Y"), cpFneq0, new Point[0]);
+ new GUIWire(submodelModifiable, cpFneq0, notFneq0.getPin("A"), new Point(315, 445));
+ new GUIWire(submodelModifiable, cpFneq0, notFneq0.getPin("B"), new Point(315, 455));
+ new GUIWire(submodelModifiable, notFneq0.getPin("Y"), Feq0, new Point[0]);
+
+ addHighLevelStateSubcomponentID("regs", ram);
+ addHighLevelStateSubcomponentID("qreg", qreg);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901.class.getCanonicalName(), (m, p, n) -> new GUIAm2901(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUInand3;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901ALUFuncDecode extends SimpleRectangularSubmodelComponent
+{
+ public GUIAm2901ALUFuncDecode(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIAm2901ALUFuncDecode(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIAm2901ALUFuncDecode", name);
+ setSubmodelScale(.25);
+ setInputPins("I5", "I4", "I3");
+ setOutputPins("CinE", "L", "SN", "SBE", "FN", "RN");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin I5 = getSubmodelPin("I5");
+ Pin I4 = getSubmodelPin("I4");
+ Pin I3 = getSubmodelPin("I3");
+ Pin CinE = getSubmodelPin("CinE");
+ Pin L = getSubmodelPin("L");
+ Pin SN = getSubmodelPin("SN");
+ Pin SBE = getSubmodelPin("SBE");
+ Pin FN = getSubmodelPin("FN");
+ Pin RN = getSubmodelPin("RN");
+
+ GUINandGate notI5 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notI4 = new GUINandGate(submodelModifiable, 1);
+ GUInand3 nandI4I3NotI5 = new GUInand3(submodelModifiable);
+ GUINandGate nandI5NotI4 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandI3I4 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandL = new GUINandGate(submodelModifiable, 1);
+ GUIand andSBE = new GUIand(submodelModifiable);
+
+ WireCrossPoint cpI51 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI52 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI53 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI41 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI42 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI43 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI44 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI31 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI32 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI51 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI52 = new WireCrossPoint(submodelModifiable, 1);
+
+ notI5.moveTo(15, 10);
+ notI4.moveTo(15, 50);
+ nandI4I3NotI5.moveTo(55, 10);
+ nandI5NotI4.moveTo(55, 45);
+ nandI3I4.moveTo(55, 70);
+ nandL.moveTo(100, 50);
+ andSBE.moveTo(100, 135);
+ cpI51.moveCenterTo(5, 20);
+ cpI52.moveCenterTo(5, 25);
+ cpI53.moveCenterTo(5, 45);
+ cpI41.moveCenterTo(10, 60);
+ cpI42.moveCenterTo(10, 55);
+ cpI43.moveCenterTo(10, 65);
+ cpI44.moveCenterTo(10, 85);
+ cpI31.moveCenterTo(50, 100);
+ cpI32.moveCenterTo(50, 75);
+ cpNotI51.moveCenterTo(40, 20);
+ cpNotI52.moveCenterTo(40, 35);
+
+ new GUIWire(submodelModifiable, I5, cpI51, new Point[0]);
+ new GUIWire(submodelModifiable, cpI51, notI5.getPin("A"), new Point(5, 15));
+ new GUIWire(submodelModifiable, cpI51, cpI52, new Point[0]);
+ new GUIWire(submodelModifiable, cpI52, notI5.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpI52, cpI53, new Point[0]);
+ new GUIWire(submodelModifiable, cpI53, nandI5NotI4.getPin("A"), new Point(45, 45), new Point(45, 50));
+ new GUIWire(submodelModifiable, cpI53, FN, new Point(5, 180));
+ new GUIWire(submodelModifiable, I4, cpI41, new Point[0]);
+ new GUIWire(submodelModifiable, cpI41, cpI42, new Point[0]);
+ new GUIWire(submodelModifiable, cpI42, nandI4I3NotI5.getPin("A"), new Point(10, 40), new Point(45, 40), new Point(45, 15));
+ new GUIWire(submodelModifiable, cpI42, notI4.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, cpI41, cpI43, new Point[0]);
+ new GUIWire(submodelModifiable, cpI43, notI4.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpI43, cpI44, new Point[0]);
+ new GUIWire(submodelModifiable, cpI44, nandI3I4.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpI44, SN, new Point(10, 105), new Point(135, 105), new Point(135, 100));
+ new GUIWire(submodelModifiable, I3, cpI31, new Point(50, 100));
+ new GUIWire(submodelModifiable, cpI31, RN, new Point(50, 220));
+ new GUIWire(submodelModifiable, cpI31, cpI32, new Point[0]);
+ new GUIWire(submodelModifiable, cpI32, nandI4I3NotI5.getPin("B"), new Point(50, 25));
+ new GUIWire(submodelModifiable, cpI32, nandI3I4.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, notI5.getPin("Y"), cpNotI51, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI51, CinE, new Point(40, 5), new Point(115, 5), new Point(115, 20));
+ new GUIWire(submodelModifiable, cpNotI51, cpNotI52, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI52, nandI4I3NotI5.getPin("C"), new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI52, andSBE.getPin("B"), new Point(40, 150));
+ new GUIWire(submodelModifiable, notI4.getPin("Y"), nandI5NotI4.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, nandI4I3NotI5.getPin("Y"), nandL.getPin("A"));
+ new GUIWire(submodelModifiable, nandI5NotI4.getPin("Y"), nandL.getPin("B"));
+ new GUIWire(submodelModifiable, nandI3I4.getPin("Y"), andSBE.getPin("A"));
+ new GUIWire(submodelModifiable, nandL.getPin("Y"), L, new Point[0]);
+ new GUIWire(submodelModifiable, andSBE.getPin("Y"), SBE, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901ALUFuncDecode.class.getCanonicalName(),
+ (m, p, n) -> new GUIAm2901ALUFuncDecode(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIxor;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901ALUInclDecode extends SimpleRectangularSubmodelComponent
+{
+ public GUIAm2901ALUInclDecode(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIAm2901ALUInclDecode(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIAm2901ALUInclDecode", name);
+ setSubmodelScale(.25);
+ setInputPins("I5", "I4", "I3", "Cn", "R1", "R2", "R3", "R4", "S1", "S2", "S3", "S4");
+ setOutputPins("F1", "F2", "F3", "F4", "Cn+4", "OVR");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin I5 = getSubmodelPin("I5");
+ Pin I4 = getSubmodelPin("I4");
+ Pin I3 = getSubmodelPin("I3");
+ Pin Cn = getSubmodelPin("Cn");
+ Pin R1 = getSubmodelPin("R1");
+ Pin R2 = getSubmodelPin("R2");
+ Pin R3 = getSubmodelPin("R3");
+ Pin R4 = getSubmodelPin("R4");
+ Pin S1 = getSubmodelPin("S1");
+ Pin S2 = getSubmodelPin("S2");
+ Pin S3 = getSubmodelPin("S3");
+ Pin S4 = getSubmodelPin("S4");
+ Pin F1 = getSubmodelPin("F1");
+ Pin F2 = getSubmodelPin("F2");
+ Pin F3 = getSubmodelPin("F3");
+ Pin F4 = getSubmodelPin("F4");
+ Pin Cnplus4 = getSubmodelPin("Cn+4");
+ Pin OVR = getSubmodelPin("OVR");
+
+ GUIAm2901ALUFuncDecode funcDecode = new GUIAm2901ALUFuncDecode(submodelModifiable);
+ GUIAm2901ALUOneBit alu1 = new GUIAm2901ALUOneBit(submodelModifiable);
+ GUIAm2901ALUOneBit alu2 = new GUIAm2901ALUOneBit(submodelModifiable);
+ GUIAm2901ALUOneBit alu3 = new GUIAm2901ALUOneBit(submodelModifiable);
+ GUIAm2901ALUOneBit alu4 = new GUIAm2901ALUOneBit(submodelModifiable);
+ GUIxor xorOVR = new GUIxor(submodelModifiable);
+
+ WireCrossPoint cpCoutE1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpCoutE2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpCoutE3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpCinE1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpCinE2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpCinE3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpRN1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpRN2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpRN3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpSN1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpSN2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpSN3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpFN1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpFN2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpFN3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpL1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpL2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpL3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpCnplus3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpCnplus4 = new WireCrossPoint(submodelModifiable, 1);
+
+ funcDecode.moveTo(20, 2.5);
+ alu1.moveTo(45, 80);
+ alu2.moveTo(45, 180);
+ alu3.moveTo(45, 280);
+ alu4.moveTo(45, 380);
+ xorOVR.moveTo(95, 400);
+ cpCoutE1.moveCenterTo(25, 95);
+ cpCoutE2.moveCenterTo(25, 195);
+ cpCoutE3.moveCenterTo(25, 295);
+ cpCinE1.moveCenterTo(27.5, 105);
+ cpCinE2.moveCenterTo(27.5, 205);
+ cpCinE3.moveCenterTo(27.5, 305);
+ cpRN1.moveCenterTo(30, 125);
+ cpRN2.moveCenterTo(30, 225);
+ cpRN3.moveCenterTo(30, 325);
+ cpSN1.moveCenterTo(32.5, 145);
+ cpSN2.moveCenterTo(32.5, 245);
+ cpSN3.moveCenterTo(32.5, 345);
+ cpFN1.moveCenterTo(35, 155);
+ cpFN2.moveCenterTo(35, 255);
+ cpFN3.moveCenterTo(35, 355);
+ cpL1.moveCenterTo(37.5, 165);
+ cpL2.moveCenterTo(37.5, 265);
+ cpL3.moveCenterTo(37.5, 365);
+ cpCnplus3.moveCenterTo(85, 375);
+ cpCnplus4.moveCenterTo(85, 385);
+
+ new GUIWire(submodelModifiable, I5, funcDecode.getPin("I5"), new Point(5, 20), new Point(5, 7.5));
+ new GUIWire(submodelModifiable, I4, funcDecode.getPin("I4"), new Point(10, 60), new Point(10, 17.5));
+ new GUIWire(submodelModifiable, I3, funcDecode.getPin("I3"), new Point(15, 100), new Point(15, 27.5));
+ new GUIWire(submodelModifiable, funcDecode.getPin("SBE"), cpCoutE1, new Point(62.5, 37.5), new Point(62.5, 70), new Point(25, 70));
+ new GUIWire(submodelModifiable, cpCoutE1, cpCoutE2, new Point[0]);
+ new GUIWire(submodelModifiable, cpCoutE2, cpCoutE3, new Point[0]);
+ new GUIWire(submodelModifiable, cpCoutE1, alu1.getPin("CoutE"), new Point[0]);
+ new GUIWire(submodelModifiable, cpCoutE2, alu2.getPin("CoutE"), new Point[0]);
+ new GUIWire(submodelModifiable, cpCoutE3, alu3.getPin("CoutE"), new Point[0]);
+ new GUIWire(submodelModifiable, cpCoutE3, alu4.getPin("CoutE"), new Point(25, 395));
+ new GUIWire(submodelModifiable, funcDecode.getPin("CinE"), cpCinE1, new Point(70, 7.5), new Point(70, 77.5), new Point(27.5, 77.5));
+ new GUIWire(submodelModifiable, cpCinE1, cpCinE2, new Point[0]);
+ new GUIWire(submodelModifiable, cpCinE2, cpCinE3, new Point[0]);
+ new GUIWire(submodelModifiable, cpCinE1, alu1.getPin("CinE"), new Point[0]);
+ new GUIWire(submodelModifiable, cpCinE2, alu2.getPin("CinE"), new Point[0]);
+ new GUIWire(submodelModifiable, cpCinE3, alu3.getPin("CinE"), new Point[0]);
+ new GUIWire(submodelModifiable, cpCinE3, alu4.getPin("CinE"), new Point(27.5, 405));
+ new GUIWire(submodelModifiable, funcDecode.getPin("RN"), cpRN1, new Point(57.5, 57.5), new Point(57.5, 65), new Point(30, 65));
+ new GUIWire(submodelModifiable, cpRN1, cpRN2, new Point[0]);
+ new GUIWire(submodelModifiable, cpRN2, cpRN3, new Point[0]);
+ new GUIWire(submodelModifiable, cpRN1, alu1.getPin("RN"), new Point[0]);
+ new GUIWire(submodelModifiable, cpRN2, alu2.getPin("RN"), new Point[0]);
+ new GUIWire(submodelModifiable, cpRN3, alu3.getPin("RN"), new Point[0]);
+ new GUIWire(submodelModifiable, cpRN3, alu4.getPin("RN"), new Point(30, 425));
+ new GUIWire(submodelModifiable, funcDecode.getPin("SN"), cpSN1, new Point(65, 27.5), new Point(65, 72.5), new Point(32.5, 72.5));
+ new GUIWire(submodelModifiable, cpSN1, cpSN2, new Point[0]);
+ new GUIWire(submodelModifiable, cpSN2, cpSN3, new Point[0]);
+ new GUIWire(submodelModifiable, cpSN1, alu1.getPin("SN"), new Point[0]);
+ new GUIWire(submodelModifiable, cpSN2, alu2.getPin("SN"), new Point[0]);
+ new GUIWire(submodelModifiable, cpSN3, alu3.getPin("SN"), new Point[0]);
+ new GUIWire(submodelModifiable, cpSN3, alu4.getPin("SN"), new Point(32.5, 445));
+ new GUIWire(submodelModifiable, funcDecode.getPin("FN"), cpFN1, new Point(60, 47.5), new Point(60, 67.5), new Point(35, 67.5));
+ new GUIWire(submodelModifiable, cpFN1, cpFN2, new Point[0]);
+ new GUIWire(submodelModifiable, cpFN2, cpFN3, new Point[0]);
+ new GUIWire(submodelModifiable, cpFN1, alu1.getPin("FN"), new Point[0]);
+ new GUIWire(submodelModifiable, cpFN2, alu2.getPin("FN"), new Point[0]);
+ new GUIWire(submodelModifiable, cpFN3, alu3.getPin("FN"), new Point[0]);
+ new GUIWire(submodelModifiable, cpFN3, alu4.getPin("FN"), new Point(35, 455));
+ new GUIWire(submodelModifiable, funcDecode.getPin("L"), cpL1, new Point(67.5, 17.5), new Point(67.5, 75), new Point(37.5, 75));
+ new GUIWire(submodelModifiable, cpL1, cpL2, new Point[0]);
+ new GUIWire(submodelModifiable, cpL2, cpL3, new Point[0]);
+ new GUIWire(submodelModifiable, cpL1, alu1.getPin("L"), new Point[0]);
+ new GUIWire(submodelModifiable, cpL2, alu2.getPin("L"), new Point[0]);
+ new GUIWire(submodelModifiable, cpL3, alu3.getPin("L"), new Point[0]);
+ new GUIWire(submodelModifiable, cpL3, alu4.getPin("L"), new Point(37.5, 465));
+ new GUIWire(submodelModifiable, R1, alu1.getPin("R"), new Point(10, 180), new Point(10, 115));
+ new GUIWire(submodelModifiable, R2, alu2.getPin("R"), new Point(10, 220), new Point(10, 215));
+ new GUIWire(submodelModifiable, R3, alu3.getPin("R"), new Point(10, 260), new Point(10, 315));
+ new GUIWire(submodelModifiable, R4, alu4.getPin("R"), new Point(20, 300), new Point(20, 415));
+ new GUIWire(submodelModifiable, S1, alu1.getPin("S"), new Point(15, 340), new Point(15, 135));
+ new GUIWire(submodelModifiable, S2, alu2.getPin("S"), new Point(5, 380), new Point(5, 235));
+ new GUIWire(submodelModifiable, S3, alu3.getPin("S"), new Point(10, 420), new Point(10, 335));
+ new GUIWire(submodelModifiable, S4, alu4.getPin("S"), new Point(10, 460), new Point(10, 435));
+ new GUIWire(submodelModifiable, Cn, alu1.getPin("Cin"), new Point(5, 140), new Point(5, 85));
+ new GUIWire(submodelModifiable, alu1.getPin("Cout"), alu2.getPin("Cin"), new Point(85, 85), new Point(85, 175), new Point(40, 175),
+ new Point(40, 185));
+ new GUIWire(submodelModifiable, alu2.getPin("Cout"), alu3.getPin("Cin"), new Point(85, 185), new Point(85, 275), new Point(40, 275),
+ new Point(40, 285));
+ new GUIWire(submodelModifiable, alu3.getPin("Cout"), cpCnplus3, new Point(85, 285));
+ new GUIWire(submodelModifiable, cpCnplus3, alu4.getPin("Cin"), new Point(40, 375), new Point(40, 385));
+ new GUIWire(submodelModifiable, alu4.getPin("Cout"), cpCnplus4, new Point[0]);
+ new GUIWire(submodelModifiable, alu1.getPin("F"), F1, new Point(90, 95), new Point(90, 20));
+ new GUIWire(submodelModifiable, alu2.getPin("F"), F2, new Point(95, 195), new Point(95, 60));
+ new GUIWire(submodelModifiable, alu3.getPin("F"), F3, new Point(100, 295), new Point(100, 100));
+ new GUIWire(submodelModifiable, alu4.getPin("F"), F4, new Point(105, 395), new Point(105, 140));
+ new GUIWire(submodelModifiable, cpCnplus3, xorOVR.getPin("A"), new Point(90, 375), new Point(90, 405));
+ new GUIWire(submodelModifiable, cpCnplus4, xorOVR.getPin("B"), new Point(85, 415));
+ new GUIWire(submodelModifiable, cpCnplus4, Cnplus4, new Point(130, 385), new Point(130, 180));
+ new GUIWire(submodelModifiable, xorOVR.getPin("Y"), OVR);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901ALUInclDecode.class.getCanonicalName(),
+ (m, p, n) -> new GUIAm2901ALUInclDecode(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIsel2_4;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIsel3_4;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901ALUInclSourceDecodeInclFunctionDecode extends SimpleRectangularSubmodelComponent
+{
+ public GUIAm2901ALUInclSourceDecodeInclFunctionDecode(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIAm2901ALUInclSourceDecodeInclFunctionDecode(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIAm2901ALUInclSourceDecodeInclFunctionDecode", name);
+ setSubmodelScale(.25);
+ setInputPins("I5", "I4", "I3", "I2", "I1", "I0", "Cn", "D1", "D2", "D3", "D4", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "Q1",
+ "Q2", "Q3", "Q4");
+ setOutputPins("F1", "F2", "F3", "F4", "Cn+4", "OVR");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin I5 = getSubmodelPin("I5");
+ Pin I4 = getSubmodelPin("I4");
+ Pin I3 = getSubmodelPin("I3");
+ Pin I2 = getSubmodelPin("I2");
+ Pin I1 = getSubmodelPin("I1");
+ Pin I0 = getSubmodelPin("I0");
+ Pin Cn = getSubmodelPin("Cn");
+ Pin D1 = getSubmodelPin("D1");
+ Pin D2 = getSubmodelPin("D2");
+ Pin D3 = getSubmodelPin("D3");
+ Pin D4 = getSubmodelPin("D4");
+ Pin A1 = getSubmodelPin("A1");
+ Pin A2 = getSubmodelPin("A2");
+ Pin A3 = getSubmodelPin("A3");
+ Pin A4 = getSubmodelPin("A4");
+ Pin B1 = getSubmodelPin("B1");
+ Pin B2 = getSubmodelPin("B2");
+ Pin B3 = getSubmodelPin("B3");
+ Pin B4 = getSubmodelPin("B4");
+ Pin Q1 = getSubmodelPin("Q1");
+ Pin Q2 = getSubmodelPin("Q2");
+ Pin Q3 = getSubmodelPin("Q3");
+ Pin Q4 = getSubmodelPin("Q4");
+ Pin F1 = getSubmodelPin("F1");
+ Pin F2 = getSubmodelPin("F2");
+ Pin F3 = getSubmodelPin("F3");
+ Pin F4 = getSubmodelPin("F4");
+ Pin Cnplus4 = getSubmodelPin("Cn+4");
+ Pin OVR = getSubmodelPin("OVR");
+
+ GUIAm2901SourceDecode sourceDecode = new GUIAm2901SourceDecode(submodelModifiable);
+ GUIsel2_4 selR = new GUIsel2_4(submodelModifiable);
+ GUIsel3_4 selS = new GUIsel3_4(submodelModifiable);
+ GUIAm2901ALUInclDecode alu = new GUIAm2901ALUInclDecode(submodelModifiable);
+
+ WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
+
+ sourceDecode.moveTo(15, 165);
+ selR.moveTo(45, 365);
+ selS.moveTo(45, 575);
+ alu.moveTo(60, 15);
+ cpA1.moveCenterTo(10, 460);
+ cpA2.moveCenterTo(15, 500);
+ cpA3.moveCenterTo(20, 540);
+ cpA4.moveCenterTo(25, 580);
+
+ new GUIWire(submodelModifiable, I5, alu.getPin("I5"), new Point[0]);
+ new GUIWire(submodelModifiable, I4, alu.getPin("I4"), new Point(5, 60), new Point(5, 30));
+ new GUIWire(submodelModifiable, I3, alu.getPin("I3"), new Point(15, 100), new Point(15, 40));
+ new GUIWire(submodelModifiable, I2, sourceDecode.getPin("I2"), new Point(5, 140), new Point(5, 170));
+ new GUIWire(submodelModifiable, I1, sourceDecode.getPin("I1"), new Point[0]);
+ new GUIWire(submodelModifiable, I0, sourceDecode.getPin("I0"), new Point(5, 220), new Point(5, 190));
+ new GUIWire(submodelModifiable, Cn, alu.getPin("Cn"), new Point(10, 260), new Point(10, 50));
+ new GUIWire(submodelModifiable, D1, selR.getPin("A1"), new Point(15, 300), new Point(15, 390));
+ new GUIWire(submodelModifiable, D2, selR.getPin("A2"), new Point(10, 340), new Point(10, 400));
+ new GUIWire(submodelModifiable, D3, selR.getPin("A3"), new Point(5, 380), new Point(5, 410));
+ new GUIWire(submodelModifiable, D4, selR.getPin("A4"), new Point[0]);
+ new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
+ new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
+ new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
+ new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
+ new GUIWire(submodelModifiable, cpA1, selR.getPin("B1"), new Point(10, 430));
+ new GUIWire(submodelModifiable, cpA2, selR.getPin("B2"), new Point(15, 440));
+ new GUIWire(submodelModifiable, cpA3, selR.getPin("B3"), new Point(20, 450));
+ new GUIWire(submodelModifiable, cpA4, selR.getPin("B4"), new Point(25, 460));
+ new GUIWire(submodelModifiable, cpA1, selS.getPin("A1"), new Point(10, 610));
+ new GUIWire(submodelModifiable, cpA2, selS.getPin("A2"), new Point(15, 620));
+ new GUIWire(submodelModifiable, cpA3, selS.getPin("A3"), new Point(20, 630));
+ new GUIWire(submodelModifiable, cpA4, selS.getPin("A4"), new Point(25, 640));
+ new GUIWire(submodelModifiable, B1, selS.getPin("B1"), new Point(5, 620), new Point(5, 650));
+ new GUIWire(submodelModifiable, B2, selS.getPin("B2"), new Point[0]);
+ new GUIWire(submodelModifiable, B3, selS.getPin("B3"), new Point(5, 700), new Point(5, 670));
+ new GUIWire(submodelModifiable, B4, selS.getPin("B4"), new Point(10, 740), new Point(10, 680));
+ new GUIWire(submodelModifiable, Q1, selS.getPin("C1"), new Point(15, 780), new Point(15, 690));
+ new GUIWire(submodelModifiable, Q2, selS.getPin("C2"), new Point(20, 820), new Point(20, 700));
+ new GUIWire(submodelModifiable, Q3, selS.getPin("C3"), new Point(25, 860), new Point(25, 710));
+ new GUIWire(submodelModifiable, Q4, selS.getPin("C4"), new Point(30, 900), new Point(30, 720));
+ new GUIWire(submodelModifiable, sourceDecode.getPin("SQ"), selS.getPin("SC"), new Point(75, 170), new Point(75, 240),
+ new Point(30, 240), new Point(30, 600));
+ new GUIWire(submodelModifiable, sourceDecode.getPin("RA"), selR.getPin("SB"), new Point(70, 180), new Point(70, 235),
+ new Point(20, 235), new Point(20, 380));
+ new GUIWire(submodelModifiable, sourceDecode.getPin("SB"), selS.getPin("SB"), new Point(65, 190), new Point(65, 230),
+ new Point(35, 230), new Point(35, 590));
+ new GUIWire(submodelModifiable, sourceDecode.getPin("SA"), selS.getPin("SA"), new Point(60, 200), new Point(60, 225),
+ new Point(40, 225), new Point(40, 580));
+ new GUIWire(submodelModifiable, sourceDecode.getPin("RD"), selR.getPin("SA"), new Point(55, 210), new Point(55, 220),
+ new Point(25, 220), new Point(25, 370));
+ new GUIWire(submodelModifiable, selR.getPin("Y1"), alu.getPin("R1"), new Point(82.5, 370), new Point(82.5, 162.5),
+ new Point(20, 162.5), new Point(20, 60));
+ new GUIWire(submodelModifiable, selR.getPin("Y2"), alu.getPin("R2"), new Point(85, 380), new Point(85, 160), new Point(22.5, 160),
+ new Point(22.5, 70));
+ new GUIWire(submodelModifiable, selR.getPin("Y3"), alu.getPin("R3"), new Point(87.5, 390), new Point(87.5, 157.5),
+ new Point(25, 157.5), new Point(25, 80));
+ new GUIWire(submodelModifiable, selR.getPin("Y4"), alu.getPin("R4"), new Point(90, 400), new Point(90, 155), new Point(27.5, 155),
+ new Point(27.5, 90));
+ new GUIWire(submodelModifiable, selS.getPin("Y1"), alu.getPin("S1"), new Point(92.5, 580), new Point(92.5, 152.5),
+ new Point(30, 152.5), new Point(30, 100));
+ new GUIWire(submodelModifiable, selS.getPin("Y2"), alu.getPin("S2"), new Point(95, 590), new Point(95, 150), new Point(32.5, 150),
+ new Point(32.5, 110));
+ new GUIWire(submodelModifiable, selS.getPin("Y3"), alu.getPin("S3"), new Point(97.5, 600), new Point(97.5, 147.5),
+ new Point(35, 147.5), new Point(35, 120));
+ new GUIWire(submodelModifiable, selS.getPin("Y4"), alu.getPin("S4"), new Point(100, 610), new Point(100, 145), new Point(37.5, 145),
+ new Point(37.5, 130));
+ new GUIWire(submodelModifiable, alu.getPin("F1"), F1, new Point[0]);
+ new GUIWire(submodelModifiable, alu.getPin("F2"), F2, new Point(135, 30), new Point(135, 60));
+ new GUIWire(submodelModifiable, alu.getPin("F3"), F3, new Point(130, 40), new Point(130, 100));
+ new GUIWire(submodelModifiable, alu.getPin("F4"), F4, new Point(125, 50), new Point(125, 140));
+ new GUIWire(submodelModifiable, alu.getPin("Cn+4"), Cnplus4, new Point(120, 60), new Point(120, 180));
+ new GUIWire(submodelModifiable, alu.getPin("OVR"), OVR, new Point(115, 70), new Point(115, 220));
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901ALUInclSourceDecodeInclFunctionDecode.class.getCanonicalName(),
+ (m, p, n) -> new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIfulladder;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUImux1;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIxor;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901ALUOneBit extends SimpleRectangularSubmodelComponent
+{
+ public GUIAm2901ALUOneBit(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIAm2901ALUOneBit(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIAm2901ALUOneBit", name);
+ setSubmodelScale(.2);
+ setInputPins("Cin", "CoutE", "CinE", "R", "RN", "S", "SN", "FN", "L");
+ setOutputPins("Cout", "F");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin Cin = getSubmodelPin("Cin");
+ Pin CoutE = getSubmodelPin("CoutE");
+ Pin CinE = getSubmodelPin("CinE");
+ Pin R = getSubmodelPin("R");
+ Pin RN = getSubmodelPin("RN");
+ Pin S = getSubmodelPin("S");
+ Pin SN = getSubmodelPin("SN");
+ Pin FN = getSubmodelPin("FN");
+ Pin L = getSubmodelPin("L");
+ Pin Cout = getSubmodelPin("Cout");
+ Pin F = getSubmodelPin("F");
+
+ GUIand Cinand = new GUIand(submodelModifiable);
+ GUIxor Rxor = new GUIxor(submodelModifiable);
+ GUIxor Sxor = new GUIxor(submodelModifiable);
+ GUIfulladder add = new GUIfulladder(submodelModifiable);
+ GUINandGate nand = new GUINandGate(submodelModifiable, 1);
+ GUIand Coutand = new GUIand(submodelModifiable);
+ GUImux1 Fsel = new GUImux1(submodelModifiable);
+ GUIxor Fxor = new GUIxor(submodelModifiable);
+
+ WireCrossPoint cpRXored = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpSXored = new WireCrossPoint(submodelModifiable, 1);
+
+ Cinand.moveTo(10, 20);
+ Rxor.moveTo(10, 190);
+ Sxor.moveTo(10, 290);
+ add.moveTo(60, 20);
+ nand.moveTo(60, 55);
+ Coutand.moveTo(135, 20);
+ Fsel.moveTo(90, 70);
+ Fxor.moveTo(135, 70);
+ cpRXored.moveCenterTo(50, 60);
+ cpSXored.moveCenterTo(55, 70);
+
+ new GUIWire(submodelModifiable, Cin, Cinand.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, CoutE, Coutand.getPin("A"), new Point(5, 75), new Point(5, 10), new Point(130, 10),
+ new Point(130, 25));
+ new GUIWire(submodelModifiable, CinE, Cinand.getPin("B"), new Point(7.5, 125), new Point(7.5, 35));
+ new GUIWire(submodelModifiable, R, Rxor.getPin("A"));
+ new GUIWire(submodelModifiable, RN, Rxor.getPin("B"));
+ new GUIWire(submodelModifiable, S, Sxor.getPin("A"));
+ new GUIWire(submodelModifiable, SN, Sxor.getPin("B"));
+ new GUIWire(submodelModifiable, FN, Fxor.getPin("B"), new Point(130, 375), new Point(130, 85));
+ new GUIWire(submodelModifiable, L, Fsel.getPin("S0"), new Point(87.5, 425), new Point(87.5, 75));
+ new GUIWire(submodelModifiable, Cinand.getPin("Y"), add.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, Rxor.getPin("Y"), cpRXored, new Point(50, 195));
+ new GUIWire(submodelModifiable, cpRXored, add.getPin("B"), new Point(50, 35));
+ new GUIWire(submodelModifiable, cpRXored, nand.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, Sxor.getPin("Y"), cpSXored, new Point(55, 295));
+ new GUIWire(submodelModifiable, cpSXored, add.getPin("C"), new Point(55, 45));
+ new GUIWire(submodelModifiable, cpSXored, nand.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, add.getPin("Y"), Fsel.getPin("I0"), new Point(100, 25), new Point(100, 65), new Point(85, 65),
+ new Point(85, 85));
+ new GUIWire(submodelModifiable, add.getPin("Z"), Coutand.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, nand.getPin("Y"), Fsel.getPin("I1"), new Point(82.5, 65), new Point(82.5, 95));
+ new GUIWire(submodelModifiable, Fsel.getPin("Y"), Fxor.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, Coutand.getPin("Y"), Cout, new Point[0]);
+ new GUIWire(submodelModifiable, Fxor.getPin("Y"), F, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901ALUOneBit.class.getCanonicalName(),
+ (m, p, n) -> new GUIAm2901ALUOneBit(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901DestDecode extends SimpleRectangularSubmodelComponent
+{
+ public GUIAm2901DestDecode(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIAm2901DestDecode(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIAm2901DestDecode", name);
+ setSubmodelScale(.25);
+ setInputPins("I8", "I7", "I6");
+ setOutputPins("NSH", "RSH", "RAMWE", "YF", "LSH", "QWE");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin I8 = getSubmodelPin("I8");
+ Pin I7 = getSubmodelPin("I7");
+ Pin I6 = getSubmodelPin("I6");
+ Pin NSH = getSubmodelPin("NSH");
+ Pin RSH = getSubmodelPin("RSH");
+ Pin RAMWE = getSubmodelPin("RAMWE");
+ Pin YF = getSubmodelPin("YF");
+ Pin LSH = getSubmodelPin("LSH");
+ Pin QWE = getSubmodelPin("QWE");
+
+ GUINandGate notI8 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notI7 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandI8I7 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notI6 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandRSH = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandRAMWE = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandI7NotI8 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandLSH = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notRSH = new GUINandGate(submodelModifiable, 1);
+ GUINandGate andI7NotI8 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandQWE = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nandYF = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notQWE = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cpI81 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI82 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI83 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI71 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI72 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI73 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI6 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI7 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI81 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI82 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNandI8I7 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotRSH = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNandI7NotI81 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNandI7NotI82 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI6 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNandQWE = new WireCrossPoint(submodelModifiable, 1);
+
+ notI8.moveTo(15, 10);
+ notI7.moveTo(15, 50);
+ nandI8I7.moveTo(15, 90);
+ notI6.moveTo(15, 150);
+ nandRSH.moveTo(50, 10);
+ nandRAMWE.moveTo(50, 50);
+ nandI7NotI8.moveTo(50, 90);
+ nandLSH.moveTo(50, 130);
+ notRSH.moveTo(80, 10);
+ andI7NotI8.moveTo(80, 90);
+ nandQWE.moveTo(80, 145);
+ nandYF.moveTo(110, 105);
+ notQWE.moveTo(115, 210);
+ cpI81.moveCenterTo(5, 20);
+ cpI82.moveCenterTo(5, 15);
+ cpI83.moveCenterTo(5, 25);
+ cpI71.moveCenterTo(10, 60);
+ cpI72.moveCenterTo(10, 65);
+ cpI73.moveCenterTo(10, 105);
+ cpI6.moveCenterTo(5, 155);
+ cpNotI7.moveCenterTo(40, 60);
+ cpNotI81.moveCenterTo(45, 20);
+ cpNotI82.moveCenterTo(45, 55);
+ cpNandI8I7.moveCenterTo(40, 135);
+ cpNotRSH.moveCenterTo(75, 20);
+ cpNandI7NotI81.moveCenterTo(75, 100);
+ cpNandI7NotI82.moveCenterTo(75, 105);
+ cpNotI6.moveCenterTo(75, 160);
+ cpNandQWE.moveCenterTo(110, 215);
+
+ new GUIWire(submodelModifiable, I8, cpI81, new Point[0]);
+ new GUIWire(submodelModifiable, cpI81, cpI82, new Point[0]);
+ new GUIWire(submodelModifiable, cpI81, cpI83, new Point[0]);
+ new GUIWire(submodelModifiable, cpI82, notI8.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, cpI83, notI8.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, I7, cpI71, new Point[0]);
+ new GUIWire(submodelModifiable, cpI71, notI7.getPin("A"), new Point(10, 55));
+ new GUIWire(submodelModifiable, cpI71, cpI72, new Point[0]);
+ new GUIWire(submodelModifiable, cpI72, notI7.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpI72, cpI73, new Point[0]);
+ new GUIWire(submodelModifiable, cpI73, nandI8I7.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpI83, nandI8I7.getPin("A"), new Point(5, 95));
+ new GUIWire(submodelModifiable, I6, cpI6, new Point(5, 100));
+ new GUIWire(submodelModifiable, cpI6, notI6.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, cpI6, notI6.getPin("B"), new Point(5, 165));
+ new GUIWire(submodelModifiable, cpI82, nandRSH.getPin("A"), new Point(5, 5), new Point(40, 5), new Point(40, 15));
+ new GUIWire(submodelModifiable, notI7.getPin("Y"), cpNotI7, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI7, nandRSH.getPin("B"), new Point(40, 25));
+ new GUIWire(submodelModifiable, cpNotI7, nandRAMWE.getPin("B"), new Point(40, 65));
+ new GUIWire(submodelModifiable, notI8.getPin("Y"), cpNotI81, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI81, NSH, new Point(45, 5), new Point(135, 5), new Point(135, 20));
+ new GUIWire(submodelModifiable, cpNotI81, cpNotI82, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI82, nandRAMWE.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI82, nandI7NotI8.getPin("A"), new Point(45, 95));
+ new GUIWire(submodelModifiable, cpI73, nandI7NotI8.getPin("B"), new Point(10, 115), new Point(45, 115), new Point(45, 105));
+ new GUIWire(submodelModifiable, nandI8I7.getPin("Y"), cpNandI8I7, new Point(40, 100));
+ new GUIWire(submodelModifiable, cpNandI8I7, nandLSH.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, cpNandI8I7, nandLSH.getPin("B"), new Point(40, 145));
+ new GUIWire(submodelModifiable, nandRSH.getPin("Y"), cpNotRSH, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotRSH, notRSH.getPin("A"), new Point(75, 15));
+ new GUIWire(submodelModifiable, cpNotRSH, notRSH.getPin("B"), new Point(75, 25));
+ new GUIWire(submodelModifiable, nandRAMWE.getPin("Y"), RAMWE, new Point(125, 60), new Point(125, 100));
+ new GUIWire(submodelModifiable, nandI7NotI8.getPin("Y"), cpNandI7NotI81, new Point[0]);
+ new GUIWire(submodelModifiable, cpNandI7NotI81, andI7NotI8.getPin("A"), new Point(75, 95));
+ new GUIWire(submodelModifiable, cpNandI7NotI81, cpNandI7NotI82, new Point[0]);
+ new GUIWire(submodelModifiable, cpNandI7NotI82, andI7NotI8.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, nandLSH.getPin("Y"), LSH, new Point(125, 140), new Point(125, 180));
+ new GUIWire(submodelModifiable, cpNandI7NotI82, nandQWE.getPin("A"), new Point(75, 150));
+ new GUIWire(submodelModifiable, notI6.getPin("Y"), cpNotI6, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI6, nandQWE.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, notRSH.getPin("Y"), RSH, new Point(130, 20), new Point(130, 60));
+ new GUIWire(submodelModifiable, andI7NotI8.getPin("Y"), nandYF.getPin("A"));
+ new GUIWire(submodelModifiable, cpNotI6, nandYF.getPin("B"), new Point(75, 170), new Point(105, 170), new Point(105, 120));
+ new GUIWire(submodelModifiable, nandQWE.getPin("Y"), cpNandQWE, new Point(110, 155));
+ new GUIWire(submodelModifiable, cpNandQWE, notQWE.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, cpNandQWE, notQWE.getPin("B"), new Point(110, 225));
+ new GUIWire(submodelModifiable, nandYF.getPin("Y"), YF);
+ new GUIWire(submodelModifiable, notQWE.getPin("Y"), QWE, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901DestDecode.class.getCanonicalName(),
+ (m, p, n) -> new GUIAm2901DestDecode(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIand;
+import net.mograsim.logic.model.model.components.mi.nandbased.GUIdff;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901QReg extends SimpleRectangularSubmodelComponent
+{
+ private GUIdff dff1;
+ private GUIdff dff2;
+ private GUIdff dff3;
+ private GUIdff dff4;
+
+ public GUIAm2901QReg(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIAm2901QReg(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "GUIAm2901QReg", name);
+ setSubmodelScale(.4);
+ setInputPins("C", "WE", "D1", "D2", "D3", "D4");
+ setOutputPins("Q1", "Q2", "Q3", "Q4");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin C = getSubmodelPin("C");
+ Pin WE = getSubmodelPin("WE");
+ Pin D1 = getSubmodelPin("D1");
+ Pin D2 = getSubmodelPin("D2");
+ Pin D3 = getSubmodelPin("D3");
+ Pin D4 = getSubmodelPin("D4");
+ Pin Q1 = getSubmodelPin("Q1");
+ Pin Q2 = getSubmodelPin("Q2");
+ Pin Q3 = getSubmodelPin("Q3");
+ Pin Q4 = getSubmodelPin("Q4");
+
+ GUIand and = new GUIand(submodelModifiable);
+ dff1 = new GUIdff(submodelModifiable);
+ dff2 = new GUIdff(submodelModifiable);
+ dff3 = new GUIdff(submodelModifiable);
+ dff4 = new GUIdff(submodelModifiable);
+
+ WireCrossPoint cpC1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpC2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpC3 = new WireCrossPoint(submodelModifiable, 1);
+
+ and.moveTo(5, 15);
+ dff1.moveTo(50, 7.5);
+ dff2.moveTo(50, 32.5);
+ dff3.moveTo(50, 57.5);
+ dff4.moveTo(50, 82.5);
+ cpC1.moveCenterTo(42.5, 20);
+ cpC2.moveCenterTo(42.5, 37.5);
+ cpC3.moveCenterTo(42.5, 62.5);
+
+ new GUIWire(submodelModifiable, C, and.getPin("A"));
+ new GUIWire(submodelModifiable, WE, and.getPin("B"));
+ new GUIWire(submodelModifiable, and.getPin("Y"), cpC1, new Point[0]);
+ new GUIWire(submodelModifiable, cpC1, dff1.getPin("C"), new Point(42.5, 12.5));
+ new GUIWire(submodelModifiable, cpC1, cpC2, new Point[0]);
+ new GUIWire(submodelModifiable, cpC2, dff2.getPin("C"), new Point[0]);
+ new GUIWire(submodelModifiable, cpC2, cpC3, new Point[0]);
+ new GUIWire(submodelModifiable, cpC3, dff3.getPin("C"), new Point[0]);
+ new GUIWire(submodelModifiable, cpC3, dff4.getPin("C"), new Point(42.5, 87.5));
+ new GUIWire(submodelModifiable, D1, dff1.getPin("D"), new Point(17.5, 62.5), new Point(17.5, 42.5), new Point(45, 42.5),
+ new Point(45, 22.5));
+ new GUIWire(submodelModifiable, D2, dff2.getPin("D"), new Point(22.5, 87.5), new Point(22.5, 47.5));
+ new GUIWire(submodelModifiable, D3, dff3.getPin("D"), new Point(27.5, 112.5), new Point(27.5, 72.5));
+ new GUIWire(submodelModifiable, D4, dff4.getPin("D"), new Point(32.5, 137.5), new Point(32.5, 97.5));
+ new GUIWire(submodelModifiable, dff1.getPin("Q"), Q1, new Point[0]);
+ new GUIWire(submodelModifiable, dff2.getPin("Q"), Q2, new Point[0]);
+ new GUIWire(submodelModifiable, dff3.getPin("Q"), Q3, new Point[0]);
+ new GUIWire(submodelModifiable, dff4.getPin("Q"), Q4, new Point[0]);
+
+ addAtomicHighLevelStateID("q1");
+ addAtomicHighLevelStateID("q2");
+ addAtomicHighLevelStateID("q3");
+ addAtomicHighLevelStateID("q4");
+ addAtomicHighLevelStateID("q");
+ }
+
+ @Override
+ public void setAtomicHighLevelState(String stateID, Object newState)
+ {
+ switch (stateID)
+ {
+ case "q1":
+ dff1.setHighLevelState("q", newState);
+ break;
+ case "q2":
+ dff2.setHighLevelState("q", newState);
+ break;
+ case "q3":
+ dff3.setHighLevelState("q", newState);
+ break;
+ case "q4":
+ dff4.setHighLevelState("q", newState);
+ break;
+ case "q":
+ BitVector newStateCasted = (BitVector) newState;
+ setHighLevelState("q1", newStateCasted.getLSBit(0));
+ setHighLevelState("q2", newStateCasted.getLSBit(1));
+ setHighLevelState("q3", newStateCasted.getLSBit(2));
+ setHighLevelState("q4", newStateCasted.getLSBit(3));
+ break;
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ @Override
+ public Object getAtomicHighLevelState(String stateID)
+ {
+ switch (stateID)
+ {
+ case "q1":
+ return dff1.getHighLevelState("q");
+ case "q2":
+ return dff2.getHighLevelState("q");
+ case "q3":
+ return dff3.getHighLevelState("q");
+ case "q4":
+ return dff4.getHighLevelState("q");
+ case "q":
+ Bit q1 = (Bit) getHighLevelState("q1");
+ Bit q2 = (Bit) getHighLevelState("q2");
+ Bit q3 = (Bit) getHighLevelState("q3");
+ Bit q4 = (Bit) getHighLevelState("q4");
+ return BitVector.of(q4, q3, q2, q1);
+ default:
+ // should not happen because we tell SubmodelComponent to only allow these state IDs.
+ throw new IllegalStateException("Illegal atomic state ID: " + stateID);
+ }
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901QReg.class.getCanonicalName(), (m, p, n) -> new GUIAm2901QReg(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.mi.nandbased.am2901;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUINandGate;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAm2901SourceDecode extends SimpleRectangularSubmodelComponent
+{
+ public GUIAm2901SourceDecode(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIAm2901SourceDecode(ViewModelModifiable model, String name)
+ {
+ super(model, 1, "Am2901SourceDecode", name);
+ setSubmodelScale(.25);
+ setInputPins("I2", "I1", "I0");
+ setOutputPins("SQ", "RA", "SB", "SA", "RD");
+ initSubmodelComponents();
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ private void initSubmodelComponents()
+ {
+ Pin I2 = getSubmodelPin("I2");
+ Pin I1 = getSubmodelPin("I1");
+ Pin I0 = getSubmodelPin("I0");
+ Pin SQ = getSubmodelPin("SQ");
+ Pin RA = getSubmodelPin("RA");
+ Pin SB = getSubmodelPin("SB");
+ Pin SA = getSubmodelPin("SA");
+ Pin RD = getSubmodelPin("RD");
+
+ GUINandGate notI2 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notI1 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate notI0 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand21 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand22 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand23 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand24 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand25 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand31 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand32 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand33 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand34 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand35 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand41 = new GUINandGate(submodelModifiable, 1);
+ GUINandGate nand42 = new GUINandGate(submodelModifiable, 1);
+
+ WireCrossPoint cpI21 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI22 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI23 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI1 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI01 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpI02 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI2 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI11 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI12 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI13 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNotI0 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNand22 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNand23 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNand24 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNand31 = new WireCrossPoint(submodelModifiable, 1);
+ WireCrossPoint cpNand35 = new WireCrossPoint(submodelModifiable, 1);
+
+ notI2.moveTo(10, 10);
+ notI1.moveTo(10, 50);
+ notI0.moveTo(10, 90);
+ nand21.moveTo(40, 10);
+ nand22.moveTo(40, 50);
+ nand23.moveTo(40, 90);
+ nand24.moveTo(40, 130);
+ nand25.moveTo(40, 170);
+ nand31.moveTo(70, 10);
+ nand32.moveTo(70, 50);
+ nand33.moveTo(70, 90);
+ nand34.moveTo(70, 130);
+ nand35.moveTo(70, 170);
+ nand41.moveTo(100, 10);
+ nand42.moveTo(100, 170);
+ cpI21.moveCenterTo(5, 20);
+ cpI22.moveCenterTo(7.5, 20);
+ cpI23.moveCenterTo(5, 145);
+ cpI1.moveCenterTo(7.5, 60);
+ cpI01.moveCenterTo(7.5, 100);
+ cpI02.moveCenterTo(7.5, 105);
+ cpNotI2.moveCenterTo(32.5, 55);
+ cpNotI11.moveCenterTo(35, 60);
+ cpNotI12.moveCenterTo(35, 65);
+ cpNotI13.moveCenterTo(35, 135);
+ cpNotI0.moveCenterTo(37.5, 100);
+ cpNand22.moveCenterTo(65, 60);
+ cpNand23.moveCenterTo(65, 100);
+ cpNand24.moveCenterTo(65, 140);
+ cpNand31.moveCenterTo(95, 20);
+ cpNand35.moveCenterTo(95, 180);
+
+ new GUIWire(submodelModifiable, I2, cpI21, new Point[0]);
+ new GUIWire(submodelModifiable, cpI21, nand21.getPin("A"), new Point(5, 5), new Point(35, 5), new Point(35, 15));
+ new GUIWire(submodelModifiable, cpI21, cpI22, new Point[0]);
+ new GUIWire(submodelModifiable, cpI22, notI2.getPin("A"), new Point(7.5, 15));
+ new GUIWire(submodelModifiable, cpI22, notI2.getPin("B"), new Point(7.5, 25));
+ new GUIWire(submodelModifiable, cpI21, cpI23, new Point[0]);
+ new GUIWire(submodelModifiable, cpI23, nand24.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpI23, nand35.getPin("B"), new Point(5, 195), new Point(65, 195), new Point(65, 185));
+ new GUIWire(submodelModifiable, I1, cpI1, new Point[0]);
+ new GUIWire(submodelModifiable, cpI1, notI1.getPin("A"), new Point(7.5, 55));
+ new GUIWire(submodelModifiable, cpI1, notI1.getPin("B"), new Point(7.5, 65));
+ new GUIWire(submodelModifiable, I0, cpI01, new Point[0]);
+ new GUIWire(submodelModifiable, cpI01, notI0.getPin("A"), new Point(7.5, 95));
+ new GUIWire(submodelModifiable, cpI01, cpI02, new Point[0]);
+ new GUIWire(submodelModifiable, cpI02, notI0.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpI02, nand23.getPin("B"), new Point(7.5, 112.5), new Point(32.5, 112.5), new Point(32.5, 105));
+ new GUIWire(submodelModifiable, notI2.getPin("Y"), cpNotI2, new Point(32.5, 20));
+ new GUIWire(submodelModifiable, cpNotI2, nand22.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI2, nand23.getPin("A"), new Point(32.5, 95));
+ new GUIWire(submodelModifiable, notI1.getPin("Y"), cpNotI11, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI11, nand21.getPin("B"), new Point(35, 25));
+ new GUIWire(submodelModifiable, cpNotI11, cpNotI12, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI12, nand22.getPin("B"), new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI12, cpNotI13, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI13, nand24.getPin("A"), new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI13, nand25.getPin("A"), new Point(35, 175));
+ new GUIWire(submodelModifiable, notI0.getPin("Y"), cpNotI0, new Point[0]);
+ new GUIWire(submodelModifiable, cpNotI0, nand31.getPin("B"), new Point(37.5, 35), new Point(65, 35), new Point(65, 25));
+ new GUIWire(submodelModifiable, cpNotI0, nand25.getPin("B"), new Point(37.5, 185));
+ new GUIWire(submodelModifiable, nand21.getPin("Y"), nand31.getPin("A"));
+ new GUIWire(submodelModifiable, nand22.getPin("Y"), cpNand22, new Point[0]);
+ new GUIWire(submodelModifiable, cpNand22, nand32.getPin("A"), new Point(65, 55));
+ new GUIWire(submodelModifiable, cpNand22, nand32.getPin("B"), new Point(65, 65));
+ new GUIWire(submodelModifiable, nand23.getPin("Y"), cpNand23, new Point[0]);
+ new GUIWire(submodelModifiable, cpNand23, nand33.getPin("A"), new Point(65, 95));
+ new GUIWire(submodelModifiable, cpNand23, nand33.getPin("B"), new Point(65, 105));
+ new GUIWire(submodelModifiable, nand24.getPin("Y"), cpNand24, new Point[0]);
+ new GUIWire(submodelModifiable, cpNand24, nand34.getPin("A"), new Point(65, 135));
+ new GUIWire(submodelModifiable, cpNand24, nand34.getPin("B"), new Point(65, 145));
+ new GUIWire(submodelModifiable, nand25.getPin("Y"), nand35.getPin("A"));
+ new GUIWire(submodelModifiable, nand31.getPin("Y"), cpNand31, new Point[0]);
+ new GUIWire(submodelModifiable, cpNand31, nand41.getPin("A"), new Point(95, 15));
+ new GUIWire(submodelModifiable, cpNand31, nand41.getPin("B"), new Point(95, 25));
+ new GUIWire(submodelModifiable, nand32.getPin("Y"), RA, new Point[0]);
+ new GUIWire(submodelModifiable, nand33.getPin("Y"), SB, new Point[0]);
+ new GUIWire(submodelModifiable, nand34.getPin("Y"), SA, new Point[0]);
+ new GUIWire(submodelModifiable, nand35.getPin("Y"), cpNand35, new Point[0]);
+ new GUIWire(submodelModifiable, cpNand35, nand42.getPin("A"), new Point(95, 175));
+ new GUIWire(submodelModifiable, cpNand35, nand42.getPin("B"), new Point(95, 185));
+ new GUIWire(submodelModifiable, nand41.getPin("Y"), SQ, new Point[0]);
+ new GUIWire(submodelModifiable, nand42.getPin("Y"), RD, new Point[0]);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(GUIAm2901SourceDecode.class.getCanonicalName(),
+ (m, p, n) -> new GUIAm2901SourceDecode(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.ui.am2900;
+
+import static net.mograsim.logic.ui.am2900.TestUtil.*;
+import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Dest.*;
+import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Func.*;
+import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Src.*;
+import static net.mograsim.logic.ui.am2900.TestableAm2901.Register.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.awt.Point;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.EnumSource;
+
+import net.mograsim.logic.ui.am2900.TestableAm2901.Register;
+
+@DisplayName("Am2901 Tests")
+@TestMethodOrder(OrderAnnotation.class)
+public class Am2901Test
+{
+ private TestableAm2901 am2901;
+
+ @BeforeEach
+ void initialize()
+ {
+ createAndSetup();
+ setInputsToZero();
+ }
+
+ void createAndSetup()
+ {
+ am2901 = new TestableAm2901Impl();
+ am2901.setup();
+ }
+
+ void setRegistersToZero()
+ {
+ setInputsToZero();
+ for (Register r : Register.values())
+ {
+ setRegisterToZero(r);
+ }
+ }
+
+ void setRegisterToZero(Register r)
+ {
+ am2901.setD("0000");
+ am2901.setSrc(DZ);
+ am2901.setFunc(AND);
+ setRegOutput(r);
+
+ am2901.assertFullCycleSuccess();
+ }
+
+ void setRegOutput(Register r)
+ {
+ if (r == Q)
+ {
+ am2901.setDest(QREG);
+ } else
+ {
+ am2901.setReg_B(r.toBitString());
+ am2901.setDest(RAMF);
+ }
+ }
+
+ void setInputsToZero()
+ {
+ am2901.setCarryIn("0");
+ am2901.setQ_0("0");
+ am2901.setQ_3("0");
+ am2901.setRAM_0("0");
+ am2901.setRAM_3("0");
+ am2901.setReg_A("0000");
+ am2901.setReg_B("0000");
+ am2901.setD("0000");
+ am2901.setSrc(AB);
+ am2901.setFunc(ADD);
+ am2901.setDest(QREG);
+// am2901.setNotOutEnable("0"); TODO
+ am2901.clockOn(true);
+ am2901.assertRunSuccess();
+ }
+
+ @ParameterizedTest(name = "{0}")
+ @Order(1)
+ @DisplayName("Direct / high level access")
+ @EnumSource(Register.class)
+ void testDirectAccess(Register r)
+ {
+ assertEquals("UUUU", am2901.getDirectly(r));
+
+ am2901.setDirectly(r, "1011");
+
+ assertEquals("1011", am2901.getDirectly(r));
+ }
+
+ @ParameterizedTest(name = "{0}")
+ @Order(2)
+ @DisplayName("Setting each register to 0")
+ @EnumSource(Register.class)
+ void testSetToZero(Register r)
+ {
+ assertEquals("UUUU", am2901.getDirectly(r));
+
+ setRegisterToZero(r);
+
+ assertEquals("0000", am2901.getDirectly(r));
+ assertEquals("0000", am2901.getY());
+ assertEquals("0", am2901.getCarryOut());
+ assertEquals("0", am2901.getOverflow());
+ assertEquals("0", am2901.getSign());
+ assertEquals("1", am2901.getZero());
+ }
+
+ @Test
+ @Order(3)
+ @DisplayName("Setting all registers to 0")
+ void testSetAllToZero()
+ {
+ setRegistersToZero();
+
+ assertEquals("0000", am2901.getY());
+ assertEquals("0", am2901.getCarryOut());
+ assertEquals("0", am2901.getOverflow());
+ assertEquals("0", am2901.getSign());
+ assertEquals("1", am2901.getZero());
+ assertEquals("0", am2901.getQ_0());
+ assertEquals("0", am2901.getQ_3());
+ assertEquals("0", am2901.getRAM_0());
+ assertEquals("0", am2901.getRAM_3());
+
+ assertAll("register values", Register.stream().map(r -> () ->
+ {
+ assertEquals("0000", am2901.getDirectly(r), r.name());
+ }));
+ }
+
+ @Test
+ @Order(4)
+ @DisplayName("ADD operation")
+ void testADD()
+ {
+ am2901.setSrc(DA);
+ am2901.setFunc(ADD);
+ am2901.setDest(NOP);
+ am2901.setReg_A(r0.toBitString());
+
+ assertAll(getAll4BitPairs().map(xy -> () ->
+ {
+ am2901.setDirectly(r0, to4bitBin(xy.x));
+ am2901.setD(to4bitBin(xy.y));
+
+ am2901.assertFullCycleSuccess();
+
+ int res32Bit = xy.x + xy.y;
+ int res4Bit = res32Bit & 0b1111;
+ int res32Bit_sgn = signed4ToSigned32(xy.x) + signed4ToSigned32(xy.y);
+ int res4Bit_sgn = signed4ToSigned32(res32Bit_sgn);
+
+ assertAll("Result of " + xy.x + " + " + xy.y + " = " + res32Bit,
+ () -> assertEquals(to4bitBin(res32Bit), am2901.getY(), " Y"),
+ () -> assertEquals(to1bitBin(res4Bit == 0), am2901.getZero(), " F=0"),
+ () -> assertEquals(to1bitBin(res4Bit & 0b1000), am2901.getSign(), " F3"),
+ () -> assertEquals(to1bitBin(res32Bit > 15), am2901.getCarryOut(), " Cn+4"),
+ () -> assertEquals(to1bitBin(res4Bit_sgn != res32Bit_sgn), am2901.getOverflow(), " OVR"));
+ }));
+ }
+
+ @Test
+ @Order(4)
+ @DisplayName("AND operation")
+ void testAND()
+ {
+ am2901.setSrc(DA);
+ am2901.setFunc(AND);
+ am2901.setDest(NOP);
+ am2901.setReg_A(r0.toBitString());
+
+ assertAll(getAll4BitPairs().map(xy -> () ->
+ {
+ am2901.setDirectly(r0, to4bitBin(xy.x));
+ am2901.setD(to4bitBin(xy.y));
+
+ am2901.assertFullCycleSuccess();
+
+ int res32Bit = xy.x & xy.y;
+
+ assertAll("Result of " + xy.x + " & " + xy.y + " = " + res32Bit,
+ () -> assertEquals(to4bitBin(res32Bit), am2901.getY(), " Y"),
+ () -> assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), " F=0"),
+ () -> assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), " F3")
+// () -> assertEquals(to1bitBin(res32Bit), am2901.getCarryOut(), " Cn+4"), // TODO
+// () -> assertEquals(to1bitBin(res32Bit), am2901.getOverflow(), " OVR") // TODO
+ );
+ }));
+ }
+
+ @Test
+ @Order(4)
+ @DisplayName("OR operation")
+ void testOR()
+ {
+ am2901.setSrc(DA);
+ am2901.setFunc(OR);
+ am2901.setDest(NOP);
+ am2901.setReg_A(r0.toBitString());
+
+ assertAll(getAll4BitPairs().map(xy -> () ->
+ {
+ am2901.setDirectly(r0, to4bitBin(xy.x));
+ am2901.setD(to4bitBin(xy.y));
+
+ am2901.assertFullCycleSuccess();
+
+ int res32Bit = xy.x | xy.y;
+
+ assertAll("Result of " + xy.x + " | " + xy.y + " = " + res32Bit,
+ () -> assertEquals(to4bitBin(res32Bit), am2901.getY(), " Y"),
+ () -> assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), " F=0"),
+ () -> assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), " F3")
+// () -> assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getCarryOut(), " Cn+4"), // TODO
+// () -> assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getOverflow(), " OVR") // TODO
+ );
+ }));
+ }
+
+ @Test
+ @Order(4)
+ @DisplayName("XOR operation")
+ void testXOR()
+ {
+ am2901.setSrc(DA);
+ am2901.setFunc(EXOR);
+ am2901.setDest(NOP);
+ am2901.setReg_A(r0.toBitString());
+
+ assertAll(getAll4BitPairs().map(xy -> () ->
+ {
+ am2901.setDirectly(r0, to4bitBin(xy.x));
+ am2901.setD(to4bitBin(xy.y));
+
+ am2901.assertFullCycleSuccess();
+
+ int res32Bit = xy.x ^ xy.y;
+
+ assertAll("Result of " + xy.x + " ^ " + xy.y + " = " + res32Bit,
+ () -> assertEquals(to4bitBin(res32Bit), am2901.getY(), " Y"),
+ () -> assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), " F=0"),
+ () -> assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), " F3"));
+ }));
+ }
+
+ @Test
+ @Order(4)
+ @DisplayName("SUB operation")
+ void testSUB()
+ {
+ am2901.setSrc(DA);
+ am2901.setCarryIn("1");
+ am2901.setFunc(SUBR);
+ am2901.setDest(NOP);
+ am2901.setReg_A(r0.toBitString());
+
+ assertAll(getAll4BitPairs().map(xy -> () ->
+ {
+ am2901.setDirectly(r0, to4bitBin(xy.x));
+ am2901.setD(to4bitBin(xy.y));
+
+ am2901.assertFullCycleSuccess();
+
+ int res32Bit = xy.x - xy.y;
+ int res4Bit = res32Bit & 0b1111;
+ int res32Bit_sgn = signed4ToSigned32(xy.x) - signed4ToSigned32(xy.y);
+ int res4Bit_sgn = signed4ToSigned32(res32Bit_sgn);
+
+ assertAll("Result of " + xy.x + " - " + xy.y + " = " + res32Bit,
+ () -> assertEquals(to4bitBin(res32Bit), am2901.getY(), " Y"),
+ () -> assertEquals(to1bitBin(res4Bit == 0), am2901.getZero(), " F=0"),
+ () -> assertEquals(to1bitBin(res4Bit & 0b1000), am2901.getSign(), " F3"),
+ () -> assertEquals(to1bitBin(xy.x >= xy.y), am2901.getCarryOut(), " Cn+4"),
+ () -> assertEquals(to1bitBin(res4Bit_sgn != res32Bit_sgn), am2901.getOverflow(), " OVR"));
+ }));
+ }
+
+ static Stream<Point> getAll4BitPairs()
+ {
+ return IntStream.range(0, 16).boxed().flatMap(x -> IntStream.range(0, 16).mapToObj(y -> new Point(x, y)));
+ }
+}
--- /dev/null
+package net.mograsim.logic.ui.am2900;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.atomic.GUIAndGate;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.atomic.GUINotGate;
+import net.mograsim.logic.model.model.components.atomic.TextComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.logic.model.util.ModellingTool;
+
+public class Am2901Testbench
+{
+ public static void main(String[] args)
+ {
+ SimpleLogicUIStandalone.executeVisualisation(Am2901Testbench::createTestbench);
+ }
+
+ public static void createTestbench(ViewModelModifiable model)
+ {
+ GUIComponent comp = IndirectGUIComponentCreator.createComponent(model, "GUIAm2901");
+ ModellingTool tool = ModellingTool.createFor(model);
+
+ comp.moveTo(240, 0);
+
+ GUIManualSwitch enable = new GUIManualSwitch(model);
+ WireCrossPoint wcp0 = new WireCrossPoint(model, 1);
+ GUINotGate not1 = new GUINotGate(model, 1);
+ GUINotGate not2 = new GUINotGate(model, 1);
+ GUINotGate not3 = new GUINotGate(model, 1);
+ GUIAndGate and = new GUIAndGate(model, 1);
+ tool.connect(wcp0, enable, "");
+ tool.connect(wcp0, and, "A");
+ tool.connect(wcp0, not1, "A");
+ tool.connect(not1, not2, "Y", "A");
+ tool.connect(not2, not3, "Y", "A");
+ tool.connect(not3, and, "Y", "B");
+ enable.moveTo(20, -32.5);
+ wcp0.moveTo(35, -26);
+ not1.moveTo(50, -20);
+ not2.moveTo(80, -20);
+ not3.moveTo(110, -20);
+ and.moveTo(135, -30);
+ Pin last = and.getPin("Y");
+
+ // guess which pins are outputs and which are inputs
+ // TODO this code exists three times... but it seems too "hacky" to put it in a helper class
+ List<String> inputPinNames = new ArrayList<>();
+ List<String> outputPinNames = new ArrayList<>();
+ for (Pin p : comp.getPins().values())
+ if (p.getRelX() == 0)
+ inputPinNames.add(p.name);
+ else
+ outputPinNames.add(p.name);
+
+ for (int i = 0; i < inputPinNames.size(); i++)
+ {
+ double x = 55 + 70 * (i % 2);
+ double y = 10 * i;
+
+ WireCrossPoint wcp = new WireCrossPoint(model, 1);
+ GUIComponent d_ff = IndirectGUIComponentCreator.createComponent(model, "GUIdff");
+ GUIManualSwitch sw = new GUIManualSwitch(model);
+
+ tool.connect(last, wcp);
+ tool.connect(wcp, d_ff, "C");
+ tool.connect(sw, d_ff, "", "D");
+ tool.connect(d_ff, comp, "Q", inputPinNames.get(i));
+ last = wcp.getPin();
+
+ TextComponent label = new TextComponent(model, inputPinNames.get(i));
+
+ sw.moveTo(x, y + 7.5);
+ wcp.moveTo(160, y);
+ d_ff.moveTo(170, y);
+ label.moveTo(x - 25, y + 15);
+ }
+
+ for (int i = 0; i < outputPinNames.size(); i++)
+ {
+ double x = 300 + 75 * (i % 2);
+ double y = 10 * i - 2.5;
+ GUIBitDisplay bd = new GUIBitDisplay(model);
+ bd.moveTo(x, y);
+ tool.connect(bd.getInputPin(), comp, outputPinNames.get(i));
+
+ TextComponent label = new TextComponent(model, outputPinNames.get(i));
+ label.moveTo(x + 50, y + 8);
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.ui.am2900;
+
+public final class TestUtil
+{
+ private TestUtil()
+ {
+
+ }
+
+ /**
+ * Transforms the last four bits of an int to a string that contains the binary ('1' and '0') representation of the 4 bits
+ *
+ * @author Christian Femers
+ */
+ public static String to4bitBin(int x)
+ {
+ StringBuilder sb = new StringBuilder(4);
+ sb.append((x & 0b1000) == 0 ? '0' : '1');
+ sb.append((x & 0b0100) == 0 ? '0' : '1');
+ sb.append((x & 0b0010) == 0 ? '0' : '1');
+ sb.append((x & 0b0001) == 0 ? '0' : '1');
+ return sb.toString();
+ }
+
+ /**
+ * Transforms the given boolean to a string that contains the binary ('1' and '0') representation of the bit
+ *
+ * @author Christian Femers
+ */
+ public static String to1bitBin(boolean bitIsSet)
+ {
+ return bitIsSet ? "1" : "0";
+ }
+
+ /**
+ * Transforms the given int to a string that contains the binary ('1' and '0') representation of the int. "0" is only returned when the
+ * int is equal to zero.
+ *
+ * @author Christian Femers
+ */
+ public static String to1bitBin(int someInt)
+ {
+ return someInt != 0 ? "1" : "0";
+ }
+
+ /**
+ * Transforms a 4 bit signed integer (-8 to 7) to a int representing the same number. (Adding leading 1-bits if the 4 bit int is
+ * negative)
+ *
+ * @author Christian Femers
+ */
+ public static int signed4ToSigned32(int signed4bit)
+ {
+ if ((signed4bit & 0b1000) > 0)
+ return signed4bit | 0xFF_FF_FF_F0;
+ return signed4bit & 0x00_00_00_0F;
+ }
+
+ /**
+ * Transforms a 16 bit signed integer (-32768 to 32767 - a short) to a int representing the same number. (Adding leading 1-bits if the
+ * 16 bit int is negative)
+ *
+ * @author Christian Femers
+ */
+ public static int signed16ToSigned32(int signed16bit)
+ {
+ return (short) signed16bit;
+ }
+
+ /**
+ * Transforms the last n bits of an int to a string that contains the binary ('1' and '0') representation of the n bits
+ *
+ * @author Christian Femers
+ */
+ public static String toNbitString(int x, int n)
+ {
+ StringBuilder sb = new StringBuilder(n);
+ for (int i = 0; i < n; i++)
+ {
+ sb.append((x >> i) & 1);
+ }
+ return sb.reverse().toString();
+ }
+}
--- /dev/null
+package net.mograsim.logic.ui.am2900;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+public interface TestableAm2901
+{
+ void setup();
+
+ Result run();
+
+ void setDest(Am2901_Dest dest);
+
+ void setFunc(Am2901_Func func);
+
+ void setSrc(Am2901_Src src);
+
+ void setReg_A(String val_4_bit);
+
+ void setReg_B(String val_4_bit);
+
+ void setCarryIn(String val_1_bit);
+
+ void setNotOutEnable(String val_1_bit);
+
+ void setD(String val_4_bit);
+
+ void setQ_0(String val_1_bit);
+
+ void setQ_3(String val_1_bit);
+
+ void setRAM_0(String val_1_bit);
+
+ void setRAM_3(String val_1_bit);
+
+ void clockOn(boolean isClockOn);
+
+ void setDirectly(Register r, String val_4_bit);
+
+ String getQ_0();
+
+ String getQ_3();
+
+ String getRAM_0();
+
+ String getRAM_3();
+
+ String getNotP();
+
+ String getNotG();
+
+ String getCarryOut();
+
+ String getSign();
+
+ String getZero();
+
+ String getOverflow();
+
+ String getY();
+
+ String getDirectly(Register r);
+
+ default void assertRunSuccess()
+ {
+ assertEquals(Result.SUCCESS, run());
+ }
+
+ default void assertFullCycleSuccess()
+ {
+ assertRunSuccess();
+ clockOn(false);
+ assertRunSuccess();
+ clockOn(true);
+ assertRunSuccess();
+ }
+
+ public enum Result
+ {
+ SUCCESS, OUT_OF_TIME, ERROR;
+ }
+
+ public enum Am2901_Dest
+ {
+ QREG, NOP, RAMA, RAMF, RAMQD, RAMD, RAMQU, RAMU;
+
+ public boolean doesShift()
+ {
+ return ordinal() >= 4;
+ }
+
+ public int getShiftDir()
+ {
+ return doesShift() ? (ordinal() < 6 ? -1 : 1) : 0;
+ }
+
+ public int getI7()
+ {
+ return this.ordinal() >> 1 & 1;
+ }
+ }
+
+ public enum Am2901_Func
+ {
+ ADD, SUBR, SUBS, OR, AND, NOTRS, EXOR, EXNOR;
+ }
+
+ public enum Am2901_Src
+ {
+ AQ, AB, ZQ, ZB, ZA, DA, DQ, DZ;
+ }
+
+ public enum Register
+ {
+ r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;
+
+ public String toBitString()
+ {
+ if (this.ordinal() > 0xF)
+ throw new UnsupportedOperationException();
+ return TestUtil.to4bitBin(this.ordinal());
+ }
+
+ public static Stream<Register> stream()
+ {
+ return Arrays.stream(values());
+ }
+ }
+}
--- /dev/null
+package net.mograsim.logic.ui.am2900;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Queue;
+import java.util.Set;
+import java.util.TreeSet;
+
+import net.mograsim.logic.core.components.BitDisplay;
+import net.mograsim.logic.core.components.ManualSwitch;
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.core.types.BitVector.BitVectorMutator;
+import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+
+public class TestableAm2901Impl implements TestableAm2901
+{
+ private GUIComponent am2901;
+ private Timeline timeline;
+ private ManualSwitch I8, I7, I6, I5, I4, I3, I2, I1, I0;
+ private ManualSwitch C;
+ private ManualSwitch Cn;
+ private ManualSwitch D1, D2, D3, D4;
+ private ManualSwitch A0, A1, A2, A3;
+ private ManualSwitch B0, B1, B2, B3;
+ private ManualSwitch IRAMn, IRAMn_3, IQn, IQn_3;
+ private BitDisplay Y1, Y2, Y3, Y4;
+ private BitDisplay F_0, Cn_4, OVR, F3;
+ private BitDisplay ORAMn, ORAMn_3, OQn, OQn_3;
+
+ private Set<String> wireDebugChangeSet;
+ private boolean debugWires = false;
+ public int debugEventThreshold = 10_000;
+ public int debugEventCount = 500;
+
+ private int eventCounter;
+
+ @Override
+ public Result run()
+ {
+ // Normal execution until completion or eventLimit
+ int eventLimit = debugEventThreshold;
+ eventCounter = 0;
+ debugWires = false;
+ while (eventCounter < eventLimit)
+ {
+ timeline.executeNext();
+ if (!timeline.hasNext())
+ {
+// System.out.println("run() took " + eventCounter + " events");
+ return Result.SUCCESS;
+ }
+ }
+ // Start debugging if event limit is reached
+ debugWires = true;
+ wireDebugChangeSet = new TreeSet<>();
+ Set<String> oldChangeSet;
+ // observe wire changes to detect, if we are really stuck in an endless loop
+ do
+ {
+ eventLimit += debugEventCount;
+ oldChangeSet = wireDebugChangeSet;
+ wireDebugChangeSet = new TreeSet<>();
+ while (eventCounter < eventLimit)
+ {
+ timeline.executeNext();
+ if (!timeline.hasNext())
+ {
+ // no endless loop, but more events needed than expected
+ System.out.println("run() took longer than expected: " + eventCounter);
+ return Result.SUCCESS;
+ }
+ }
+ } while (!oldChangeSet.equals(wireDebugChangeSet));
+ // if stuck, abort execution and print wires
+ System.err.print("Problematic Wire updates:");
+ wireDebugChangeSet.forEach(System.out::println);
+ System.err.println("run() failed: " + eventCounter);
+ return Result.OUT_OF_TIME;
+ }
+
+ @SuppressWarnings("unused")
+ @Override
+ public void setup()
+ {
+ // Create view model
+ ViewModelModifiable viewModel = new ViewModelModifiable();
+ // TODO replace with deserialized version as soon as high level states work for deserialized components
+ am2901 = new GUIAm2901(viewModel);
+// am2901 = IndirectGUIComponentCreator.createComponent(viewModel, "GUIAm2901");
+ // guess which pins are outputs and which are inputs
+ // TODO this code exists three times... but it seems too "hacky" to put it in a helper class
+ List<String> inputPinNames = new ArrayList<>();
+ List<String> outputPinNames = new ArrayList<>();
+ for (Pin p : am2901.getPins().values())
+ if (p.getRelX() == 0)
+ inputPinNames.add(p.name);
+ else
+ outputPinNames.add(p.name);
+ // Get switches
+ HashMap<String, GUIManualSwitch> idSwitchMap = new HashMap<>();
+ for (String id : inputPinNames)
+ {
+ GUIManualSwitch sw = new GUIManualSwitch(viewModel);
+ new GUIWire(viewModel, am2901.getPin(id), sw.getOutputPin());
+ idSwitchMap.put(id, sw);
+ }
+ // Get displays
+ HashMap<String, GUIBitDisplay> idDisplayMap = new HashMap<>();
+ for (String id : outputPinNames)
+ {
+ GUIBitDisplay bd = new GUIBitDisplay(viewModel);
+// bd.addRedrawListener(() -> System.out.println(id + " " + bd.getBitDisplay().getDisplayedValue()));
+ new GUIWire(viewModel, am2901.getPin(id), bd.getInputPin());
+ idDisplayMap.put(id, bd);
+ }
+ // Create logic model
+ LogicModelParameters params = new LogicModelParameters();
+ params.gateProcessTime = 50;
+ params.wireTravelTime = 10;
+ timeline = ViewLogicModelAdapter.convert(viewModel, params);
+ // Bind switches/displays to this test class
+ for (var entry : idSwitchMap.entrySet())
+ setField(entry.getKey().replaceAll("\\+|=", "_"), entry.getValue().getManualSwitch());
+ for (var entry : idDisplayMap.entrySet())
+ setField(entry.getKey().replaceAll("\\+|=", "_"), entry.getValue().getBitDisplay());
+
+ // Debug code
+ HashSet<GUIWire> wiresIncludingSubmodels = new HashSet<>();
+ Queue<ViewModel> modelsToIterate = new LinkedList<>();
+ modelsToIterate.add(viewModel);
+ while (modelsToIterate.size() > 0)
+ {
+ ViewModel model = modelsToIterate.poll();
+ wiresIncludingSubmodels.addAll(model.getWires());
+ for (GUIComponent comp : model.getComponentsByName().values())
+ if (comp instanceof SubmodelComponent)
+ modelsToIterate.offer(((SubmodelComponent) comp).submodel);
+ }
+ wiresIncludingSubmodels.forEach(w -> w.addRedrawListener(() ->
+ {
+ if (debugWires)
+ {
+ wireDebugChangeSet.add(w.toString());
+ }
+ }));
+ timeline.addEventAddedListener(te -> eventCounter++);
+ }
+
+ @Override
+ public void setDest(Am2901_Dest dest)
+ {
+ var bits = of(dest.ordinal(), 3);
+ I8.setToValueOf(bits.getLSBit(2));
+ I7.setToValueOf(bits.getLSBit(1));
+ I6.setToValueOf(bits.getLSBit(0));
+ }
+
+ @Override
+ public void setFunc(Am2901_Func func)
+ {
+ var bits = of(func.ordinal(), 3);
+ I5.setToValueOf(bits.getLSBit(2));
+ I4.setToValueOf(bits.getLSBit(1));
+ I3.setToValueOf(bits.getLSBit(0));
+ }
+
+ @Override
+ public void setSrc(Am2901_Src src)
+ {
+ var bits = of(src.ordinal(), 3);
+ I2.setToValueOf(bits.getLSBit(2));
+ I1.setToValueOf(bits.getLSBit(1));
+ I0.setToValueOf(bits.getLSBit(0));
+ }
+
+ @Override
+ public void setReg_A(String val_4_bit)
+ {
+ var bits = BitVector.parse(val_4_bit);
+ A3.setToValueOf(bits.getLSBit(3));
+ A2.setToValueOf(bits.getLSBit(2));
+ A1.setToValueOf(bits.getLSBit(1));
+ A0.setToValueOf(bits.getLSBit(0));
+ }
+
+ @Override
+ public void setReg_B(String val_4_bit)
+ {
+ var bits = BitVector.parse(val_4_bit);
+ B3.setToValueOf(bits.getLSBit(3));
+ B2.setToValueOf(bits.getLSBit(2));
+ B1.setToValueOf(bits.getLSBit(1));
+ B0.setToValueOf(bits.getLSBit(0));
+ }
+
+ @Override
+ public void setCarryIn(String val_1_bit)
+ {
+ Cn.setToValueOf(Bit.parse(val_1_bit));
+ }
+
+ @Override
+ public void setNotOutEnable(String val_1_bit)
+ {
+ throw new UnsupportedOperationException(); // TODO
+ }
+
+ @Override
+ public void setD(String val_4_bit)
+ {
+ var bits = BitVector.parse(val_4_bit);
+ D4.setToValueOf(bits.getLSBit(3));
+ D3.setToValueOf(bits.getLSBit(2));
+ D2.setToValueOf(bits.getLSBit(1));
+ D1.setToValueOf(bits.getLSBit(0));
+ }
+
+ @Override
+ public void setQ_0(String val_1_bit)
+ {
+ IQn.setToValueOf(Bit.parse(val_1_bit));
+ }
+
+ @Override
+ public void setQ_3(String val_1_bit)
+ {
+ IQn_3.setToValueOf(Bit.parse(val_1_bit));
+ }
+
+ @Override
+ public void setRAM_0(String val_1_bit)
+ {
+ IRAMn.setToValueOf(Bit.parse(val_1_bit));
+ }
+
+ @Override
+ public void setRAM_3(String val_1_bit)
+ {
+ IRAMn_3.setToValueOf(Bit.parse(val_1_bit));
+ }
+
+ @Override
+ public void clockOn(boolean isClockOn)
+ {
+ C.setState(isClockOn);
+ }
+
+ @Override
+ public String getQ_0()
+ {
+ return OQn.getDisplayedValue().toString();
+ }
+
+ @Override
+ public String getQ_3()
+ {
+ return OQn_3.getDisplayedValue().toString();
+ }
+
+ @Override
+ public String getRAM_0()
+ {
+ return ORAMn.getDisplayedValue().toString();
+ }
+
+ @Override
+ public String getRAM_3()
+ {
+ return ORAMn_3.getDisplayedValue().toString();
+ }
+
+ @Override
+ public String getNotP()
+ {
+ throw new UnsupportedOperationException(); // TODO
+ }
+
+ @Override
+ public String getNotG()
+ {
+ throw new UnsupportedOperationException(); // TODO
+ }
+
+ @Override
+ public String getCarryOut()
+ {
+ return Cn_4.getDisplayedValue().toString();
+ }
+
+ @Override
+ public String getSign()
+ {
+ return F3.getDisplayedValue().toString();
+ }
+
+ @Override
+ public String getZero()
+ {
+ return F_0.getDisplayedValue().toString();
+ }
+
+ @Override
+ public String getOverflow()
+ {
+ return OVR.getDisplayedValue().toString();
+ }
+
+ @Override
+ public String getY()
+ {
+ var y3 = Y4.getDisplayedValue();
+ var y2 = Y3.getDisplayedValue();
+ var y1 = Y2.getDisplayedValue();
+ var y0 = Y1.getDisplayedValue();
+ return y3.concat(y2).concat(y1).concat(y0).toString();
+ }
+
+ private void setField(String name, Object value)
+ {
+ try
+ {
+ Field f = TestableAm2901Impl.class.getDeclaredField(name);
+ f.setAccessible(true);
+ f.set(this, Objects.requireNonNull(value));
+ }
+ catch (Exception e)
+ {
+ fail(e);
+ }
+ }
+
+ private static BitVector of(int value, int length)
+ {
+ BitVectorMutator mutator = BitVectorMutator.ofLength(length);
+ int val = value;
+ for (int i = length - 1; i >= 0; i--)
+ {
+ mutator.setMSBit(i, Bit.lastBitOf(val));
+ val >>>= 1;
+ }
+ return mutator.toBitVector();
+ }
+
+ @Override
+ public void setDirectly(Register r, String val_4_bit)
+ {
+ am2901.setHighLevelState(regToStateID(r), BitVector.parse(val_4_bit));
+ }
+
+ @Override
+ public String getDirectly(Register r)
+ {
+ return ((BitVector) am2901.getHighLevelState(regToStateID(r))).toString();
+ }
+
+ private static String regToStateID(Register r)
+ {
+ if (r == Register.Q)
+ return "qreg.q";
+ return "regs.c" + r.toBitString() + ".q";
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+ <attributes>
+ <attribute name="module" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>net.mograsim.logic.model.editor</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
--- /dev/null
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Editor
+Bundle-SymbolicName: net.mograsim.logic.model.editor
+Bundle-Version: 0.1.0.qualifier
+Export-Package: net.mograsim.logic.model.editor,
+ net.mograsim.logic.model.editor.handles,
+ net.mograsim.logic.model.editor.states
+Require-Bundle: net.mograsim.logic.model;bundle-version="0.1.0",
+ net.mograsim.preferences;bundle-version="0.1.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Automatic-Module-Name: net.mograsim.logic.ui
+Bundle-Vendor: Mograsim Team
--- /dev/null
+source.. = src/
+bin.includes = META-INF/,\
+ .,\
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "_Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "_R",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "_S",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 12.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 7.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 16.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "_S"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "_R"
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 37.5
+ },
+ {
+ "x": 35.0,
+ "y": 27.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 42.5
+ },
+ {
+ "x": 5.0,
+ "y": 42.5
+ },
+ {
+ "x": 5.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 17.5
+ },
+ {
+ "x": 35.0,
+ "y": 7.5
+ },
+ {
+ "x": 65.0,
+ "y": 7.5
+ },
+ {
+ "x": 65.0,
+ "y": 12.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "_Q"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "_rsLatch",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIand",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 50.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 71.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 46.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 96.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 7.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 57.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#2"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 32.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#1"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 82.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#3"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "GUIand#2",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "GUIand#3",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 112.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#3",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIand41",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 90.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "C1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "C2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "C3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "C4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 37.5
+ },
+ "id": "GUIor_4",
+ "name": "GUIor_4#0"
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 137.5
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#0"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 112.5
+ },
+ {
+ "x": 10.0,
+ "y": 142.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 137.5
+ },
+ {
+ "x": 5.0,
+ "y": 152.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 187.5
+ },
+ {
+ "x": 5.0,
+ "y": 172.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 212.5
+ },
+ {
+ "x": 10.0,
+ "y": 182.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C1"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 12.5
+ },
+ {
+ "x": 10.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C2"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 37.5
+ },
+ {
+ "x": 5.0,
+ "y": 52.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C3"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C4"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 87.5
+ },
+ {
+ "x": 5.0,
+ "y": 72.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 142.5
+ },
+ {
+ "x": 70.0,
+ "y": 120.0
+ },
+ {
+ "x": 30.0,
+ "y": 120.0
+ },
+ {
+ "x": 30.0,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 152.5
+ },
+ {
+ "x": 65.0,
+ "y": 125.0
+ },
+ {
+ "x": 25.0,
+ "y": 125.0
+ },
+ {
+ "x": 25.0,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 162.5
+ },
+ {
+ "x": 60.0,
+ "y": 130.0
+ },
+ {
+ "x": 20.0,
+ "y": 130.0
+ },
+ {
+ "x": 20.0,
+ "y": 102.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIor_4#0",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 172.5
+ },
+ {
+ "x": 55.0,
+ "y": 135.0
+ },
+ {
+ "x": 15.0,
+ "y": 135.0
+ },
+ {
+ "x": 15.0,
+ "y": 112.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIor_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 42.5
+ },
+ {
+ "x": 75.0,
+ "y": 12.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIor_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": [
+ {
+ "x": 80.0,
+ "y": 52.5
+ },
+ {
+ "x": 80.0,
+ "y": 37.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIor_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIor_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": [
+ {
+ "x": 80.0,
+ "y": 72.5
+ },
+ {
+ "x": 80.0,
+ "y": 87.5
+ }
+ ]
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIandor414",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 40.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y00",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y11",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y10",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y01",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "S0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "S1",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 2.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 52.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#2"
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 27.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#1"
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 77.5
+ },
+ "id": "GUIand",
+ "name": "GUIand#3"
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 16.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 36.5,
+ "y": 61.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 66.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 41.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S0"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 62.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 67.5
+ },
+ {
+ "x": 32.5,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 37.5,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 37.5,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y00"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y01"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y10"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y11"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIdemux2",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "_Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "D",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.2,
+ "subComps": [
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 10.0
+ },
+ "id": "GUI_rsLatch",
+ "name": "GUI_rsLatch#0"
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 40.0
+ },
+ "id": "GUInand3",
+ "name": "GUInand3#0"
+ },
+ {
+ "pos": {
+ "x": 120.0,
+ "y": 60.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 120.0,
+ "y": 30.0
+ },
+ "id": "GUI_rsLatch",
+ "name": "GUI_rsLatch#1"
+ },
+ {
+ "pos": {
+ "x": 19.0,
+ "y": 64.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 99.0,
+ "y": 44.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 99.0,
+ "y": 34.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_R"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 55.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 145.0,
+ "y": 70.0
+ },
+ {
+ "x": 145.0,
+ "y": 85.0
+ },
+ {
+ "x": 20.0,
+ "y": 85.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_S"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_Q"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 35.0
+ },
+ {
+ "x": 30.0,
+ "y": 45.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#1",
+ "pinName": "_S"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUInand3#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#1",
+ "pinName": "_R"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 65.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUI_rsLatch#1",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUI_rsLatch#1",
+ "pinName": "_Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "_Q"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIdff",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "_Q",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "D",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "E",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 7.5
+ },
+ "id": "GUI_rsLatch",
+ "name": "GUI_rsLatch#0"
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "E"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 25.0
+ },
+ {
+ "x": 10.0,
+ "y": 25.0
+ },
+ {
+ "x": 10.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_S"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_R"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 37.5
+ },
+ {
+ "x": 40.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUI_rsLatch#0",
+ "pinName": "_Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "_Q"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIdlatch",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 50.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Q1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Q2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Q3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Q4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 71.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 46.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 96.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 32.5
+ },
+ "id": "GUIdlatch",
+ "name": "GUIdlatch#1"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 7.5
+ },
+ "id": "GUIdlatch",
+ "name": "GUIdlatch#0"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 82.5
+ },
+ "id": "GUIdlatch",
+ "name": "GUIdlatch#3"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 57.5
+ },
+ "id": "GUIdlatch",
+ "name": "GUIdlatch#2"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 112.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch#3",
+ "pinName": "E"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch#2",
+ "pinName": "E"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch#1",
+ "pinName": "E"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch#0",
+ "pinName": "E"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "GUIdlatch#0",
+ "pinName": "D"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "GUIdlatch#1",
+ "pinName": "D"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "GUIdlatch#2",
+ "pinName": "D"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "GUIdlatch#3",
+ "pinName": "D"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch#0",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch#1",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch#2",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch#3",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIdlatch4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 30.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Z",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 57.5,
+ "y": 40.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 5.0,
+ "y": 40.0
+ },
+ "id": "GUIhalfadder",
+ "name": "GUIhalfadder#0"
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 7.5
+ },
+ "id": "GUIhalfadder",
+ "name": "GUIhalfadder#1"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A"
+ },
+ "pin2": {
+ "compName": "GUIhalfadder#1",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "GUIhalfadder#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "GUIhalfadder#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIhalfadder#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIhalfadder#1",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIhalfadder#0",
+ "pinName": "_Z"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIhalfadder#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIhalfadder#1",
+ "pinName": "_Z"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 82.5,
+ "y": 22.5
+ },
+ {
+ "x": 82.5,
+ "y": 35.0
+ },
+ {
+ "x": 52.5,
+ "y": 35.0
+ },
+ {
+ "x": 52.5,
+ "y": 45.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Z"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIfulladder",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "_Z",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "_Z"
+ },
+ "path": [
+ {
+ "x": 80.0,
+ "y": 25.0
+ },
+ {
+ "x": 80.0,
+ "y": 37.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 62.5,
+ "y": 12.5
+ },
+ {
+ "x": 62.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 62.5,
+ "y": 37.5
+ },
+ {
+ "x": 62.5,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIhalfadder",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 30.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "S0",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 22.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 7.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 60.0,
+ "y": 30.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 21.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 47.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S0"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0"
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 52.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUImux1",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 90.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I0_1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "I0_3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "I1_2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I0_2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "I1_1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "I1_4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "S0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "I0_4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "I1_3",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 112.5
+ },
+ "id": "GUImux1",
+ "name": "GUImux1#3"
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 46.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 7.5
+ },
+ "id": "GUImux1",
+ "name": "GUImux1#0"
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 81.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 77.5
+ },
+ "id": "GUImux1",
+ "name": "GUImux1#2"
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 42.5
+ },
+ "id": "GUImux1",
+ "name": "GUImux1#1"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S0"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "S0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0_1"
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 37.5
+ },
+ {
+ "x": 5.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1_1"
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 137.5
+ },
+ {
+ "x": 10.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1#1",
+ "pinName": "S0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0_2"
+ },
+ "pin2": {
+ "compName": "GUImux1#1",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 62.5
+ },
+ {
+ "x": 5.0,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1_2"
+ },
+ "pin2": {
+ "compName": "GUImux1#1",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 162.5
+ },
+ {
+ "x": 15.0,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1#2",
+ "pinName": "S0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0_3"
+ },
+ "pin2": {
+ "compName": "GUImux1#2",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 87.5
+ },
+ {
+ "x": 5.0,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1_3"
+ },
+ "pin2": {
+ "compName": "GUImux1#2",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 187.5
+ },
+ {
+ "x": 20.0,
+ "y": 102.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1#3",
+ "pinName": "S0"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 117.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0_4"
+ },
+ "pin2": {
+ "compName": "GUImux1#3",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 112.5
+ },
+ {
+ "x": 5.0,
+ "y": 127.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1_4"
+ },
+ "pin2": {
+ "compName": "GUImux1#3",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 212.5
+ },
+ {
+ "x": 25.0,
+ "y": 137.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUImux1_4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 30.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 62.5,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 57.5,
+ "y": 25.0
+ },
+ {
+ "x": 57.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 62.5
+ },
+ {
+ "x": 60.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUInand3",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 40.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 77.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 30.0,
+ "y": 52.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 86.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 61.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUInot4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 40.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.2,
+ "subComps": [
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 65.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 165.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 115.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 74.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 174.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 124.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 104.0,
+ "y": 149.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 104.0,
+ "y": 49.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 140.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 140.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 40.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 110.0,
+ "y": 140.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 110.0,
+ "y": 40.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 70.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 120.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 170.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 80.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 130.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 45.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 55.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 145.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 155.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#8",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIor4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 80.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "B4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 77.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 52.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 77.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 52.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 86.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 61.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 136.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 111.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 186.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 161.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 127.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 102.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 177.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 152.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 107.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 117.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 132.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 142.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 157.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 167.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 182.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 192.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 12.5
+ },
+ {
+ "x": 40.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 112.5
+ },
+ {
+ "x": 45.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 37.5
+ },
+ {
+ "x": 40.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 137.5
+ },
+ {
+ "x": 50.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 62.5
+ },
+ {
+ "x": 40.0,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 162.5
+ },
+ {
+ "x": 55.0,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 87.5
+ },
+ {
+ "x": 40.0,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 187.5
+ },
+ {
+ "x": 60.0,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#8",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#9",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#10",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#11",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIor_4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 90.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "QA1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "QB2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "QB1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "QA3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 75.0
+ },
+ "name": "QB4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "QA2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 65.0
+ },
+ "name": "QB3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "QA4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "B0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "WE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.1,
+ "subComps": [
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 649.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 639.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 129.0,
+ "y": 329.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#16",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 659.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 119.0,
+ "y": 349.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#18",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 124.0,
+ "y": 339.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#17",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 114.0,
+ "y": 359.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#19",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 104.0,
+ "y": 164.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 109.0,
+ "y": 154.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 94.0,
+ "y": 184.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 99.0,
+ "y": 174.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 649.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 549.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 809.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 749.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 489.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 479.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 499.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 629.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 509.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 735.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#5"
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 435.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#3"
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 585.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#4"
+ },
+ {
+ "pos": {
+ "x": 235.0,
+ "y": 635.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#1"
+ },
+ {
+ "pos": {
+ "x": 235.0,
+ "y": 785.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#2"
+ },
+ {
+ "pos": {
+ "x": 235.0,
+ "y": 485.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#0"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 475.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#1"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 325.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#0"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 775.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#3"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 625.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#2"
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 325.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#2"
+ },
+ {
+ "pos": {
+ "x": 119.0,
+ "y": 799.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#30",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 114.0,
+ "y": 809.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#31",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 130.0,
+ "y": 150.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#0"
+ },
+ {
+ "pos": {
+ "x": 235.0,
+ "y": 375.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#1"
+ },
+ {
+ "pos": {
+ "x": 124.0,
+ "y": 639.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#25",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 129.0,
+ "y": 629.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#24",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 114.0,
+ "y": 659.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#27",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 119.0,
+ "y": 649.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#26",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 124.0,
+ "y": 789.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#29",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 129.0,
+ "y": 779.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#28",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 150.0
+ },
+ "id": "GUIdemux2",
+ "name": "GUIdemux2#1"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 45.0
+ },
+ "id": "GUIdemux2",
+ "name": "GUIdemux2#0"
+ },
+ {
+ "pos": {
+ "x": 124.0,
+ "y": 489.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#21",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 129.0,
+ "y": 479.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#20",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 114.0,
+ "y": 509.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#23",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 119.0,
+ "y": 499.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#22",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A0"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#0",
+ "pinName": "S0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#0",
+ "pinName": "S1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 150.0
+ },
+ {
+ "x": 10.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B0"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#1",
+ "pinName": "S0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 250.0
+ },
+ {
+ "x": 5.0,
+ "y": 155.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#1",
+ "pinName": "S1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 350.0
+ },
+ {
+ "x": 10.0,
+ "y": 165.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y00"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y01"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y10"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y11"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "WE"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 450.0
+ },
+ {
+ "x": 5.0,
+ "y": 300.0
+ },
+ {
+ "x": 125.0,
+ "y": 300.0
+ },
+ {
+ "x": 125.0,
+ "y": 195.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 185.0,
+ "y": 155.0
+ },
+ {
+ "x": 185.0,
+ "y": 250.0
+ },
+ {
+ "x": 30.0,
+ "y": 250.0
+ },
+ {
+ "x": 30.0,
+ "y": 370.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 165.0
+ },
+ {
+ "x": 180.0,
+ "y": 245.0
+ },
+ {
+ "x": 25.0,
+ "y": 245.0
+ },
+ {
+ "x": 25.0,
+ "y": 520.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 175.0
+ },
+ {
+ "x": 175.0,
+ "y": 240.0
+ },
+ {
+ "x": 20.0,
+ "y": 240.0
+ },
+ {
+ "x": 20.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 170.0,
+ "y": 185.0
+ },
+ {
+ "x": 170.0,
+ "y": 235.0
+ },
+ {
+ "x": 15.0,
+ "y": 235.0
+ },
+ {
+ "x": 15.0,
+ "y": 820.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 850.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D1"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 330.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D2"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 340.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D3"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 350.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D4"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 360.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "D1"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 780.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "D2"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 790.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "D3"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 800.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#2",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#3",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y00"
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 50.0
+ },
+ {
+ "x": 210.0,
+ "y": 420.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y01"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 60.0
+ },
+ {
+ "x": 205.0,
+ "y": 570.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y10"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 70.0
+ },
+ {
+ "x": 200.0,
+ "y": 720.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y11"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 195.0,
+ "y": 80.0
+ },
+ {
+ "x": 195.0,
+ "y": 870.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 110.0,
+ "y": 370.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 520.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 820.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 380.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 390.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 400.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 410.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 530.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 540.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 550.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 560.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 680.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 690.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 700.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 710.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 830.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 840.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 850.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 860.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 380.0
+ },
+ {
+ "x": 290.0,
+ "y": 445.0
+ },
+ {
+ "x": 230.0,
+ "y": 445.0
+ },
+ {
+ "x": 230.0,
+ "y": 490.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 285.0,
+ "y": 390.0
+ },
+ {
+ "x": 285.0,
+ "y": 440.0
+ },
+ {
+ "x": 225.0,
+ "y": 440.0
+ },
+ {
+ "x": 225.0,
+ "y": 500.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 280.0,
+ "y": 400.0
+ },
+ {
+ "x": 280.0,
+ "y": 435.0
+ },
+ {
+ "x": 220.0,
+ "y": 435.0
+ },
+ {
+ "x": 220.0,
+ "y": 510.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 275.0,
+ "y": 410.0
+ },
+ {
+ "x": 275.0,
+ "y": 430.0
+ },
+ {
+ "x": 215.0,
+ "y": 430.0
+ },
+ {
+ "x": 215.0,
+ "y": 520.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 490.0
+ },
+ {
+ "x": 290.0,
+ "y": 595.0
+ },
+ {
+ "x": 230.0,
+ "y": 595.0
+ },
+ {
+ "x": 230.0,
+ "y": 640.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 285.0,
+ "y": 500.0
+ },
+ {
+ "x": 285.0,
+ "y": 590.0
+ },
+ {
+ "x": 225.0,
+ "y": 590.0
+ },
+ {
+ "x": 225.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 280.0,
+ "y": 510.0
+ },
+ {
+ "x": 280.0,
+ "y": 585.0
+ },
+ {
+ "x": 220.0,
+ "y": 585.0
+ },
+ {
+ "x": 220.0,
+ "y": 660.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 275.0,
+ "y": 520.0
+ },
+ {
+ "x": 275.0,
+ "y": 580.0
+ },
+ {
+ "x": 215.0,
+ "y": 580.0
+ },
+ {
+ "x": 215.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 640.0
+ },
+ {
+ "x": 290.0,
+ "y": 745.0
+ },
+ {
+ "x": 230.0,
+ "y": 745.0
+ },
+ {
+ "x": 230.0,
+ "y": 790.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 285.0,
+ "y": 650.0
+ },
+ {
+ "x": 285.0,
+ "y": 740.0
+ },
+ {
+ "x": 225.0,
+ "y": 740.0
+ },
+ {
+ "x": 225.0,
+ "y": 800.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 280.0,
+ "y": 660.0
+ },
+ {
+ "x": 280.0,
+ "y": 735.0
+ },
+ {
+ "x": 220.0,
+ "y": 735.0
+ },
+ {
+ "x": 220.0,
+ "y": 810.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 275.0,
+ "y": 670.0
+ },
+ {
+ "x": 275.0,
+ "y": 730.0
+ },
+ {
+ "x": 215.0,
+ "y": 730.0
+ },
+ {
+ "x": 215.0,
+ "y": 820.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA1"
+ },
+ "path": [
+ {
+ "x": 300.0,
+ "y": 790.0
+ },
+ {
+ "x": 300.0,
+ "y": 50.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA2"
+ },
+ "path": [
+ {
+ "x": 305.0,
+ "y": 800.0
+ },
+ {
+ "x": 305.0,
+ "y": 150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA3"
+ },
+ "path": [
+ {
+ "x": 310.0,
+ "y": 810.0
+ },
+ {
+ "x": 310.0,
+ "y": 250.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA4"
+ },
+ "path": [
+ {
+ "x": 315.0,
+ "y": 820.0
+ },
+ {
+ "x": 315.0,
+ "y": 350.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 190.0,
+ "y": 330.0
+ },
+ {
+ "x": 190.0,
+ "y": 430.0
+ },
+ {
+ "x": 130.0,
+ "y": 430.0
+ },
+ {
+ "x": 130.0,
+ "y": 440.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 185.0,
+ "y": 340.0
+ },
+ {
+ "x": 185.0,
+ "y": 425.0
+ },
+ {
+ "x": 125.0,
+ "y": 425.0
+ },
+ {
+ "x": 125.0,
+ "y": 450.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 350.0
+ },
+ {
+ "x": 180.0,
+ "y": 420.0
+ },
+ {
+ "x": 120.0,
+ "y": 420.0
+ },
+ {
+ "x": 120.0,
+ "y": 460.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 360.0
+ },
+ {
+ "x": 175.0,
+ "y": 415.0
+ },
+ {
+ "x": 115.0,
+ "y": 415.0
+ },
+ {
+ "x": 115.0,
+ "y": 470.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 190.0,
+ "y": 440.0
+ },
+ {
+ "x": 190.0,
+ "y": 580.0
+ },
+ {
+ "x": 130.0,
+ "y": 580.0
+ },
+ {
+ "x": 130.0,
+ "y": 590.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 185.0,
+ "y": 450.0
+ },
+ {
+ "x": 185.0,
+ "y": 575.0
+ },
+ {
+ "x": 125.0,
+ "y": 575.0
+ },
+ {
+ "x": 125.0,
+ "y": 600.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 460.0
+ },
+ {
+ "x": 180.0,
+ "y": 570.0
+ },
+ {
+ "x": 120.0,
+ "y": 570.0
+ },
+ {
+ "x": 120.0,
+ "y": 610.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 470.0
+ },
+ {
+ "x": 175.0,
+ "y": 565.0
+ },
+ {
+ "x": 115.0,
+ "y": 565.0
+ },
+ {
+ "x": 115.0,
+ "y": 620.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 190.0,
+ "y": 590.0
+ },
+ {
+ "x": 190.0,
+ "y": 730.0
+ },
+ {
+ "x": 130.0,
+ "y": 730.0
+ },
+ {
+ "x": 130.0,
+ "y": 740.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 185.0,
+ "y": 600.0
+ },
+ {
+ "x": 185.0,
+ "y": 725.0
+ },
+ {
+ "x": 125.0,
+ "y": 725.0
+ },
+ {
+ "x": 125.0,
+ "y": 750.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 610.0
+ },
+ {
+ "x": 180.0,
+ "y": 720.0
+ },
+ {
+ "x": 120.0,
+ "y": 720.0
+ },
+ {
+ "x": 120.0,
+ "y": 760.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 620.0
+ },
+ {
+ "x": 175.0,
+ "y": 715.0
+ },
+ {
+ "x": 115.0,
+ "y": 715.0
+ },
+ {
+ "x": 115.0,
+ "y": 770.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB1"
+ },
+ "path": [
+ {
+ "x": 190.0,
+ "y": 740.0
+ },
+ {
+ "x": 190.0,
+ "y": 880.0
+ },
+ {
+ "x": 325.0,
+ "y": 880.0
+ },
+ {
+ "x": 325.0,
+ "y": 450.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB2"
+ },
+ "path": [
+ {
+ "x": 185.0,
+ "y": 750.0
+ },
+ {
+ "x": 185.0,
+ "y": 885.0
+ },
+ {
+ "x": 330.0,
+ "y": 885.0
+ },
+ {
+ "x": 330.0,
+ "y": 550.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB3"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 760.0
+ },
+ {
+ "x": 180.0,
+ "y": 890.0
+ },
+ {
+ "x": 335.0,
+ "y": 890.0
+ },
+ {
+ "x": 335.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB4"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 770.0
+ },
+ {
+ "x": 175.0,
+ "y": 895.0
+ },
+ {
+ "x": 340.0,
+ "y": 895.0
+ },
+ {
+ "x": 340.0,
+ "y": 750.0
+ }
+ ]
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIram2",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 130.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "QA1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "QB2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "QB1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "QA3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 75.0
+ },
+ "name": "QB4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "QA2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 65.0
+ },
+ "name": "QB3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "QA4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "B0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "WE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 105.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 115.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 125.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.1,
+ "subComps": [
+ {
+ "pos": {
+ "x": 69.0,
+ "y": 854.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 844.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 484.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#16",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 864.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 504.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#18",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 494.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#17",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 54.0,
+ "y": 514.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#19",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 155.0,
+ "y": 325.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#2"
+ },
+ {
+ "pos": {
+ "x": 224.0,
+ "y": 164.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 229.0,
+ "y": 154.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 214.0,
+ "y": 184.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 219.0,
+ "y": 174.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 544.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 59.0,
+ "y": 534.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 564.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 69.0,
+ "y": 554.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 694.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 59.0,
+ "y": 684.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 69.0,
+ "y": 704.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 235.0,
+ "y": 150.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#0"
+ },
+ {
+ "pos": {
+ "x": 59.0,
+ "y": 834.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 250.0,
+ "y": 375.0
+ },
+ "id": "GUIand41",
+ "name": "GUIand41#1"
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 714.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 155.0,
+ "y": 735.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#5"
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 349.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#25",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 334.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#24",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 155.0,
+ "y": 435.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#3"
+ },
+ {
+ "pos": {
+ "x": 54.0,
+ "y": 749.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#27",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 155.0,
+ "y": 585.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#4"
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 649.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#26",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 780.0
+ },
+ "id": "GUIram2",
+ "name": "GUIram2#3"
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 630.0
+ },
+ "id": "GUIram2",
+ "name": "GUIram2#2"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 150.0
+ },
+ "id": "GUIdemux2",
+ "name": "GUIdemux2#1"
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 480.0
+ },
+ "id": "GUIram2",
+ "name": "GUIram2#1"
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 330.0
+ },
+ "id": "GUIram2",
+ "name": "GUIram2#0"
+ },
+ {
+ "pos": {
+ "x": 250.0,
+ "y": 635.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#1"
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 45.0
+ },
+ "id": "GUIdemux2",
+ "name": "GUIdemux2#0"
+ },
+ {
+ "pos": {
+ "x": 250.0,
+ "y": 785.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#2"
+ },
+ {
+ "pos": {
+ "x": 250.0,
+ "y": 485.0
+ },
+ "id": "GUIandor414",
+ "name": "GUIandor414#0"
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 644.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#21",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 634.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#20",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 54.0,
+ "y": 664.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#23",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 654.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#22",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A0"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#0",
+ "pinName": "S0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#0",
+ "pinName": "S1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 150.0
+ },
+ {
+ "x": 10.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B0"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#1",
+ "pinName": "S0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 450.0
+ },
+ {
+ "x": 5.0,
+ "y": 155.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUIdemux2#1",
+ "pinName": "S1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 550.0
+ },
+ {
+ "x": 10.0,
+ "y": 165.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y00"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y01"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y10"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#1",
+ "pinName": "Y11"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "WE"
+ },
+ "pin2": {
+ "compName": "GUIand41#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 850.0
+ },
+ {
+ "x": 15.0,
+ "y": 195.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 155.0
+ },
+ {
+ "x": 290.0,
+ "y": 230.0
+ },
+ {
+ "x": 35.0,
+ "y": 230.0
+ },
+ {
+ "x": 35.0,
+ "y": 375.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 285.0,
+ "y": 165.0
+ },
+ {
+ "x": 285.0,
+ "y": 225.0
+ },
+ {
+ "x": 30.0,
+ "y": 225.0
+ },
+ {
+ "x": 30.0,
+ "y": 525.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 280.0,
+ "y": 175.0
+ },
+ {
+ "x": 280.0,
+ "y": 220.0
+ },
+ {
+ "x": 25.0,
+ "y": 220.0
+ },
+ {
+ "x": 25.0,
+ "y": 675.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 275.0,
+ "y": 185.0
+ },
+ {
+ "x": 275.0,
+ "y": 215.0
+ },
+ {
+ "x": 20.0,
+ "y": 215.0
+ },
+ {
+ "x": 20.0,
+ "y": 825.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "A0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 345.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "B0"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 355.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 365.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "A0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "B0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "B1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "A0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "B0"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "B1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "A0"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 785.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 795.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "B0"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 805.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 815.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 250.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "D1"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 385.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "D2"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 395.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "D3"
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 405.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#0",
+ "pinName": "D4"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 415.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#1",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#2",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIram2#3",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 950.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 1050.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 1150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 1250.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y00"
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 135.0,
+ "y": 50.0
+ },
+ {
+ "x": 135.0,
+ "y": 370.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y01"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 60.0
+ },
+ {
+ "x": 130.0,
+ "y": 520.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y10"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 70.0
+ },
+ {
+ "x": 125.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdemux2#0",
+ "pinName": "Y11"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 80.0
+ },
+ {
+ "x": 120.0,
+ "y": 820.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 230.0,
+ "y": 420.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 225.0,
+ "y": 570.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 220.0,
+ "y": 720.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 215.0,
+ "y": 870.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QB1"
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 375.0
+ },
+ {
+ "x": 140.0,
+ "y": 380.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QB2"
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 385.0
+ },
+ {
+ "x": 140.0,
+ "y": 390.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QB3"
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 395.0
+ },
+ {
+ "x": 140.0,
+ "y": 400.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QB4"
+ },
+ "pin2": {
+ "compName": "GUIand41#1",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 405.0
+ },
+ {
+ "x": 140.0,
+ "y": 410.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QB1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 525.0
+ },
+ {
+ "x": 140.0,
+ "y": 530.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QB2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 535.0
+ },
+ {
+ "x": 140.0,
+ "y": 540.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QB3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 545.0
+ },
+ {
+ "x": 140.0,
+ "y": 550.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QB4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 555.0
+ },
+ {
+ "x": 140.0,
+ "y": 560.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QB1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 675.0
+ },
+ {
+ "x": 140.0,
+ "y": 680.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QB2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 685.0
+ },
+ {
+ "x": 140.0,
+ "y": 690.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QB3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 695.0
+ },
+ {
+ "x": 140.0,
+ "y": 700.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QB4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 705.0
+ },
+ {
+ "x": 140.0,
+ "y": 710.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QB1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 825.0
+ },
+ {
+ "x": 140.0,
+ "y": 830.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QB2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 835.0
+ },
+ {
+ "x": 140.0,
+ "y": 840.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QB3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 845.0
+ },
+ {
+ "x": 140.0,
+ "y": 850.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QB4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 855.0
+ },
+ {
+ "x": 140.0,
+ "y": 860.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QA1"
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 335.0
+ },
+ {
+ "x": 140.0,
+ "y": 330.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QA2"
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 345.0
+ },
+ {
+ "x": 140.0,
+ "y": 340.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QA3"
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 355.0
+ },
+ {
+ "x": 140.0,
+ "y": 350.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#0",
+ "pinName": "QA4"
+ },
+ "pin2": {
+ "compName": "GUIand41#2",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 365.0
+ },
+ {
+ "x": 140.0,
+ "y": 360.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QA1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 485.0
+ },
+ {
+ "x": 140.0,
+ "y": 480.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QA2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 495.0
+ },
+ {
+ "x": 140.0,
+ "y": 490.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QA3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 505.0
+ },
+ {
+ "x": 140.0,
+ "y": 500.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#1",
+ "pinName": "QA4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 515.0
+ },
+ {
+ "x": 140.0,
+ "y": 510.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QA1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 635.0
+ },
+ {
+ "x": 140.0,
+ "y": 630.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QA2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 645.0
+ },
+ {
+ "x": 140.0,
+ "y": 640.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QA3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 655.0
+ },
+ {
+ "x": 140.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#2",
+ "pinName": "QA4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 665.0
+ },
+ {
+ "x": 140.0,
+ "y": 660.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QA1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 785.0
+ },
+ {
+ "x": 140.0,
+ "y": 780.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QA2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 795.0
+ },
+ {
+ "x": 140.0,
+ "y": 790.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QA3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 805.0
+ },
+ {
+ "x": 140.0,
+ "y": 800.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram2#3",
+ "pinName": "QA4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 815.0
+ },
+ {
+ "x": 140.0,
+ "y": 810.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 305.0,
+ "y": 380.0
+ },
+ {
+ "x": 305.0,
+ "y": 445.0
+ },
+ {
+ "x": 245.0,
+ "y": 445.0
+ },
+ {
+ "x": 245.0,
+ "y": 490.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 300.0,
+ "y": 390.0
+ },
+ {
+ "x": 300.0,
+ "y": 440.0
+ },
+ {
+ "x": 240.0,
+ "y": 440.0
+ },
+ {
+ "x": 240.0,
+ "y": 500.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 295.0,
+ "y": 400.0
+ },
+ {
+ "x": 295.0,
+ "y": 435.0
+ },
+ {
+ "x": 235.0,
+ "y": 435.0
+ },
+ {
+ "x": 235.0,
+ "y": 510.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#1",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#0",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 410.0
+ },
+ {
+ "x": 290.0,
+ "y": 430.0
+ },
+ {
+ "x": 230.0,
+ "y": 430.0
+ },
+ {
+ "x": 230.0,
+ "y": 520.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 305.0,
+ "y": 490.0
+ },
+ {
+ "x": 305.0,
+ "y": 595.0
+ },
+ {
+ "x": 245.0,
+ "y": 595.0
+ },
+ {
+ "x": 245.0,
+ "y": 640.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 300.0,
+ "y": 500.0
+ },
+ {
+ "x": 300.0,
+ "y": 590.0
+ },
+ {
+ "x": 240.0,
+ "y": 590.0
+ },
+ {
+ "x": 240.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 295.0,
+ "y": 510.0
+ },
+ {
+ "x": 295.0,
+ "y": 585.0
+ },
+ {
+ "x": 235.0,
+ "y": 585.0
+ },
+ {
+ "x": 235.0,
+ "y": 660.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#1",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 520.0
+ },
+ {
+ "x": 290.0,
+ "y": 580.0
+ },
+ {
+ "x": 230.0,
+ "y": 580.0
+ },
+ {
+ "x": 230.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 305.0,
+ "y": 640.0
+ },
+ {
+ "x": 305.0,
+ "y": 745.0
+ },
+ {
+ "x": 245.0,
+ "y": 745.0
+ },
+ {
+ "x": 245.0,
+ "y": 790.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 300.0,
+ "y": 650.0
+ },
+ {
+ "x": 300.0,
+ "y": 740.0
+ },
+ {
+ "x": 240.0,
+ "y": 740.0
+ },
+ {
+ "x": 240.0,
+ "y": 800.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 295.0,
+ "y": 660.0
+ },
+ {
+ "x": 295.0,
+ "y": 735.0
+ },
+ {
+ "x": 235.0,
+ "y": 735.0
+ },
+ {
+ "x": 235.0,
+ "y": 810.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#1",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#2",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 670.0
+ },
+ {
+ "x": 290.0,
+ "y": 730.0
+ },
+ {
+ "x": 230.0,
+ "y": 730.0
+ },
+ {
+ "x": 230.0,
+ "y": 820.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB1"
+ },
+ "path": [
+ {
+ "x": 330.0,
+ "y": 790.0
+ },
+ {
+ "x": 330.0,
+ "y": 450.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB2"
+ },
+ "path": [
+ {
+ "x": 335.0,
+ "y": 800.0
+ },
+ {
+ "x": 335.0,
+ "y": 550.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB3"
+ },
+ "path": [
+ {
+ "x": 340.0,
+ "y": 810.0
+ },
+ {
+ "x": 340.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#2",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QB4"
+ },
+ "path": [
+ {
+ "x": 345.0,
+ "y": 820.0
+ },
+ {
+ "x": 345.0,
+ "y": 750.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 330.0
+ },
+ {
+ "x": 210.0,
+ "y": 430.0
+ },
+ {
+ "x": 150.0,
+ "y": 430.0
+ },
+ {
+ "x": 150.0,
+ "y": 440.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 340.0
+ },
+ {
+ "x": 205.0,
+ "y": 425.0
+ },
+ {
+ "x": 145.0,
+ "y": 425.0
+ },
+ {
+ "x": 145.0,
+ "y": 450.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 350.0
+ },
+ {
+ "x": 200.0,
+ "y": 420.0
+ },
+ {
+ "x": 140.0,
+ "y": 420.0
+ },
+ {
+ "x": 140.0,
+ "y": 460.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand41#2",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#3",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 195.0,
+ "y": 360.0
+ },
+ {
+ "x": 195.0,
+ "y": 415.0
+ },
+ {
+ "x": 135.0,
+ "y": 415.0
+ },
+ {
+ "x": 135.0,
+ "y": 470.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 440.0
+ },
+ {
+ "x": 210.0,
+ "y": 580.0
+ },
+ {
+ "x": 150.0,
+ "y": 580.0
+ },
+ {
+ "x": 150.0,
+ "y": 590.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 450.0
+ },
+ {
+ "x": 205.0,
+ "y": 575.0
+ },
+ {
+ "x": 145.0,
+ "y": 575.0
+ },
+ {
+ "x": 145.0,
+ "y": 600.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 460.0
+ },
+ {
+ "x": 200.0,
+ "y": 570.0
+ },
+ {
+ "x": 140.0,
+ "y": 570.0
+ },
+ {
+ "x": 140.0,
+ "y": 610.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#3",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#4",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 195.0,
+ "y": 470.0
+ },
+ {
+ "x": 195.0,
+ "y": 565.0
+ },
+ {
+ "x": 135.0,
+ "y": 565.0
+ },
+ {
+ "x": 135.0,
+ "y": 620.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 590.0
+ },
+ {
+ "x": 210.0,
+ "y": 730.0
+ },
+ {
+ "x": 150.0,
+ "y": 730.0
+ },
+ {
+ "x": 150.0,
+ "y": 740.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 600.0
+ },
+ {
+ "x": 205.0,
+ "y": 725.0
+ },
+ {
+ "x": 145.0,
+ "y": 725.0
+ },
+ {
+ "x": 145.0,
+ "y": 750.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 610.0
+ },
+ {
+ "x": 200.0,
+ "y": 720.0
+ },
+ {
+ "x": 140.0,
+ "y": 720.0
+ },
+ {
+ "x": 140.0,
+ "y": 760.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#4",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIandor414#5",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 195.0,
+ "y": 620.0
+ },
+ {
+ "x": 195.0,
+ "y": 715.0
+ },
+ {
+ "x": 135.0,
+ "y": 715.0
+ },
+ {
+ "x": 135.0,
+ "y": 770.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA1"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 740.0
+ },
+ {
+ "x": 210.0,
+ "y": 880.0
+ },
+ {
+ "x": 310.0,
+ "y": 880.0
+ },
+ {
+ "x": 310.0,
+ "y": 50.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA2"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 750.0
+ },
+ {
+ "x": 205.0,
+ "y": 885.0
+ },
+ {
+ "x": 315.0,
+ "y": 885.0
+ },
+ {
+ "x": 315.0,
+ "y": 150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA3"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 760.0
+ },
+ {
+ "x": 200.0,
+ "y": 890.0
+ },
+ {
+ "x": 320.0,
+ "y": 890.0
+ },
+ {
+ "x": 320.0,
+ "y": 250.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIandor414#5",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QA4"
+ },
+ "path": [
+ {
+ "x": 195.0,
+ "y": 770.0
+ },
+ {
+ "x": 195.0,
+ "y": 895.0
+ },
+ {
+ "x": 325.0,
+ "y": 895.0
+ },
+ {
+ "x": 325.0,
+ "y": 350.0
+ }
+ ]
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIram4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 100.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "SA",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "SB",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "B4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 52.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 152.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 102.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 77.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 52.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 66.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 16.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 41.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 116.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 141.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 91.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 65.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 77.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 177.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 127.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 62.5
+ },
+ {
+ "x": 15.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 17.5,
+ "y": 87.5
+ },
+ {
+ "x": 17.5,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 17.5,
+ "y": 112.5
+ },
+ {
+ "x": 17.5,
+ "y": 107.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 17.5,
+ "y": 137.5
+ },
+ {
+ "x": 17.5,
+ "y": 157.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 162.5
+ },
+ {
+ "x": 10.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 12.5,
+ "y": 187.5
+ },
+ {
+ "x": 12.5,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 212.5
+ },
+ {
+ "x": 15.0,
+ "y": 132.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B4"
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 237.5
+ },
+ {
+ "x": 10.0,
+ "y": 182.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SA"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SB"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 167.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 192.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 42.5,
+ "y": 12.5
+ },
+ {
+ "x": 42.5,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 37.5
+ },
+ {
+ "x": 45.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 47.5,
+ "y": 62.5
+ },
+ {
+ "x": 47.5,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 87.5
+ },
+ {
+ "x": 50.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 52.5,
+ "y": 112.5
+ },
+ {
+ "x": 52.5,
+ "y": 57.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 137.5
+ },
+ {
+ "x": 55.0,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 57.5,
+ "y": 162.5
+ },
+ {
+ "x": 57.5,
+ "y": 82.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 187.5
+ },
+ {
+ "x": 60.0,
+ "y": 92.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#8",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#9",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#10",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#11",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIsel2_4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 150.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "SA",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 115.0
+ },
+ "name": "C1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "SB",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 125.0
+ },
+ "name": "C2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "SC",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 135.0
+ },
+ "name": "C3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 145.0
+ },
+ "name": "C4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 105.0
+ },
+ "name": "B4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.2,
+ "subComps": [
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 620.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 570.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 720.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 670.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 75.0,
+ "y": 250.0
+ },
+ "id": "GUInot4",
+ "name": "GUInot4#0"
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 634.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 584.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 684.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 152.5,
+ "y": 65.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 250.0
+ },
+ "id": "GUIsel2_4",
+ "name": "GUIsel2_4#0"
+ },
+ {
+ "pos": {
+ "x": 152.5,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 152.5,
+ "y": 165.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 152.5,
+ "y": 115.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SA"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "SA"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 25.0
+ },
+ {
+ "x": 25.0,
+ "y": 255.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SB"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "SB"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 75.0
+ },
+ {
+ "x": 20.0,
+ "y": 265.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 175.0
+ },
+ {
+ "x": 15.0,
+ "y": 275.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 225.0
+ },
+ {
+ "x": 10.0,
+ "y": 285.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 275.0
+ },
+ {
+ "x": 5.0,
+ "y": 295.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 325.0
+ },
+ {
+ "x": 5.0,
+ "y": 305.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 375.0
+ },
+ {
+ "x": 10.0,
+ "y": 315.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 425.0
+ },
+ {
+ "x": 15.0,
+ "y": 325.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 475.0
+ },
+ {
+ "x": 20.0,
+ "y": 335.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B4"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 525.0
+ },
+ {
+ "x": 25.0,
+ "y": 345.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUInot4#0",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUInot4#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUInot4#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUInot4#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SC"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 125.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 125.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 125.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 735.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C1"
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C2"
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C3"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C4"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUInot4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 255.0
+ },
+ {
+ "x": 115.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUInot4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 265.0
+ },
+ {
+ "x": 120.0,
+ "y": 70.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUInot4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 275.0
+ },
+ {
+ "x": 125.0,
+ "y": 120.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUInot4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 285.0
+ },
+ {
+ "x": 130.0,
+ "y": 170.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 135.0,
+ "y": 580.0
+ },
+ {
+ "x": 135.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 630.0
+ },
+ {
+ "x": 140.0,
+ "y": 80.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 145.0,
+ "y": 680.0
+ },
+ {
+ "x": 145.0,
+ "y": 130.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 150.0,
+ "y": 730.0
+ },
+ {
+ "x": 150.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIsel3_4",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 20.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "A",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "B",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 2.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 7.5,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 62.5,
+ "y": 15.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 35.0,
+ "y": 27.5
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 11.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 32.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 42.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIxor",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 270.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 85.0
+ },
+ "name": "ORAMn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 265.0
+ },
+ "name": "IQn+3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "I0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 255.0
+ },
+ "name": "IQn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "I1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "I2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "I3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 65.0
+ },
+ "name": "OVR",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "I4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 105.0
+ },
+ "name": "Cn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 115.0
+ },
+ "name": "OQn+3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "I5",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I6",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 105.0
+ },
+ "name": "OQn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I7",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I8",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 155.0
+ },
+ "name": "A0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 165.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 175.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 185.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 235.0
+ },
+ "name": "IRAMn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "Cn+4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 95.0
+ },
+ "name": "ORAMn+3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "F\u003d0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 115.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 245.0
+ },
+ "name": "IRAMn+3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 75.0
+ },
+ "name": "F3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 125.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 195.0
+ },
+ "name": "B0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 135.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 205.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 145.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 215.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 225.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Y1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Y2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Y3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Y4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.1,
+ "subComps": [
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 2310.0
+ },
+ "id": "GUIsel3_4",
+ "name": "GUIsel3_4#0"
+ },
+ {
+ "pos": {
+ "x": 144.0,
+ "y": 2524.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 2510.0
+ },
+ "id": "GUIsel3_4",
+ "name": "GUIsel3_4#1"
+ },
+ {
+ "pos": {
+ "x": 139.0,
+ "y": 2514.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 234.0,
+ "y": 2524.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#16",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 219.0,
+ "y": 2494.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 45.0
+ },
+ "id": "GUIAm2901DestDecode",
+ "name": "GUIAm2901DestDecode#0"
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 2634.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#18",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 2624.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#17",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 279.0,
+ "y": 2114.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#19",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 154.0,
+ "y": 89.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 154.0,
+ "y": 949.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 154.0,
+ "y": 2319.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 154.0,
+ "y": 2264.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 2324.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 2314.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 219.0,
+ "y": 2224.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 2334.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 229.0,
+ "y": 2244.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 224.0,
+ "y": 2234.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 234.0,
+ "y": 2254.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 134.0,
+ "y": 2504.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 129.0,
+ "y": 2494.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 160.0,
+ "y": 2275.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#1"
+ },
+ {
+ "pos": {
+ "x": 160.0,
+ "y": 2220.0
+ },
+ "id": "GUIdlatch4",
+ "name": "GUIdlatch4#0"
+ },
+ {
+ "pos": {
+ "x": 314.0,
+ "y": 449.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#40",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 90.0,
+ "y": 2490.0
+ },
+ "id": "GUIAm2901QReg",
+ "name": "GUIAm2901QReg#0"
+ },
+ {
+ "pos": {
+ "x": 320.0,
+ "y": 440.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 2384.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#36",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 160.0,
+ "y": 75.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 2414.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#35",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 19.0,
+ "y": 2434.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#38",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 2424.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#37",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 2444.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#39",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 190.0,
+ "y": 65.0
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 275.0,
+ "y": 135.0
+ },
+ "id": "GUImux1_4",
+ "name": "GUImux1_4#0"
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 2354.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#30",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 19.0,
+ "y": 2374.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#32",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 2364.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#31",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 19.0,
+ "y": 2404.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#34",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 2394.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#33",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 269.0,
+ "y": 2104.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#25",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 264.0,
+ "y": 2099.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#24",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 259.0,
+ "y": 459.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#27",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 254.0,
+ "y": 449.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#26",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 275.0,
+ "y": 445.0
+ },
+ "id": "GUIor4",
+ "name": "GUIor4#0"
+ },
+ {
+ "pos": {
+ "x": 269.0,
+ "y": 479.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#29",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 240.0,
+ "y": 2110.0
+ },
+ "id": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode",
+ "name": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0"
+ },
+ {
+ "pos": {
+ "x": 264.0,
+ "y": 469.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#28",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 95.0,
+ "y": 2220.0
+ },
+ "id": "GUIram4",
+ "name": "GUIram4#0"
+ },
+ {
+ "pos": {
+ "x": 329.0,
+ "y": 949.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#21",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 294.0,
+ "y": 2144.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#20",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 259.0,
+ "y": 2094.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#23",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 254.0,
+ "y": 2089.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#22",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I8"
+ },
+ "pin2": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "I8"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I7"
+ },
+ "pin2": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "I7"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 150.0
+ },
+ {
+ "x": 5.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I6"
+ },
+ "pin2": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "I6"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 250.0
+ },
+ {
+ "x": 10.0,
+ "y": 70.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I5"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I5"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 350.0
+ },
+ {
+ "x": 130.0,
+ "y": 2115.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I4"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 450.0
+ },
+ {
+ "x": 125.0,
+ "y": 2125.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I3"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 550.0
+ },
+ {
+ "x": 120.0,
+ "y": 2135.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I2"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 650.0
+ },
+ {
+ "x": 115.0,
+ "y": 2145.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 110.0,
+ "y": 750.0
+ },
+ {
+ "x": 110.0,
+ "y": 2155.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 850.0
+ },
+ {
+ "x": 105.0,
+ "y": 2165.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 155.0,
+ "y": 80.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 155.0,
+ "y": 2485.0
+ },
+ {
+ "x": 80.0,
+ "y": 2485.0
+ },
+ {
+ "x": 80.0,
+ "y": 2495.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "LSH"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 90.0
+ },
+ {
+ "x": 55.0,
+ "y": 125.0
+ },
+ {
+ "x": 40.0,
+ "y": 125.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "NSH"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 50.0
+ },
+ {
+ "x": 60.0,
+ "y": 120.0
+ },
+ {
+ "x": 35.0,
+ "y": 120.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "RSH"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 60.0
+ },
+ {
+ "x": 65.0,
+ "y": 115.0
+ },
+ {
+ "x": 30.0,
+ "y": 115.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SA"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SB"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SC"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "SA"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 2515.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "SB"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 2525.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "SC"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 2535.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A0"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "A0"
+ },
+ "path": [
+ {
+ "x": 80.0,
+ "y": 1550.0
+ },
+ {
+ "x": 80.0,
+ "y": 2225.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 1650.0
+ },
+ {
+ "x": 75.0,
+ "y": 2235.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 1750.0
+ },
+ {
+ "x": 70.0,
+ "y": 2245.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 1850.0
+ },
+ {
+ "x": 65.0,
+ "y": 2255.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B0"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "B0"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 1950.0
+ },
+ {
+ "x": 60.0,
+ "y": 2265.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 2050.0
+ },
+ {
+ "x": 55.0,
+ "y": 2275.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 2150.0
+ },
+ {
+ "x": 50.0,
+ "y": 2285.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 2250.0
+ },
+ {
+ "x": 45.0,
+ "y": 2295.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QA1"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QA2"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QA3"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QA4"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QB1"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D1"
+ },
+ "path": [
+ {
+ "x": 150.0,
+ "y": 2265.0
+ },
+ {
+ "x": 150.0,
+ "y": 2280.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QB2"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D2"
+ },
+ "path": [
+ {
+ "x": 145.0,
+ "y": 2275.0
+ },
+ {
+ "x": 145.0,
+ "y": 2290.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QB3"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D3"
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 2285.0
+ },
+ {
+ "x": 140.0,
+ "y": 2300.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIram4#0",
+ "pinName": "QB4"
+ },
+ "pin2": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "D4"
+ },
+ "path": [
+ {
+ "x": 135.0,
+ "y": 2295.0
+ },
+ {
+ "x": 135.0,
+ "y": 2310.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Cn"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 1050.0
+ },
+ {
+ "x": 100.0,
+ "y": 2175.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "D1"
+ },
+ "path": [
+ {
+ "x": 180.0,
+ "y": 1150.0
+ },
+ {
+ "x": 180.0,
+ "y": 2185.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "D2"
+ },
+ "path": [
+ {
+ "x": 175.0,
+ "y": 1250.0
+ },
+ {
+ "x": 175.0,
+ "y": 2195.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "D3"
+ },
+ "path": [
+ {
+ "x": 170.0,
+ "y": 1350.0
+ },
+ {
+ "x": 170.0,
+ "y": 2205.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "D4"
+ },
+ "path": [
+ {
+ "x": 165.0,
+ "y": 1450.0
+ },
+ {
+ "x": 165.0,
+ "y": 2215.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#0",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I0_1"
+ },
+ "path": [
+ {
+ "x": 220.0,
+ "y": 150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I0_2"
+ },
+ "path": [
+ {
+ "x": 225.0,
+ "y": 160.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I0_3"
+ },
+ "path": [
+ {
+ "x": 230.0,
+ "y": 170.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I0_4"
+ },
+ "path": [
+ {
+ "x": 235.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 200.0,
+ "y": 2280.0
+ },
+ {
+ "x": 200.0,
+ "y": 2265.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 205.0,
+ "y": 2290.0
+ },
+ {
+ "x": 205.0,
+ "y": 2275.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 210.0,
+ "y": 2300.0
+ },
+ {
+ "x": 210.0,
+ "y": 2285.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdlatch4#1",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 215.0,
+ "y": 2310.0
+ },
+ {
+ "x": 215.0,
+ "y": 2295.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "OQn"
+ },
+ "path": [
+ {
+ "x": 335.0,
+ "y": 2495.0
+ },
+ {
+ "x": 335.0,
+ "y": 1050.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "OQn+3"
+ },
+ "path": [
+ {
+ "x": 340.0,
+ "y": 2525.0
+ },
+ {
+ "x": 340.0,
+ "y": 1150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 135.0,
+ "y": 2670.0
+ },
+ {
+ "x": 30.0,
+ "y": 2670.0
+ },
+ {
+ "x": 30.0,
+ "y": 2635.0
+ },
+ {
+ "x": 35.0,
+ "y": 2635.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 140.0,
+ "y": 2675.0
+ },
+ {
+ "x": 35.0,
+ "y": 2675.0
+ },
+ {
+ "x": 35.0,
+ "y": 2640.0
+ },
+ {
+ "x": 40.0,
+ "y": 2640.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "C1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "C2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 145.0,
+ "y": 2680.0
+ },
+ {
+ "x": 40.0,
+ "y": 2680.0
+ },
+ {
+ "x": 40.0,
+ "y": 2645.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "IQn+3"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 2650.0
+ },
+ {
+ "x": 5.0,
+ "y": 2655.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "IQn"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 2550.0
+ },
+ {
+ "x": 5.0,
+ "y": 2545.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 2665.0
+ },
+ {
+ "x": 25.0,
+ "y": 2665.0
+ },
+ {
+ "x": 25.0,
+ "y": 2630.0
+ },
+ {
+ "x": 30.0,
+ "y": 2630.0
+ },
+ {
+ "x": 30.0,
+ "y": 2555.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Q1"
+ },
+ "path": [
+ {
+ "x": 220.0,
+ "y": 2305.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Q2"
+ },
+ "path": [
+ {
+ "x": 225.0,
+ "y": 2505.0
+ },
+ {
+ "x": 225.0,
+ "y": 2315.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Q3"
+ },
+ "path": [
+ {
+ "x": 230.0,
+ "y": 2515.0
+ },
+ {
+ "x": 230.0,
+ "y": 2325.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Q4"
+ },
+ "path": [
+ {
+ "x": 235.0,
+ "y": 2335.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 2565.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 2575.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "Cn+4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn+4"
+ },
+ "path": [
+ {
+ "x": 315.0,
+ "y": 2155.0
+ },
+ {
+ "x": 315.0,
+ "y": 550.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "OVR"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "OVR"
+ },
+ "path": [
+ {
+ "x": 320.0,
+ "y": 2165.0
+ },
+ {
+ "x": 320.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "F1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "F4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "ORAMn"
+ },
+ "path": [
+ {
+ "x": 325.0,
+ "y": 2115.0
+ },
+ {
+ "x": 325.0,
+ "y": 850.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 330.0,
+ "y": 2145.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "ORAMn+3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#21",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F3"
+ },
+ "path": [
+ {
+ "x": 330.0,
+ "y": 750.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 280.0,
+ "y": 2090.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "F2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 285.0,
+ "y": 2125.0
+ },
+ {
+ "x": 285.0,
+ "y": 2095.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode#0",
+ "pinName": "F3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 290.0,
+ "y": 2135.0
+ },
+ {
+ "x": 290.0,
+ "y": 2100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#20",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 295.0,
+ "y": 2105.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIor4#0",
+ "pinName": "A1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIor4#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIor4#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIor4#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#26",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I1_1"
+ },
+ "path": [
+ {
+ "x": 255.0,
+ "y": 190.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#27",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I1_2"
+ },
+ "path": [
+ {
+ "x": 260.0,
+ "y": 200.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#28",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I1_3"
+ },
+ "path": [
+ {
+ "x": 265.0,
+ "y": 210.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#29",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "I1_4"
+ },
+ "path": [
+ {
+ "x": 270.0,
+ "y": 220.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#22",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 2090.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#23",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 2095.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#24",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#32",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 2100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "IRAMn"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 2350.0
+ },
+ {
+ "x": 5.0,
+ "y": 2345.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#32",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#31",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#33",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#32",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#34",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#25",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#35",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 2105.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#30",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#36",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#36",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#33",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#34",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#35",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#33",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#37",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#34",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#38",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#35",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#39",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#37",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#38",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#39",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "IRAMn+3"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 2450.0
+ },
+ {
+ "x": 5.0,
+ "y": 2455.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#36",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 2585.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#37",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 2595.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#38",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 2605.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#39",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#1",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 2615.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "D1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "D2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "D3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "D4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "RAMWE"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIram4#0",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 230.0,
+ "y": 70.0
+ },
+ {
+ "x": 230.0,
+ "y": 105.0
+ },
+ {
+ "x": 90.0,
+ "y": 105.0
+ },
+ {
+ "x": 90.0,
+ "y": 2305.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "QWE"
+ },
+ "pin2": {
+ "compName": "GUIAm2901QReg#0",
+ "pinName": "WE"
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 100.0
+ },
+ {
+ "x": 85.0,
+ "y": 2505.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901DestDecode#0",
+ "pinName": "YF"
+ },
+ "pin2": {
+ "compName": "GUImux1_4#0",
+ "pinName": "S0"
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 80.0
+ },
+ {
+ "x": 70.0,
+ "y": 140.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y1"
+ },
+ "path": [
+ {
+ "x": 335.0,
+ "y": 140.0
+ },
+ {
+ "x": 335.0,
+ "y": 50.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y3"
+ },
+ "path": [
+ {
+ "x": 335.0,
+ "y": 160.0
+ },
+ {
+ "x": 335.0,
+ "y": 250.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Y4"
+ },
+ "path": [
+ {
+ "x": 325.0,
+ "y": 170.0
+ },
+ {
+ "x": 325.0,
+ "y": 350.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIor4#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#40",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#40",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 315.0,
+ "y": 445.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#40",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 315.0,
+ "y": 455.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F\u003d0"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 60.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "SBE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "FN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "SN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I5",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "L",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "RN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "CinE",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.25,
+ "subComps": [
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 10.0
+ },
+ "id": "GUInand3",
+ "name": "GUInand3#0"
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 70.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 55.0,
+ "y": 45.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 100.0,
+ "y": 135.0
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 44.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 64.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 54.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 99.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 84.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 74.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 34.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 100.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I5"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 45.0
+ },
+ {
+ "x": 45.0,
+ "y": 50.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "FN"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 40.0
+ },
+ {
+ "x": 45.0,
+ "y": 40.0
+ },
+ {
+ "x": 45.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "SN"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 105.0
+ },
+ {
+ "x": 135.0,
+ "y": 105.0
+ },
+ {
+ "x": 135.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "RN"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 220.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "CinE"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 5.0
+ },
+ {
+ "x": 115.0,
+ "y": 5.0
+ },
+ {
+ "x": 115.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUInand3#0",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUInand3#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "L"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "SBE"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901ALUFuncDecode",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 120.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "R2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 105.0
+ },
+ "name": "S3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "R3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 115.0
+ },
+ "name": "S4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "R4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "OVR",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "Cn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "F1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I5",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "F2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "F3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "F4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "Cn+4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "S1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "R1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "S2",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.25,
+ "subComps": [
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 354.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 254.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 36.5,
+ "y": 264.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#16",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 36.5,
+ "y": 164.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 84.0,
+ "y": 374.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#18",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 36.5,
+ "y": 364.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#17",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 20.0,
+ "y": 2.5
+ },
+ "id": "GUIAm2901ALUFuncDecode",
+ "name": "GUIAm2901ALUFuncDecode#0"
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 80.0
+ },
+ "id": "GUIAm2901ALUOneBit",
+ "name": "GUIAm2901ALUOneBit#0"
+ },
+ {
+ "pos": {
+ "x": 84.0,
+ "y": 384.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#19",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 95.0,
+ "y": 400.0
+ },
+ "id": "GUIxor",
+ "name": "GUIxor#0"
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 194.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 94.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 26.5,
+ "y": 104.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 294.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 26.5,
+ "y": 304.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 26.5,
+ "y": 204.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 180.0
+ },
+ "id": "GUIAm2901ALUOneBit",
+ "name": "GUIAm2901ALUOneBit#1"
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 224.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 280.0
+ },
+ "id": "GUIAm2901ALUOneBit",
+ "name": "GUIAm2901ALUOneBit#2"
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 124.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 380.0
+ },
+ "id": "GUIAm2901ALUOneBit",
+ "name": "GUIAm2901ALUOneBit#3"
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 144.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 29.0,
+ "y": 324.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 244.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 154.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 344.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I5"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "I5"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 20.0
+ },
+ {
+ "x": 5.0,
+ "y": 7.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "I4"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 60.0
+ },
+ {
+ "x": 10.0,
+ "y": 17.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "I3"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 100.0
+ },
+ {
+ "x": 15.0,
+ "y": 27.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "SBE"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 62.5,
+ "y": 37.5
+ },
+ {
+ "x": 62.5,
+ "y": 70.0
+ },
+ {
+ "x": 25.0,
+ "y": 70.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "CoutE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "CoutE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "CoutE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "CoutE"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 395.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "CinE"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 7.5
+ },
+ {
+ "x": 70.0,
+ "y": 77.5
+ },
+ {
+ "x": 27.5,
+ "y": 77.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "CinE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "CinE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "CinE"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "CinE"
+ },
+ "path": [
+ {
+ "x": 27.5,
+ "y": 405.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "RN"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 57.5,
+ "y": 57.5
+ },
+ {
+ "x": 57.5,
+ "y": 65.0
+ },
+ {
+ "x": 30.0,
+ "y": 65.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "RN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "RN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "RN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "RN"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 425.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "SN"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 27.5
+ },
+ {
+ "x": 65.0,
+ "y": 72.5
+ },
+ {
+ "x": 32.5,
+ "y": 72.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "SN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "SN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "SN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "SN"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 445.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "FN"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 47.5
+ },
+ {
+ "x": 60.0,
+ "y": 67.5
+ },
+ {
+ "x": 35.0,
+ "y": 67.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "FN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "FN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "FN"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "FN"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 455.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUFuncDecode#0",
+ "pinName": "L"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 67.5,
+ "y": 17.5
+ },
+ {
+ "x": 67.5,
+ "y": 75.0
+ },
+ {
+ "x": 37.5,
+ "y": 75.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "L"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#16",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "L"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "L"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#17",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "L"
+ },
+ "path": [
+ {
+ "x": 37.5,
+ "y": 465.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "R1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "R"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 180.0
+ },
+ {
+ "x": 10.0,
+ "y": 115.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "R2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "R"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 220.0
+ },
+ {
+ "x": 10.0,
+ "y": 215.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "R3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "R"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 260.0
+ },
+ {
+ "x": 10.0,
+ "y": 315.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "R4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "R"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 300.0
+ },
+ {
+ "x": 20.0,
+ "y": 415.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "S"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 340.0
+ },
+ {
+ "x": 15.0,
+ "y": 135.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "S"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 380.0
+ },
+ {
+ "x": 5.0,
+ "y": 235.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "S"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 420.0
+ },
+ {
+ "x": 10.0,
+ "y": 335.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "S"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 460.0
+ },
+ {
+ "x": 10.0,
+ "y": 435.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "Cin"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 140.0
+ },
+ {
+ "x": 5.0,
+ "y": 85.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "Cout"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "Cin"
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 85.0
+ },
+ {
+ "x": 85.0,
+ "y": 175.0
+ },
+ {
+ "x": 40.0,
+ "y": 175.0
+ },
+ {
+ "x": 40.0,
+ "y": 185.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "Cout"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "Cin"
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 185.0
+ },
+ {
+ "x": 85.0,
+ "y": 275.0
+ },
+ {
+ "x": 40.0,
+ "y": 275.0
+ },
+ {
+ "x": 40.0,
+ "y": 285.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "Cout"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 285.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "Cin"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 375.0
+ },
+ {
+ "x": 40.0,
+ "y": 385.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "Cout"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#0",
+ "pinName": "F"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F1"
+ },
+ "path": [
+ {
+ "x": 90.0,
+ "y": 95.0
+ },
+ {
+ "x": 90.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#1",
+ "pinName": "F"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F2"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 195.0
+ },
+ {
+ "x": 95.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#2",
+ "pinName": "F"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F3"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 295.0
+ },
+ {
+ "x": 100.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUOneBit#3",
+ "pinName": "F"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F4"
+ },
+ "path": [
+ {
+ "x": 105.0,
+ "y": 395.0
+ },
+ {
+ "x": 105.0,
+ "y": 140.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#18",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIxor#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 90.0,
+ "y": 375.0
+ },
+ {
+ "x": 90.0,
+ "y": 405.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIxor#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 415.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#19",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn+4"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 385.0
+ },
+ {
+ "x": 130.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIxor#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "OVR"
+ }
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901ALUInclDecode",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 230.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 195.0
+ },
+ "name": "Q1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 205.0
+ },
+ "name": "Q2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 215.0
+ },
+ "name": "Q3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 225.0
+ },
+ "name": "Q4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "I0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "I1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "I2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "OVR",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "Cn",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I5",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 115.0
+ },
+ "name": "A1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 125.0
+ },
+ "name": "A2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 135.0
+ },
+ "name": "A3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 145.0
+ },
+ "name": "A4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "Cn+4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "F1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "F2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "F3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "F4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 95.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 155.0
+ },
+ "name": "B1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 105.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 165.0
+ },
+ "name": "B2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 175.0
+ },
+ "name": "B3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 185.0
+ },
+ "name": "B4",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.25,
+ "subComps": [
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 575.0
+ },
+ "id": "GUIsel3_4",
+ "name": "GUIsel3_4#0"
+ },
+ {
+ "pos": {
+ "x": 14.0,
+ "y": 499.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 459.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 60.0,
+ "y": 15.0
+ },
+ "id": "GUIAm2901ALUInclDecode",
+ "name": "GUIAm2901ALUInclDecode#0"
+ },
+ {
+ "pos": {
+ "x": 24.0,
+ "y": 579.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 19.0,
+ "y": 539.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 45.0,
+ "y": 365.0
+ },
+ "id": "GUIsel2_4",
+ "name": "GUIsel2_4#0"
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 165.0
+ },
+ "id": "GUIAm2901SourceDecode",
+ "name": "GUIAm2901SourceDecode#0"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I5"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "I5"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "I4"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 60.0
+ },
+ {
+ "x": 5.0,
+ "y": 30.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "I3"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 100.0
+ },
+ {
+ "x": 15.0,
+ "y": 40.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "I2"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 140.0
+ },
+ {
+ "x": 5.0,
+ "y": 170.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "I1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0"
+ },
+ "pin2": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 220.0
+ },
+ {
+ "x": 5.0,
+ "y": 190.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "Cn"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 260.0
+ },
+ {
+ "x": 10.0,
+ "y": 50.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 300.0
+ },
+ {
+ "x": 15.0,
+ "y": 390.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 340.0
+ },
+ {
+ "x": 10.0,
+ "y": 400.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 380.0
+ },
+ {
+ "x": 5.0,
+ "y": 410.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "A4"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A3"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "A4"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 430.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B2"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 440.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 450.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 460.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A1"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 610.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A2"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 620.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A3"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 630.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "A4"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 640.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B1"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B1"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 620.0
+ },
+ {
+ "x": 5.0,
+ "y": 650.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B2"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B3"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B3"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 700.0
+ },
+ {
+ "x": 5.0,
+ "y": 670.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "B4"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "B4"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 740.0
+ },
+ {
+ "x": 10.0,
+ "y": 680.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Q1"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C1"
+ },
+ "path": [
+ {
+ "x": 15.0,
+ "y": 780.0
+ },
+ {
+ "x": 15.0,
+ "y": 690.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Q2"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C2"
+ },
+ "path": [
+ {
+ "x": 20.0,
+ "y": 820.0
+ },
+ {
+ "x": 20.0,
+ "y": 700.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Q3"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C3"
+ },
+ "path": [
+ {
+ "x": 25.0,
+ "y": 860.0
+ },
+ {
+ "x": 25.0,
+ "y": 710.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Q4"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "C4"
+ },
+ "path": [
+ {
+ "x": 30.0,
+ "y": 900.0
+ },
+ {
+ "x": 30.0,
+ "y": 720.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "SQ"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SC"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 170.0
+ },
+ {
+ "x": 75.0,
+ "y": 240.0
+ },
+ {
+ "x": 30.0,
+ "y": 240.0
+ },
+ {
+ "x": 30.0,
+ "y": 600.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "RA"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "SB"
+ },
+ "path": [
+ {
+ "x": 70.0,
+ "y": 180.0
+ },
+ {
+ "x": 70.0,
+ "y": 235.0
+ },
+ {
+ "x": 20.0,
+ "y": 235.0
+ },
+ {
+ "x": 20.0,
+ "y": 380.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "SB"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SB"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 190.0
+ },
+ {
+ "x": 65.0,
+ "y": 230.0
+ },
+ {
+ "x": 35.0,
+ "y": 230.0
+ },
+ {
+ "x": 35.0,
+ "y": 590.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "SA"
+ },
+ "pin2": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "SA"
+ },
+ "path": [
+ {
+ "x": 60.0,
+ "y": 200.0
+ },
+ {
+ "x": 60.0,
+ "y": 225.0
+ },
+ {
+ "x": 40.0,
+ "y": 225.0
+ },
+ {
+ "x": 40.0,
+ "y": 580.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901SourceDecode#0",
+ "pinName": "RD"
+ },
+ "pin2": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "SA"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 210.0
+ },
+ {
+ "x": 55.0,
+ "y": 220.0
+ },
+ {
+ "x": 25.0,
+ "y": 220.0
+ },
+ {
+ "x": 25.0,
+ "y": 370.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "R1"
+ },
+ "path": [
+ {
+ "x": 82.5,
+ "y": 370.0
+ },
+ {
+ "x": 82.5,
+ "y": 162.5
+ },
+ {
+ "x": 20.0,
+ "y": 162.5
+ },
+ {
+ "x": 20.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "R2"
+ },
+ "path": [
+ {
+ "x": 85.0,
+ "y": 380.0
+ },
+ {
+ "x": 85.0,
+ "y": 160.0
+ },
+ {
+ "x": 22.5,
+ "y": 160.0
+ },
+ {
+ "x": 22.5,
+ "y": 70.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "R3"
+ },
+ "path": [
+ {
+ "x": 87.5,
+ "y": 390.0
+ },
+ {
+ "x": 87.5,
+ "y": 157.5
+ },
+ {
+ "x": 25.0,
+ "y": 157.5
+ },
+ {
+ "x": 25.0,
+ "y": 80.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel2_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "R4"
+ },
+ "path": [
+ {
+ "x": 90.0,
+ "y": 400.0
+ },
+ {
+ "x": 90.0,
+ "y": 155.0
+ },
+ {
+ "x": 27.5,
+ "y": 155.0
+ },
+ {
+ "x": 27.5,
+ "y": 90.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y1"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "S1"
+ },
+ "path": [
+ {
+ "x": 92.5,
+ "y": 580.0
+ },
+ {
+ "x": 92.5,
+ "y": 152.5
+ },
+ {
+ "x": 30.0,
+ "y": 152.5
+ },
+ {
+ "x": 30.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y2"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "S2"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 590.0
+ },
+ {
+ "x": 95.0,
+ "y": 150.0
+ },
+ {
+ "x": 32.5,
+ "y": 150.0
+ },
+ {
+ "x": 32.5,
+ "y": 110.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y3"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "S3"
+ },
+ "path": [
+ {
+ "x": 97.5,
+ "y": 600.0
+ },
+ {
+ "x": 97.5,
+ "y": 147.5
+ },
+ {
+ "x": 35.0,
+ "y": 147.5
+ },
+ {
+ "x": 35.0,
+ "y": 120.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIsel3_4#0",
+ "pinName": "Y4"
+ },
+ "pin2": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "S4"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 610.0
+ },
+ {
+ "x": 100.0,
+ "y": 145.0
+ },
+ {
+ "x": 37.5,
+ "y": 145.0
+ },
+ {
+ "x": 37.5,
+ "y": 130.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "F1"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "F2"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F2"
+ },
+ "path": [
+ {
+ "x": 135.0,
+ "y": 30.0
+ },
+ {
+ "x": 135.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "F3"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F3"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 40.0
+ },
+ {
+ "x": 130.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "F4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F4"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 50.0
+ },
+ {
+ "x": 125.0,
+ "y": 140.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "Cn+4"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Cn+4"
+ },
+ "path": [
+ {
+ "x": 120.0,
+ "y": 60.0
+ },
+ {
+ "x": 120.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIAm2901ALUInclDecode#0",
+ "pinName": "OVR"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "OVR"
+ },
+ "path": [
+ {
+ "x": 115.0,
+ "y": 70.0
+ },
+ {
+ "x": 115.0,
+ "y": 220.0
+ }
+ ]
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 90.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "R",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "S",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "F",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 75.0
+ },
+ "name": "FN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "Cin",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 65.0
+ },
+ "name": "SN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Cout",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "RN",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 85.0
+ },
+ "name": "L",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "CinE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "CoutE",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.2,
+ "subComps": [
+ {
+ "pos": {
+ "x": 60.0,
+ "y": 55.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 54.0,
+ "y": 69.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 49.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 90.0,
+ "y": 70.0
+ },
+ "id": "GUImux1",
+ "name": "GUImux1#0"
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 20.0
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 290.0
+ },
+ "id": "GUIxor",
+ "name": "GUIxor#1"
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 70.0
+ },
+ "id": "GUIxor",
+ "name": "GUIxor#2"
+ },
+ {
+ "pos": {
+ "x": 60.0,
+ "y": 20.0
+ },
+ "id": "GUIfulladder",
+ "name": "GUIfulladder#0"
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 190.0
+ },
+ "id": "GUIxor",
+ "name": "GUIxor#0"
+ },
+ {
+ "pos": {
+ "x": 135.0,
+ "y": 20.0
+ },
+ "id": "GUIand",
+ "name": "GUIand#1"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "Cin"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "CoutE"
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 75.0
+ },
+ {
+ "x": 5.0,
+ "y": 10.0
+ },
+ {
+ "x": 130.0,
+ "y": 10.0
+ },
+ {
+ "x": 130.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "CinE"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 125.0
+ },
+ {
+ "x": 7.5,
+ "y": 35.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "R"
+ },
+ "pin2": {
+ "compName": "GUIxor#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "RN"
+ },
+ "pin2": {
+ "compName": "GUIxor#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "S"
+ },
+ "pin2": {
+ "compName": "GUIxor#1",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "SN"
+ },
+ "pin2": {
+ "compName": "GUIxor#1",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "FN"
+ },
+ "pin2": {
+ "compName": "GUIxor#2",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 375.0
+ },
+ {
+ "x": 130.0,
+ "y": 85.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "L"
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "S0"
+ },
+ "path": [
+ {
+ "x": 87.5,
+ "y": 425.0
+ },
+ {
+ "x": 87.5,
+ "y": 75.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIfulladder#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIxor#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 195.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIfulladder#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 50.0,
+ "y": 35.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIxor#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 295.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIfulladder#0",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 55.0,
+ "y": 45.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIfulladder#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "I0"
+ },
+ "path": [
+ {
+ "x": 100.0,
+ "y": 25.0
+ },
+ {
+ "x": 100.0,
+ "y": 65.0
+ },
+ {
+ "x": 85.0,
+ "y": 65.0
+ },
+ {
+ "x": 85.0,
+ "y": 85.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIfulladder#0",
+ "pinName": "Z"
+ },
+ "pin2": {
+ "compName": "GUIand#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUImux1#0",
+ "pinName": "I1"
+ },
+ "path": [
+ {
+ "x": 82.5,
+ "y": 65.0
+ },
+ {
+ "x": 82.5,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUImux1#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUIxor#2",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Cout"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIxor#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "F"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901ALUOneBit",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 60.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "LSH",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "NSH",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "RSH",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I6",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "YF",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I7",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "RAMWE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 55.0
+ },
+ "name": "QWE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I8",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.25,
+ "subComps": [
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 159.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 104.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 150.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 15.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 109.0,
+ "y": 214.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 14.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 24.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 104.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 9.0,
+ "y": 64.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 154.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 54.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 44.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 39.0,
+ "y": 134.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 99.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 74.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 115.0,
+ "y": 210.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 110.0,
+ "y": 105.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 145.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 80.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 130.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I8"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I7"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 55.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I6"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 165.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 5.0
+ },
+ {
+ "x": 40.0,
+ "y": 5.0
+ },
+ {
+ "x": 40.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 65.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "NSH"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 5.0
+ },
+ {
+ "x": 135.0,
+ "y": 5.0
+ },
+ {
+ "x": 135.0,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 45.0,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 10.0,
+ "y": 115.0
+ },
+ {
+ "x": 45.0,
+ "y": 115.0
+ },
+ {
+ "x": 45.0,
+ "y": 105.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 40.0,
+ "y": 145.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "RAMWE"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 60.0
+ },
+ {
+ "x": 125.0,
+ "y": 100.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "LSH"
+ },
+ "path": [
+ {
+ "x": 125.0,
+ "y": 140.0
+ },
+ {
+ "x": 125.0,
+ "y": 180.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 150.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#8",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "RSH"
+ },
+ "path": [
+ {
+ "x": 130.0,
+ "y": 20.0
+ },
+ {
+ "x": 130.0,
+ "y": 60.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#9",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 75.0,
+ "y": 170.0
+ },
+ {
+ "x": 105.0,
+ "y": 170.0
+ },
+ {
+ "x": 105.0,
+ "y": 120.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#10",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 110.0,
+ "y": 155.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#12",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#12",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 110.0,
+ "y": 225.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#11",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "YF"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#12",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "QWE"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901DestDecode",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 60.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 0.0,
+ "y": 55.0
+ },
+ "name": "D4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "Q1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "Q2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "Q3",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "C",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "Q4",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "D1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "WE",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 35.0
+ },
+ "name": "D2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 45.0
+ },
+ "name": "D3",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.4,
+ "subComps": [
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 32.5
+ },
+ "id": "GUIdff",
+ "name": "GUIdff#1"
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 7.5
+ },
+ "id": "GUIdff",
+ "name": "GUIdff#0"
+ },
+ {
+ "pos": {
+ "x": 41.5,
+ "y": 36.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 41.5,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 41.5,
+ "y": 61.5
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 5.0,
+ "y": 15.0
+ },
+ "id": "GUIand",
+ "name": "GUIand#0"
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 82.5
+ },
+ "id": "GUIdff",
+ "name": "GUIdff#3"
+ },
+ {
+ "pos": {
+ "x": 50.0,
+ "y": 57.5
+ },
+ "id": "GUIdff",
+ "name": "GUIdff#2"
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "C"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "WE"
+ },
+ "pin2": {
+ "compName": "GUIand#0",
+ "pinName": "B"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUIand#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdff#0",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 42.5,
+ "y": 12.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdff#1",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdff#2",
+ "pinName": "C"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUIdff#3",
+ "pinName": "C"
+ },
+ "path": [
+ {
+ "x": 42.5,
+ "y": 87.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D1"
+ },
+ "pin2": {
+ "compName": "GUIdff#0",
+ "pinName": "D"
+ },
+ "path": [
+ {
+ "x": 17.5,
+ "y": 62.5
+ },
+ {
+ "x": 17.5,
+ "y": 42.5
+ },
+ {
+ "x": 45.0,
+ "y": 42.5
+ },
+ {
+ "x": 45.0,
+ "y": 22.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D2"
+ },
+ "pin2": {
+ "compName": "GUIdff#1",
+ "pinName": "D"
+ },
+ "path": [
+ {
+ "x": 22.5,
+ "y": 87.5
+ },
+ {
+ "x": 22.5,
+ "y": 47.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D3"
+ },
+ "pin2": {
+ "compName": "GUIdff#2",
+ "pinName": "D"
+ },
+ "path": [
+ {
+ "x": 27.5,
+ "y": 112.5
+ },
+ {
+ "x": 27.5,
+ "y": 72.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "D4"
+ },
+ "pin2": {
+ "compName": "GUIdff#3",
+ "pinName": "D"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 137.5
+ },
+ {
+ "x": 32.5,
+ "y": 97.5
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUIdff#0",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q1"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdff#1",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q2"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdff#2",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q3"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUIdff#3",
+ "pinName": "Q"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "Q4"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "GUIAm2901QReg",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "width": 35.0,
+ "height": 50.0,
+ "interfacePins": [
+ {
+ "location": {
+ "x": 35.0,
+ "y": 45.0
+ },
+ "name": "RD",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 25.0
+ },
+ "name": "I0",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 15.0
+ },
+ "name": "I1",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 0.0,
+ "y": 5.0
+ },
+ "name": "I2",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 5.0
+ },
+ "name": "SQ",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 35.0
+ },
+ "name": "SA",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 15.0
+ },
+ "name": "RA",
+ "logicWidth": 1
+ },
+ {
+ "location": {
+ "x": 35.0,
+ "y": 25.0
+ },
+ "name": "SB",
+ "logicWidth": 1
+ }
+ ],
+ "submodel": {
+ "innerScale": 0.25,
+ "subComps": [
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 94.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 139.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 10.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 94.0,
+ "y": 179.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#15",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#1",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 19.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#0",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#3",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 4.0,
+ "y": 144.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#2",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 104.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 6.5,
+ "y": 99.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 31.5,
+ "y": 54.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#6",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 134.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 34.0,
+ "y": 64.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 36.5,
+ "y": 99.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 99.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 64.0,
+ "y": 59.0
+ },
+ "id": "WireCrossPoint",
+ "name": "WireCrossPoint#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 70.0,
+ "y": 170.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#12",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 70.0,
+ "y": 130.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#11",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 100.0,
+ "y": 170.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#14",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 100.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#13",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 70.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#10",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 70.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#9",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 70.0,
+ "y": 10.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#8",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 90.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#5",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 50.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#4",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 170.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#7",
+ "params": 1
+ },
+ {
+ "pos": {
+ "x": 40.0,
+ "y": 130.0
+ },
+ "id": "GUINandGate",
+ "name": "GUINandGate#6",
+ "params": 1
+ }
+ ],
+ "innerWires": [
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I2"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 5.0
+ },
+ {
+ "x": 35.0,
+ "y": 5.0
+ },
+ {
+ "x": 35.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#1",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#0",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#0",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#2",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#12",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 5.0,
+ "y": 195.0
+ },
+ {
+ "x": 65.0,
+ "y": 195.0
+ },
+ {
+ "x": 65.0,
+ "y": 185.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I1"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 55.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#3",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#1",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 65.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "_submodelinterface",
+ "pinName": "I0"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#4",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#2",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#5",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 7.5,
+ "y": 112.5
+ },
+ {
+ "x": 32.5,
+ "y": 112.5
+ },
+ {
+ "x": 32.5,
+ "y": 105.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#0",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 20.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#6",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#5",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 32.5,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#1",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#3",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#7",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#4",
+ "pinName": "B"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#8",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#6",
+ "pinName": "A"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#9",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 35.0,
+ "y": 175.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#2",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 37.5,
+ "y": 35.0
+ },
+ {
+ "x": 65.0,
+ "y": 35.0
+ },
+ {
+ "x": 65.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#10",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#7",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 37.5,
+ "y": 185.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#3",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#8",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#4",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 55.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#11",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#9",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 65.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#5",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 95.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#12",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#10",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 105.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#6",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 135.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#13",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#11",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 65.0,
+ "y": 145.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#7",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "GUINandGate#12",
+ "pinName": "A"
+ }
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#8",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#13",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 15.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#14",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#13",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 25.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#9",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "RA"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#10",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "SB"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#11",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "SA"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#12",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#14",
+ "pinName": "A"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 175.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "WireCrossPoint#15",
+ "pinName": ""
+ },
+ "pin2": {
+ "compName": "GUINandGate#14",
+ "pinName": "B"
+ },
+ "path": [
+ {
+ "x": 95.0,
+ "y": 185.0
+ }
+ ]
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#13",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "SQ"
+ },
+ "path": []
+ },
+ {
+ "pin1": {
+ "compName": "GUINandGate#14",
+ "pinName": "Y"
+ },
+ "pin2": {
+ "compName": "_submodelinterface",
+ "pinName": "RD"
+ },
+ "path": []
+ }
+ ]
+ },
+ "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
+ "symbolRendererParams": {
+ "centerText": "Am2901SourceDecode",
+ "horizontalComponentCenter": 17.5,
+ "centerTextHeight": 5.0,
+ "pinLabelHeight": 3.5,
+ "pinLabelMargin": 0.5
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.editor;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class DialogManager
+{
+ private Shell parent;
+
+ public DialogManager(Shell parent)
+ {
+ this.parent = parent;
+ }
+
+ public void openWarningDialog(String title, String message)
+ {
+ MessageBox b = new MessageBox(parent, SWT.ICON_WARNING | SWT.OK);
+ b.setText(title);
+ b.setMessage(message);
+ b.open();
+ }
+
+ public static class InteractiveDialog
+ {
+ private String[] finalInput;
+ private final Display display;
+ private final Shell shell;
+ private final Button b1, b2;
+ private Text[] textFields;
+ private InteractiveDialog.InteractiveDialogState state;
+
+ public InteractiveDialog(String title, String acceptLabel, String cancelLabel, String... inputs)
+ {
+ display = Display.getDefault();
+ shell = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.ON_TOP | SWT.APPLICATION_MODAL);
+ shell.setMinimumSize(500, 150);
+ shell.setText(title);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ shell.setLayout(layout);
+
+ this.textFields = new Text[inputs.length];
+ for (int i = 0; i < inputs.length; i++)
+ {
+ Label textFieldName = new Label(shell, SWT.NONE);
+ textFieldName.setText(inputs[i].concat(":"));
+ GridData g = new GridData();
+ g.grabExcessHorizontalSpace = true;
+ g.horizontalAlignment = SWT.FILL;
+ Text newTextField = new Text(shell, SWT.BORDER);
+ newTextField.setLayoutData(g);
+ textFields[i] = newTextField;
+ }
+ b1 = new Button(shell, SWT.PUSH);
+ b1.addListener(SWT.Selection, e ->
+ {
+ state = InteractiveDialogState.ACCEPTED;
+ buildFinalInput();
+ dispose();
+ });
+ b1.setText(acceptLabel);
+ b2 = new Button(shell, SWT.PUSH);
+ b2.addListener(SWT.Selection, e ->
+ {
+ state = InteractiveDialogState.CANCELLED;
+ buildFinalInput();
+ dispose();
+ });
+ b2.setText(cancelLabel);
+
+ state = InteractiveDialogState.ACTIVE;
+
+ shell.pack();
+ }
+
+ public String getText()
+ {
+ return getText(0);
+ }
+
+ public String getText(int index)
+ {
+ if (!shell.isDisposed())
+ return textFields[index].getText();
+ else
+ return finalInput[index];
+ }
+
+ public void open()
+ {
+ shell.open();
+ while (!shell.isDisposed())
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+
+ public void dispose()
+ {
+ shell.dispose();
+ }
+
+ public InteractiveDialog.InteractiveDialogState getState()
+ {
+ return state;
+ }
+
+ private void buildFinalInput()
+ {
+ finalInput = new String[textFields.length];
+ for (int i = 0; i < textFields.length; i++)
+ finalInput[i] = textFields[i].getText();
+ }
+
+ public static enum InteractiveDialogState
+ {
+ ACTIVE, ACCEPTED, CANCELLED;
+ }
+ }
+
+ public static void openAddPinDialog(Editor editor, double x, double y)
+ {
+
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor;
+
+import org.eclipse.swt.graphics.Color;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
+import net.mograsim.preferences.Preferences;
+
+public class EditableSubmodelComponent extends DeserializedSubmodelComponent
+{
+ private static final double labelFontHeight = 5;
+ private static final double pinNameFontHeight = 3;
+ private String label;
+
+ public EditableSubmodelComponent(ViewModelModifiable model, String label)
+ {
+ super(model, label); //TODO: set name properly
+ this.label = label;
+ setSubmodelScale(0.2);
+ addSubmodelInterface(new MovablePin(this, "A Pin", 1, 0, 10));
+
+ }
+
+ public ViewModelModifiable getSubmodelModifiable()
+ {
+ return submodelModifiable;
+ }
+
+ @Override
+ protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
+ {
+ Color foreground = Preferences.current().getColor("net.mograsim.logic.model.color.foreground");
+ if (foreground != null)
+ gc.setForeground(foreground);
+ gc.drawRectangle(getBounds());
+ }
+
+ @Override
+ protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
+ {
+ Font oldFont = gc.getFont();
+ gc.setFont(new Font(oldFont.getName(), labelFontHeight, oldFont.getStyle()));
+ Point textExtent = gc.textExtent(label);
+ Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text");
+ if (textColor != null)
+ gc.setForeground(textColor);
+ gc.drawText(label, getPosX() + (getWidth() - textExtent.x) / 2, getPosY() + (getHeight() - textExtent.y) / 2,
+ true);
+ gc.setFont(new Font(oldFont.getName(), pinNameFontHeight, oldFont.getStyle()));
+ for (String name : pinsUnmodifiable.keySet())
+ {
+ Pin p = pinsUnmodifiable.get(name);
+ Point pos = p.getPos();
+ gc.drawText(name, pos.x, pos.y, true);
+ }
+ gc.setFont(oldFont);
+ }
+
+ public void setSubmodelScale(double scale)
+ {
+ super.setSubmodelScale(scale);
+ }
+
+ public double getSubmodelScale()
+ {
+ return super.getSubmodelScale();
+ }
+
+ public void setSize(double width, double height)
+ {
+ super.setSize(width, height);
+ }
+
+ public String getLabel()
+ {
+ return label;
+ }
+
+ public void setLabel(String label)
+ {
+ this.label = label;
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.editor.handles.ComponentHandle;
+import net.mograsim.logic.model.editor.handles.Handle;
+import net.mograsim.logic.model.editor.handles.HandleManager;
+import net.mograsim.logic.model.editor.handles.PinHandle;
+import net.mograsim.logic.model.editor.states.StateManager;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public final class Editor
+{
+ final Selection selection = new Selection();
+ final Set<ComponentInfo> copyBuffer = new HashSet<>();
+ public final DeserializedSubmodelComponent toBeEdited;
+ public final HandleManager handleManager;
+ final static Map<GUIComponent, String> identifierPerComponent = new HashMap<>();
+ public final EditorGUI gui;
+ public final StateManager stateManager;
+ private final SaveLoadManager saveManager;
+ Snapping snapping = Snapping.ABSOLUTE;
+ private double snapX = 5, snapY = 5;
+ public final DialogManager dialogManager;
+
+ public Editor(DeserializedSubmodelComponent toBeEdited)
+ {
+ this.toBeEdited = toBeEdited;
+ handleManager = new HandleManager(this);
+ gui = new EditorGUI(this);
+ stateManager = new StateManager(this);
+ handleManager.init();
+ saveManager = new SaveLoadManager(this);
+ dialogManager = new DialogManager(gui.shell);
+
+ toBeEdited.submodel.addComponentRemovedListener(c -> identifierPerComponent.remove(c));
+
+ gui.open();
+ }
+
+ public ViewModelModifiable getSubmodel()
+ {
+ return toBeEdited.getSubmodelModifiable();
+ }
+
+ public Selection getSelection()
+ {
+ return selection;
+ }
+
+ //TODO: Remove this error prone method: Relative offset may change between multiple moves,
+ //because Handles have different ways of responding to reqMove(...), causing strange behaviour
+ @Deprecated
+ public void moveSelection(double x, double y)
+ {
+ Point ref = selection.getTopLeft();
+ Point snapped = new Point(x, y);
+ applySnapping(snapped);
+
+ for (Handle c : selection)
+ {
+ double newX, newY;
+ newX = snapped.x + c.getPosX() - ref.x;
+ newY = snapped.y + c.getPosY() - ref.y;
+ c.reqMove(newX, newY);
+ }
+ }
+
+ public void moveHandles(double x, double y, Map<Handle, Point> handleOffsetMap)
+ {
+ Point snapped = new Point(x, y);
+ applySnapping(snapped);
+
+ for (Handle c : handleOffsetMap.keySet())
+ {
+ Point offset = handleOffsetMap.get(c);
+ double newX, newY;
+ newX = snapped.x + offset.x;
+ newY = snapped.y + offset.y;
+ c.reqMove(newX, newY);
+ }
+ }
+
+ public void deleteSelection()
+ {
+ selection.forEach(h -> h.reqDelete());
+ selection.clear();
+ }
+
+ public void copy()
+ {
+ copyBuffer.clear();
+ Point refPoint = selection.getTopLeft();
+ for (Handle h : selection)
+ {
+ Optional<ComponentInfo> cInfo = h.reqCopy(refPoint);
+ if(cInfo.isPresent())
+ copyBuffer.add(cInfo.get());
+ }
+ }
+
+ public void paste(double x, double y)
+ {
+ selection.clear();
+ for (ComponentInfo info : copyBuffer)
+ {
+ GUIComponent comp = addComponent(info.identifier, info.params);
+ ComponentHandle h = handleManager.getHandle(comp);
+ h.reqMove(info.relX, info.relY);
+ selection.add(h);
+ }
+ moveSelection(x, y);
+ }
+
+ public void save()
+ {
+ saveManager.save();
+ }
+
+ public void addComponent(double x, double y)
+ {
+ GUIComponent c = addComponent(gui.getAddListSelected(), new JsonObject());
+ selection.clear();
+ selection.add(handleManager.getHandle(c));
+ moveSelection(x, y);
+ }
+
+ private GUIComponent addComponent(String identifier, JsonElement params)
+ {
+ GUIComponent comp = IndirectGUIComponentCreator.createComponent(toBeEdited.getSubmodelModifiable(), identifier,
+ params);
+ identifierPerComponent.put(comp, identifier);
+ return comp;
+ }
+
+ public static String getIdentifier(GUIComponent c)
+ {
+ return identifierPerComponent.get(c);
+ }
+
+ public void duplicate()
+ {
+ copy();
+ Point origin = selection.getTopLeft();
+ paste(origin.x + 20, origin.y + 20);
+ }
+
+ private void applySnapping(Point newP)
+ {
+ switch (snapping)
+ {
+ case OFF:
+ break;
+ case ABSOLUTE:
+ newP.x -= newP.x % snapX;
+ newP.y -= newP.y % snapY;
+ break;
+ }
+ }
+
+ public static class ComponentInfo
+ {
+ public final double relX, relY;
+ public final String identifier;
+ public final JsonElement params;
+
+ public ComponentInfo(double relX, double relY, String identifier, JsonElement params)
+ {
+ this.relX = relX;
+ this.relY = relY;
+ this.identifier = identifier;
+ this.params = params;
+ }
+ }
+
+ public Point getCanvasMousePosition()
+ {
+ //TODO
+ org.eclipse.swt.graphics.Point canvasLoc = gui.logicCanvas.getLocation(),
+ mouseLoc = gui.display.getCursorLocation(), shellLoc = gui.shell.getLocation();
+ return new Point(mouseLoc.x - shellLoc.x - canvasLoc.x, mouseLoc.y - shellLoc.y - canvasLoc.y);
+ }
+
+ public Point getWorldMousePosition()
+ {
+ return gui.logicCanvas.canvasToWorldCoords(getCanvasMousePosition());
+ }
+
+ public void addWire(PinHandle a, PinHandle b)
+ {
+ new GUIWire(toBeEdited.getSubmodelModifiable(), a.getPin(), b.getPin(), new Point[0]);
+ }
+
+ public static enum Snapping
+ {
+ OFF, ABSOLUTE;
+ }
+
+ public static void main(String[] args)
+ {
+ SaveLoadManager.openLoadDialog();
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor;
+
+import java.util.Collection;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Composite;
+
+import net.haspamelodica.swt.helper.gcs.TranslatedGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.LogicUICanvas;
+import net.mograsim.logic.model.editor.handles.Handle;
+import net.mograsim.preferences.Preferences;
+
+public class EditorCanvas extends LogicUICanvas
+{
+ private Collection<Handle> handles;
+
+ public EditorCanvas(Composite parent, int style, Editor editor)
+ {
+ super(parent, style, editor.toBeEdited.submodel);
+
+ handles = editor.handleManager.getHandles();
+ editor.handleManager.addHandleAddedListener(h ->
+ h.addRedrawListener(this::redrawThreadsafe));
+ //Is this even necessary? The Handle should be finalized by the gc
+ editor.handleManager.addHandleRemovedListener(h -> h.removeRedrawListener(this::redrawThreadsafe));
+
+ addZoomedRenderer(gc ->
+ {
+ Rectangle visibleRegion = new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom);
+ Color background = Preferences.current().getColor("net.mograsim.logic.ui.color.background");
+ if (background != null)
+ setBackground(background);// this.setBackground, not gc.setBackground to have the background fill the
+ // canvas
+
+ TranslatedGC tgc = new TranslatedGC(gc, 0.0d, 0.0d, 1 / editor.toBeEdited.getSubmodelScale(), false);
+ editor.toBeEdited.outlineRenderer.render(tgc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
+
+ handles.forEach(h -> h.render(gc, visibleRegion));
+ });
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Shell;
+
+import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay;
+import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class EditorGUI
+{
+ final Display display;
+ final Shell shell;
+ public final EditorCanvas logicCanvas;
+ private final List addList;
+
+ public EditorGUI(Editor editor)
+ {
+ display = Display.getDefault();
+ shell = new Shell(display);
+
+ //Layout
+ GridLayout layout = new GridLayout();
+ shell.setLayout(layout);
+ layout.numColumns = 2;
+
+ GridData d = new GridData();
+ d.grabExcessVerticalSpace = true;
+ d.verticalAlignment = SWT.FILL;
+ addList = new List(shell, SWT.FILL);
+ addList.setLayoutData(d);
+ refreshAddList();
+
+ d = new GridData();
+ d.grabExcessHorizontalSpace = true;
+ d.horizontalAlignment = SWT.FILL;
+ d.grabExcessVerticalSpace = true;
+ d.verticalAlignment = SWT.FILL;
+
+ logicCanvas = new EditorCanvas(shell, SWT.TRAIL, editor);
+ logicCanvas.setLayoutData(d);
+
+
+ new EditorUserInput(editor, this);
+ ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(logicCanvas);
+ userInput.buttonDrag = 3;
+ userInput.buttonZoom = 2;
+ userInput.enableUserInput();
+ new ZoomableCanvasOverlay(logicCanvas, null).enableScale();
+ }
+
+ public void refreshAddList()
+ {
+ addList.setItems(IndirectGUIComponentCreator.getStandardComponentIDs().toArray(String[]::new));
+ addList.select(0);
+ }
+
+ public String getAddListSelected()
+ {
+ String[] selection = addList.getSelection();
+ if(selection.length == 0)
+ throw new IllegalStateException("Selection in the Add Component List may never be empty!");
+ return selection[0];
+ }
+
+ public void open()
+ {
+ shell.open();
+ while (!shell.isDisposed())
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+
+}
--- /dev/null
+package net.mograsim.logic.model.editor;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+
+public class EditorUserInput
+{
+ public EditorUserInput(Editor editor, EditorGUI gui)
+ {
+ gui.logicCanvas.addMouseListener(new MouseListener()
+ {
+ @Override
+ public void mouseDoubleClick(MouseEvent e)
+ {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void mouseDown(MouseEvent e)
+ {
+ Point clicked = editor.gui.logicCanvas.canvasToWorldCoords(e.x, e.y);
+ switch (e.button)
+ {
+ case 1:
+ editor.handleManager.click(clicked, e.stateMask);
+ break;
+ }
+
+ }
+
+ @Override
+ public void mouseUp(MouseEvent e) {}
+ });
+
+ gui.logicCanvas.addMouseMoveListener((e) ->
+ {
+ Point dest = editor.gui.logicCanvas.canvasToWorldCoords(e.x, e.y);
+ editor.stateManager.mouseMoved(dest.x, dest.y);
+ });
+
+ gui.logicCanvas.addKeyListener(new KeyListener()
+ {
+
+ @Override
+ public void keyReleased(KeyEvent e)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void keyPressed(KeyEvent e)
+ {
+ switch (e.keyCode)
+ {
+ case 'c':
+ if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
+ editor.stateManager.copy();
+ break;
+ case 'v':
+ if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
+ editor.stateManager.paste();
+ break;
+ case 'd':
+ if ((e.stateMask & SWT.SHIFT) == SWT.SHIFT)
+ editor.stateManager.duplicate();
+ break;
+ case 'g':
+ editor.stateManager.grab();
+ break;
+ case 'r':
+ editor.stateManager.delete();
+ break;
+ case 's':
+ if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
+ editor.save();
+ break;
+ case 'a':
+ if ((e.stateMask & SWT.SHIFT) == SWT.SHIFT)
+ editor.stateManager.add();
+ break;
+ case 'h':
+ editor.stateManager.boxSelect();
+ break;
+ }
+
+ }
+ });
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.editor;
+
+import java.io.IOException;
+
+import net.mograsim.logic.model.editor.DialogManager.InteractiveDialog;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
+import net.mograsim.logic.model.serializing.SubmodelComponentDeserializer;
+import net.mograsim.logic.model.util.JsonHandler;
+
+public class SaveLoadManager
+{
+ private String savePath = null;
+ private Editor editor;
+
+ public SaveLoadManager(Editor editor)
+ {
+ this.editor = editor;
+ }
+
+ public void save()
+ {
+ if (savePath == null)
+ openSaveAsDialog();
+ else
+ innerSave();
+ }
+
+ public void openSaveAsDialog()
+ {
+ InteractiveDialog d = new InteractiveDialog("Save as...", "Save", "Cancel", "Path");
+ d.open();
+
+ if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(d.getState()))
+ {
+ savePath = d.getText();
+ innerSave();
+ }
+ }
+
+ private void innerSave()
+ {
+ try
+ {
+ JsonHandler.writeJson(editor.toBeEdited.calculateParams(c ->
+ {
+ if (Editor.identifierPerComponent.containsKey(c))
+ return Editor.identifierPerComponent.get(c);
+ return "class:" + c.getClass().getCanonicalName();
+ }), savePath);
+ } catch (IOException e)
+ {
+ savePath = null;
+ System.err.println("Failed to save component!");
+ e.printStackTrace();
+ }
+ }
+
+ public static void openLoadDialog()
+ {
+ InteractiveDialog load = new InteractiveDialog("Load Component...", "Load", "Cancel", "Path");
+ load.open();
+ if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(load.getState()))
+ {
+ new Editor((DeserializedSubmodelComponent) SubmodelComponentDeserializer
+ .create(new ViewModelModifiable(), load.getText()));
+ }
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.DoubleBinaryOperator;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.editor.handles.Handle;
+
+public class Selection implements Iterable<Handle>
+{
+ private Set<Handle> selection = new HashSet<>();
+
+ public Map<Handle, Point> calculateOffsets()
+ {
+ Map<Handle, Point> offsets = new HashMap<>();
+ Point ref = getTopLeft();
+ selection.forEach(h -> offsets.put(h, new Point(h.getPosX() - ref.x, h.getPosY() - ref.y)));
+ return offsets;
+ }
+
+ public Rectangle getBounds()
+ {
+ Point pos1 = getTopLeft();
+ Point pos2 = getBottomRight();
+ return new Rectangle(pos1.x, pos1.y, pos2.x - pos1.x, pos2.y - pos1.y);
+ }
+
+ public double getWidth()
+ {// TODO: Compute this more efficiently
+ return getTopRight().x - getTopLeft().x;
+ }
+
+ public double getHeight()
+ {
+ return getBottomLeft().y - getTopLeft().y;
+ }
+
+ public Point getTopLeft()
+ {
+ return getCorner(Double.MAX_VALUE, Double::min, r -> 0, Double.MAX_VALUE, Double::min, r -> 0);
+ }
+
+ public Point getTopRight()
+ {
+ return getCorner(-Double.MAX_VALUE, Double::max, r -> r.width, Double.MAX_VALUE, Double::min, r -> 0);
+ }
+
+ public Point getBottomLeft()
+ {
+ return getCorner(Double.MAX_VALUE, Double::min, r -> 0, -Double.MAX_VALUE, Double::max, r -> r.height);
+ }
+
+ public Point getBottomRight()
+ {
+ return getCorner(-Double.MAX_VALUE, Double::max, r -> r.width, -Double.MAX_VALUE, Double::max, r -> r.height);
+ }
+
+ public Point getCorner(double xIdentity, DoubleBinaryOperator xOp, Offset xOffset, double yIdentity,
+ DoubleBinaryOperator yOp, Offset yOffset)
+ {
+ double x = xIdentity, y = yIdentity;
+ for (Handle c : selection)
+ {
+ Rectangle bounds = c.getBounds();
+ x = xOp.applyAsDouble(x, bounds.x + xOffset.computeOffset(bounds));
+ y = yOp.applyAsDouble(y, bounds.y + yOffset.computeOffset(bounds));
+ }
+ return new Point(x, y);
+ }
+
+ private static interface Offset
+ {
+ public double computeOffset(Rectangle bounds);
+ }
+
+ public void add(Handle h)
+ {
+ selection.add(h);
+ h.onSelect();
+ }
+
+ public void remove(Handle h)
+ {
+ selection.remove(h);
+ h.onDeselect();
+ }
+
+ public void clear()
+ {
+ selection.forEach(h -> h.onDeselect());
+ selection.clear();
+ }
+
+ public int size()
+ {
+ return selection.size();
+ }
+
+ public boolean contains(Handle h)
+ {
+ return selection.contains(h);
+ }
+
+ public void addAll(Collection<Handle> handles)
+ {
+ handles.forEach(h -> h.onSelect());
+ selection.addAll(handles);
+ }
+
+ @Override
+ public Iterator<Handle> iterator()
+ {
+ return selection.iterator();
+ }
+
+ @Override
+ public String toString()
+ {
+ return selection.toString();
+ }
+
+ public boolean isEmpty()
+ {
+ return selection.isEmpty();
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor.handles;
+
+import java.util.Optional;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.editor.Editor;
+import net.mograsim.logic.model.editor.Editor.ComponentInfo;
+import net.mograsim.logic.model.model.components.GUIComponent;
+
+public class ComponentHandle extends Handle
+{
+ public final GUIComponent parent;
+ private final static double POS_OFFSET = 2.0d;
+ private final static double LENGTH_OFFSET = POS_OFFSET * 2;
+ boolean selected = false;
+
+ public ComponentHandle(GUIComponent parent)
+ {
+ this.parent = parent;
+ Rectangle bounds = parent.getBounds();
+ setSize(bounds.width, bounds.height);
+ parent.addComponentResizedListener((c) ->
+ {
+ Rectangle pBounds = c.getBounds();
+ setSize(pBounds.width, pBounds.height);
+ });
+ moveTo(parent.getPosX(), parent.getPosY());
+ }
+
+ @Override
+ protected void moveTo(double x, double y)
+ {
+ super.moveTo(x, y);
+ parent.moveTo(x, y);
+ }
+
+ @Override
+ protected void render(GeneralGC gc)
+ {
+ if (selected)
+ {
+ gc.setLineWidth(2);
+ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
+ Rectangle bounds = getBounds();
+ bounds.x -= POS_OFFSET;
+ bounds.y -= POS_OFFSET;
+ bounds.width += LENGTH_OFFSET;
+ bounds.height += LENGTH_OFFSET;
+ gc.drawRectangle(bounds);
+ }
+ }
+
+ @Override
+ public void reqMove(double x, double y)
+ {
+ moveTo(x, y);
+ }
+
+ @Override
+ public void onSelect()
+ {
+ selected = true;
+ callRedrawListeners();
+ }
+
+ @Override
+ public void onDeselect()
+ {
+ selected = false;
+ callRedrawListeners();
+ }
+
+ @Override
+ public void reqDelete()
+ {
+ parent.destroy();
+ }
+
+ @Override
+ public Optional<ComponentInfo> reqCopy(Point refPoint)
+ {
+ return Optional.of(new ComponentInfo(parent.getPosX() - refPoint.x, parent.getPosY() - refPoint.y,
+ Editor.getIdentifier(parent), parent.getParams()));
+ }
+
+ @Override
+ public HandleType getType()
+ {
+ return HandleType.COMPONENT;
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.editor.handles;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
+
+public class CornerHandle extends Handle
+{
+ private final static int LENGTH = 5;
+ private final DeserializedSubmodelComponent toBeEdited;
+ private boolean selected;
+
+ public CornerHandle(DeserializedSubmodelComponent toBeEdited)
+ {
+ super();
+ this.toBeEdited = toBeEdited;
+ setSize(LENGTH, LENGTH);
+ initPos();
+ }
+
+ @Override
+ protected void render(GeneralGC gc)
+ {
+ gc.setBackground(Display.getCurrent().getSystemColor(selected ? SWT.COLOR_YELLOW : SWT.COLOR_DARK_GREEN));
+ gc.fillRectangle(getPosX(), getPosY(), LENGTH, LENGTH);
+ }
+
+ private void initPos()
+ {
+ Rectangle bounds = toBeEdited.getBounds();
+ double subScale = toBeEdited.getSubmodelScale();
+ moveTo(bounds.width / subScale, bounds.height / subScale);
+ }
+
+ @Override
+ public void reqMove(double x, double y)
+ {
+ moveTo(x, y);
+ }
+
+ @Override
+ public void onSelect()
+ {
+ selected = true;
+ callRedrawListeners();
+ }
+
+ @Override
+ public void onDeselect()
+ {
+ selected = false;
+ callRedrawListeners();
+ }
+
+ @Override
+ protected void moveTo(double x, double y)
+ {
+ super.moveTo(x, y);
+ double subScale = toBeEdited.getSubmodelScale();
+ toBeEdited.setSize(x * subScale, y * subScale);
+ }
+
+ @Override
+ public HandleType getType()
+ {
+ return HandleType.CORNER;
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.editor.handles;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Optional;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.editor.Editor.ComponentInfo;
+import net.mograsim.logic.model.editor.states.EditorState;
+
+public abstract class Handle
+{
+ private final Rectangle bounds;
+ private final Collection<Runnable> redrawListeners, destroyListeners;
+
+ public Handle()
+ {
+ redrawListeners = new ArrayList<>();
+ destroyListeners = new ArrayList<>();
+ bounds = new Rectangle(0, 0, 0, 0);
+ callRedrawListeners();
+ }
+
+ final public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ if (bounds.intersects(visibleRegion))
+ render(gc);
+ }
+
+ protected abstract void render(GeneralGC gc);
+
+ protected void setSize(double width, double height)
+ {
+ bounds.width = width;
+ bounds.height = height;
+ callRedrawListeners();
+ }
+
+ protected void moveTo(double x, double y)
+ {
+ bounds.x = x;
+ bounds.y = y;
+ callRedrawListeners();
+ }
+
+ public Rectangle getBounds()
+ {
+ return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
+ }
+
+ public void addRedrawListener(Runnable listener)
+ {
+ redrawListeners.add(listener);
+ }
+
+ public void removeRedrawListener(Runnable listener)
+ {
+ redrawListeners.remove(listener);
+ }
+
+ protected void callRedrawListeners()
+ {
+ redrawListeners.forEach(l -> l.run());
+ }
+
+ public double getPosX()
+ {
+ return bounds.x;
+ }
+
+ public double getPosY()
+ {
+ return bounds.y;
+ }
+
+ void destroy()
+ {
+ destroyListeners.forEach(l -> l.run());
+ }
+
+ public void addDestroyListener(Runnable listener)
+ {
+ redrawListeners.add(listener);
+ }
+
+ public void removeDestroyListener(Runnable listener)
+ {
+ redrawListeners.remove(listener);
+ }
+
+ public boolean contains(double x, double y)
+ {
+ return bounds.contains(x, y);
+ }
+
+ public boolean contains(Point p)
+ {
+ return contains(p.x, p.y);
+ }
+
+ /**
+ * Register a mouse click
+ * @param x Coordinate of the click in the world, not the display context
+ * @param y Coordinate of the click in the world, not the display context
+ * @return true if the click was consumed, false otherwise
+ */
+ public boolean click(double x, double y, int stateMask, EditorState state)
+ {
+ if(contains(x, y))
+ return state.clickedHandle(new HandleClickInfo(this, stateMask));
+ return false;
+ }
+
+ //@formatter:off
+ public void reqMove(double x, double y) {}
+ public void reqDelete() {}
+ public Optional<ComponentInfo> reqCopy(Point refPoint) { return Optional.empty(); }
+ public void onSelect() {}
+ public void onDeselect() {}
+ //@formatter:on
+
+ public abstract HandleType getType();
+
+ public static enum HandleType
+ {
+ COMPONENT, STATIC_PIN, INTERFACE_PIN, WIRE_POINT, WIRE, CORNER;
+ }
+
+ public static class HandleClickInfo
+ {
+ public final int stateMask;
+ public final Handle clicked;
+
+ HandleClickInfo(Handle clicked, int stateMask)
+ {
+ this.clicked = clicked;
+ this.stateMask = stateMask;
+ }
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor.handles;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.editor.Editor;
+import net.mograsim.logic.model.editor.states.EditorState;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+
+public class HandleManager
+{
+ private final Map<Pin, StaticPinHandle> handlePerPin;
+ private final Map<Pin, InterfacePinHandle> handlePerInterfacePin;
+ private final Map<GUIWire, List<WirePointHandle>> pointHandlesPerWire;
+ private final Map<GUIWire, WireHandle> handlePerWire;
+ private final Set<Handle> handles;
+ private final Set<WirePointHandle> wirePointHandles;
+ private final Map<GUIComponent, ComponentHandle> handlePerComp;
+
+ private final Collection<Consumer<Handle>> handleAddedListeners;
+ private final Collection<Consumer<Handle>> handleRemovedListeners;
+ private final Editor editor;
+ private boolean initialized = false;
+
+ private CornerHandle cornerHandle;
+
+ public HandleManager(Editor editor)
+ {
+ this.editor = editor;
+ handlePerPin = new HashMap<>();
+ handlePerInterfacePin = new HashMap<>();
+ pointHandlesPerWire = new HashMap<>();
+ handlePerComp = new HashMap<>();
+ handles = new HashSet<>();
+ wirePointHandles = new HashSet<>();
+ handlePerWire = new HashMap<>();
+
+ handleAddedListeners = new ArrayList<>();
+ handleRemovedListeners = new ArrayList<>();
+
+ ViewModelModifiable model = editor.getSubmodel();
+
+ model.addComponentAddedListener(c -> registerComponent(c));
+
+ model.addComponentRemovedListener(c ->
+ {
+ removeComponentHandle(c);
+ });
+
+ model.addWireAddedListener(w ->
+ {
+ registerWire(w);
+ });
+
+ model.addWireRemovedListener(w ->
+ {
+ removeWireHandle(w);
+ removeWirePointHandles(w);
+ });
+ }
+
+ ////////////////////////////////////////
+ // -- Setting up initial handles -- ///
+ //////////////////////////////////////
+
+ public void init()
+ {
+ if (initialized)
+ System.err.println("Warning! HandleManager was already initialized.");
+ else
+ {
+ ViewModelModifiable model = editor.getSubmodel();
+ Map<String, GUIComponent> compsByName = model.getComponentsByName();
+ Set<GUIComponent> comps = new HashSet<>(compsByName.values());
+ GUIComponent interfaceComp = compsByName.get("_submodelinterface");
+ comps.remove(interfaceComp);
+ registerInterfaceComponent(interfaceComp);
+ comps.forEach(c -> registerComponent(c));
+
+ model.getWires().forEach(w -> registerWire(w));
+ addHandle(cornerHandle = new CornerHandle(editor.toBeEdited));
+ }
+ }
+
+ private void registerInterfaceComponent(GUIComponent c)
+ {
+ c.getPins().values().forEach(p -> addInterfacePinHandle(p));
+ c.addPinAddedListener(p -> addInterfacePinHandle(p));
+ c.addPinRemovedListener(p -> removeInterfacePinHandle(p));
+ }
+
+ private void registerComponent(GUIComponent c)
+ {
+ addComponentHandle(c);
+
+ c.getPins().values().forEach(p -> addPinHandle(p));
+
+ c.addPinAddedListener(p -> addPinHandle(p));
+ c.addPinRemovedListener(p -> removePinHandle(p));
+ }
+
+ private void registerWire(GUIWire wire)
+ {
+ wire.addPathChangedListener((w, diff) ->
+ {
+ if(diff != 0)
+ {
+ if(diff > 0)
+ {
+ for(int i = 0; i < diff; i++)
+ addWirePointHandle(w);
+ }
+ else
+ {
+ for(int i = 0; i > diff; i--)
+ {
+ removeLastWirePointHandle(wire);
+ }
+ }
+
+ List<WirePointHandle> wpHandles = pointHandlesPerWire.get(w);
+ int size = wpHandles.size();
+ for(int i = 0; i < size; i++)
+ {
+ wpHandles.get(i).setIndex(i);
+ }
+ }
+ pointHandlesPerWire.get(w).forEach(h -> h.updatePos());
+ });
+ addWireHandle(wire);
+ if (wire.getPath() == null)
+ return;
+ for (int i = 0; i < wire.getPath().length; i++)
+ {
+ addWirePointHandle(wire);
+ }
+ }
+
+ /////////////////////////////////////
+ // -- Adding/Removing handles -- ///
+ ///////////////////////////////////
+
+ private void addComponentHandle(GUIComponent c)
+ {
+ ComponentHandle h = new ComponentHandle(c);
+ handlePerComp.put(c, h);
+ addHandle(h);
+ }
+
+ private void removeComponentHandle(GUIComponent c)
+ {
+ ComponentHandle h = handlePerComp.get(c);
+ handlePerComp.remove(c);
+ removeHandle(h);
+ }
+
+ private void addPinHandle(Pin owner)
+ {
+ StaticPinHandle h = new StaticPinHandle(owner);
+ handlePerPin.put(owner, h);
+ addHandle(h);
+ }
+
+ private void removePinHandle(Pin owner)
+ {
+ StaticPinHandle h = handlePerPin.get(owner);
+ handlePerPin.remove(owner);
+ removeHandle(h);
+ }
+
+ private void addInterfacePinHandle(Pin p)
+ {
+ //The following is not an alternative to the cast, because the new pin is not yet in the map, when the listener is called
+ //editor.toBeEdited.getSubmodelMovablePins().get(p.name);
+ MovablePin pM = (MovablePin) p;
+ InterfacePinHandle h = new InterfacePinHandle(pM, editor.toBeEdited);
+ handlePerInterfacePin.put(pM, h);
+ addHandle(h);
+ }
+
+ private void removeInterfacePinHandle(Pin p)
+ {
+ InterfacePinHandle h = handlePerInterfacePin.get(p);
+ handlePerInterfacePin.remove(p);
+ removeHandle(h);
+ }
+
+ private void addWirePointHandle(GUIWire w)
+ {
+ List<WirePointHandle> wireHandles = pointHandlesPerWire.get(w);
+ WirePointHandle h;
+ if (wireHandles != null)
+ wireHandles.add(h = new WirePointHandle(w, wireHandles.size()));
+ else
+ {
+ wireHandles = new ArrayList<>();
+ h = new WirePointHandle(w, 0);
+ wireHandles.add(h);
+ pointHandlesPerWire.put(h.parent, wireHandles);
+ }
+ this.wirePointHandles.add(h);
+ addHandle(h);
+ }
+
+ private void removeLastWirePointHandle(GUIWire owner)
+ {
+ Handle h = pointHandlesPerWire.get(owner).remove(0);
+ wirePointHandles.remove(h);
+ removeHandle(h);
+ }
+
+ private void removeWirePointHandles(GUIWire owner)
+ {
+ if(!pointHandlesPerWire.containsKey(owner))
+ return;
+ pointHandlesPerWire.get(owner).forEach(h ->
+ {
+ wirePointHandles.remove(h);
+ removeHandle(h);
+ });
+ pointHandlesPerWire.remove(owner);
+ }
+
+ private void addWireHandle(GUIWire w)
+ {
+ WireHandle h = new WireHandle(w);
+ handlePerWire.put(w, h);
+ addHandle(h);
+ }
+
+ private void removeWireHandle(GUIWire w)
+ {
+ WireHandle h = handlePerWire.get(w);
+ handlePerWire.remove(w);
+ removeHandle(h);
+ }
+
+ private void addHandle(Handle h)
+ {
+ handles.add(h);
+ callHandleAddedListeners(h);
+ }
+
+ private void removeHandle(Handle h)
+ {
+ handles.remove(h);
+ callHandleRemovedListeners(h);
+ h.destroy();
+ }
+
+ public StaticPinHandle getHandle(Pin parent)
+ {
+ return handlePerPin.get(parent);
+ }
+
+ public ComponentHandle getHandle(GUIComponent parent)
+ {
+ return handlePerComp.get(parent);
+ }
+
+ public WireHandle getHandle(GUIWire parent)
+ {
+ return handlePerWire.get(parent);
+ }
+
+ public Handle getInterfacePinHandle(Pin p)
+ {
+ return handlePerInterfacePin.get(p);
+ }
+
+ /**
+ * @return A Collection of the registered {@link WirePointHandle}s of the specified wire
+ */
+ public Collection<WirePointHandle> getWirePointHandles(GUIWire parent)
+ {
+ return pointHandlesPerWire.get(parent).stream().collect(Collectors.toSet());
+ }
+
+ /**
+ * @return An unmodifiable view of all registered {@link Handle}s
+ */
+ public Collection<Handle> getHandles()
+ {
+ return Collections.unmodifiableCollection(handles);
+ }
+
+ /**
+ * @return An unmodifiable view of all registered {@link StaticPinHandle}s
+ */
+ public Collection<StaticPinHandle> getPinHandles()
+ {
+ return Collections.unmodifiableCollection(handlePerPin.values());
+ }
+
+ /**
+ * @return An unmodifiable view of all registered {@link InterfacePinHandle}s
+ */
+ public Collection<InterfacePinHandle> getInterfacePinHandles()
+ {
+ return Collections.unmodifiableCollection(handlePerInterfacePin.values());
+ }
+
+ /**
+ * @return An unmodifiable view of all registered {@link ComponentHandle}s
+ */
+ public Collection<ComponentHandle> getComponentHandles()
+ {
+ return Collections.unmodifiableCollection(handlePerComp.values());
+ }
+
+ /**
+ * @return An unmodifiable view of all registered {@link WireHandle}s
+ */
+ public Collection<WireHandle> getWireHandles()
+ {
+ return Collections.unmodifiableCollection(handlePerWire.values());
+ }
+
+ /**
+ * @return An unmodifiable view of all registered {@link WirePointHandle}s
+ */
+ public Collection<WirePointHandle> getWirePointHandles()
+ {
+ return Collections.unmodifiableSet(wirePointHandles);
+ }
+
+ public void click(Point clicked, int stateMask)
+ {
+ EditorState entryState = editor.stateManager.getState();
+
+ if (!cornerHandle.click(clicked.x, clicked.y, stateMask, entryState))
+ if (!click(handlePerPin.values(), clicked, entryState, stateMask))
+ if (!click(handlePerInterfacePin.values(), clicked, entryState, stateMask))
+ if (!click(getWirePointHandles(), clicked, entryState, stateMask))
+ if (!click(handlePerComp.values(), clicked, entryState, stateMask))
+ if (!click(getWireHandles(), clicked, entryState, stateMask))
+ entryState.clickedEmpty(clicked, stateMask);
+ entryState.clicked(clicked, stateMask);
+ }
+
+ private boolean click(Collection<? extends Handle> handles, Point clicked, EditorState state, int stateMask)
+ {
+ for (Handle h : handles)
+ if (h.click(clicked.x, clicked.y, stateMask, state))
+ return true;
+ return false;
+ }
+
+ public void addHandleAddedListener(Consumer<Handle> c)
+ {
+ handleAddedListeners.add(c);
+ }
+
+ private void callHandleAddedListeners(Handle added)
+ {
+ handleAddedListeners.forEach(l -> l.accept(added));
+ }
+
+ public void removeHandleAddedListener(Consumer<Handle> c)
+ {
+ handleAddedListeners.remove(c);
+ }
+
+ public void addHandleRemovedListener(Consumer<Handle> c)
+ {
+ handleRemovedListeners.add(c);
+ }
+
+ private void callHandleRemovedListeners(Handle removed)
+ {
+ handleRemovedListeners.forEach(l -> l.accept(removed));
+ }
+
+ public void removeHandleRemovedListener(Consumer<Handle> c)
+ {
+ handleRemovedListeners.remove(c);
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor.handles;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
+
+public class InterfacePinHandle extends PinHandle
+{
+ private final static int CIRCLE_DIAM = 4, CIRCLE_RADIUS = CIRCLE_DIAM / 2, SELECTED_CIRCLE_OFFSET = 1,
+ SELECTED_CIRCLE_DIAM = SELECTED_CIRCLE_OFFSET * 2 + CIRCLE_DIAM;
+ private final MovablePin parent;
+ private final DeserializedSubmodelComponent owner;
+ private boolean selected = false;
+
+ public InterfacePinHandle(MovablePin parent, DeserializedSubmodelComponent pinOwner)
+ {
+ super();
+ this.parent = parent;
+ this.owner = pinOwner;
+ setSize(CIRCLE_DIAM, CIRCLE_DIAM);
+ initPos();
+ }
+
+ private void initPos()
+ {
+ Point pos = parent.getPos();
+ moveTo(pos.x - CIRCLE_RADIUS, pos.y - CIRCLE_RADIUS);
+ }
+
+ @Override
+ protected void render(GeneralGC gc)
+ {
+ double x = getPosX(), y = getPosY();
+
+ gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
+ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ gc.drawText(parent.name, x + CIRCLE_DIAM, y + CIRCLE_DIAM, true);
+ if (selected)
+ {
+ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
+ gc.drawOval(x - SELECTED_CIRCLE_OFFSET, y - SELECTED_CIRCLE_OFFSET, SELECTED_CIRCLE_DIAM,
+ SELECTED_CIRCLE_DIAM);
+ }
+ gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM);
+ }
+
+ @Override
+ public void reqMove(double x, double y)
+ {
+ moveTo(x, y);
+ }
+
+ @Override
+ public void onSelect()
+ {
+ selected = true;
+ callRedrawListeners();
+ }
+
+ @Override
+ public void onDeselect()
+ {
+ selected = false;
+ callRedrawListeners();
+ }
+
+ @Override
+ public void reqDelete()
+ {
+ owner.removeSubmodelInterface(parent.name);
+ }
+
+ @Override
+ protected void moveTo(double x, double y)
+ {
+ super.moveTo(x, y);
+ parent.setRelPos(getCenterX(), getCenterY());
+ }
+
+ @Override
+ public double getCenterX()
+ {
+ return getPosX() + CIRCLE_RADIUS;
+ }
+
+ @Override
+ public double getCenterY()
+ {
+ return getPosY() + CIRCLE_RADIUS;
+ }
+
+ @Override
+ public HandleType getType()
+ {
+ return HandleType.INTERFACE_PIN;
+ }
+
+ @Override
+ public Pin getPin()
+ {
+ return parent;
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.editor.handles;
+
+import net.mograsim.logic.model.model.wires.Pin;
+
+public abstract class PinHandle extends Handle
+{
+ public PinHandle()
+ {
+ super();
+ }
+
+ public abstract Pin getPin();
+ public abstract double getCenterX();
+ public abstract double getCenterY();
+}
--- /dev/null
+package net.mograsim.logic.model.editor.handles;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.wires.Pin;
+
+public class StaticPinHandle extends PinHandle
+{
+ private final static int CIRCLE_DIAM = 2;
+ private final static int CIRCLE_RADIUS = 1;
+ private final Pin parent;
+
+ public StaticPinHandle(Pin parent)
+ {
+ super();
+ this.parent = parent;
+ setSize(CIRCLE_DIAM, CIRCLE_DIAM);
+ parent.addPinMovedListener((p) -> updatePos());
+ updatePos();
+ }
+
+ @Override
+ protected void render(GeneralGC gc)
+ {
+ gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN));
+ gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM);
+ }
+
+ private void updatePos()
+ {
+ Point pos = parent.getPos();
+ moveTo(pos.x - CIRCLE_RADIUS, pos.y - CIRCLE_RADIUS);
+ }
+
+ @Override
+ public double getCenterX()
+ {
+ return getPosX() + CIRCLE_RADIUS;
+ }
+
+ @Override
+ public double getCenterY()
+ {
+ return getPosY() + CIRCLE_RADIUS;
+ }
+
+ @Override
+ public HandleType getType()
+ {
+ return HandleType.STATIC_PIN;
+ }
+
+ @Override
+ public Pin getPin()
+ {
+ return parent;
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.editor.handles;
+
+import java.util.Optional;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.editor.states.EditorState;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.GUIWire.PathChangedListener;
+
+public class WireHandle extends Handle implements PathChangedListener
+{
+ private boolean selected = false;
+ private final static double WIDTH = 2.0;
+ private final static double WIDTH_SQUARED = WIDTH * WIDTH;
+ public final GUIWire parent;
+
+ public WireHandle(GUIWire parent)
+ {
+ this.parent = parent;
+ parent.addPathChangedListener(this);
+ updateBounds();
+ }
+
+ @Override
+ void destroy()
+ {
+ super.destroy();
+ parent.removePathChangedListener(this);
+ }
+
+ public void updateBounds()
+ {
+ Rectangle r = parent.getBounds();
+ moveTo(r.x, r.y);
+ setSize(r.width, r.height);
+ }
+
+ @Override
+ public void render(GeneralGC gc)
+ {
+ if(selected)
+ {
+ gc.setLineWidth(WIDTH);
+ gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_YELLOW));
+ gc.drawPolyline(parent.getEffectivePath());
+ }
+ }
+
+ @Override
+ public void onSelect()
+ {
+ selected = true;
+ callRedrawListeners();
+ }
+
+ @Override
+ public void onDeselect()
+ {
+ selected = false;
+ callRedrawListeners();
+ }
+
+ @Override
+ public void reqDelete()
+ {
+ parent.destroy();
+ }
+
+ @Override
+ public boolean contains(double x, double y)
+ {
+ return click(parent, x, y).isPresent();
+ }
+
+ @Override
+ public boolean click(double x, double y, int stateMask, EditorState state)
+ {
+ Optional<WireClickData> op = click(parent, x, y);
+ if(op.isEmpty())
+ return false;
+ WireClickData data = op.get();
+ return state.clickedHandle(new WireHandleClickInfo(this, data.segment, data.pos, stateMask));
+ }
+
+ public static class WireHandleClickInfo extends HandleClickInfo
+ {
+ public final int segment;
+ public final Point posOnWire;
+ WireHandleClickInfo(WireHandle clicked, int segment, Point posOnWire, int stateMask)
+ {
+ super(clicked, stateMask);
+ this.segment = segment;
+ this.posOnWire = posOnWire;
+ }
+
+ }
+
+ private static Optional<WireClickData> click(GUIWire w, double x, double y)
+ {
+ Rectangle modifiedBounds = w.getBounds();
+ modifiedBounds.x -= WIDTH;
+ modifiedBounds.y -= WIDTH;
+ modifiedBounds.width += WIDTH * 2;
+ modifiedBounds.height += WIDTH * 2;
+ if (modifiedBounds.contains(x, y))
+ {
+ double[] effectivePath = w.getEffectivePath();
+ for (int i = 3; i < effectivePath.length; i += 2)
+ {
+ double a1 = effectivePath[i - 3], a2 = effectivePath[i - 2], b1 = effectivePath[i - 1],
+ b2 = effectivePath[i], r1 = b2 - a2, r2 = a1 - b1;
+
+ double f = ((x - a1) * r2 + (a2 - y) * r1) / (-r2 * r2 - r1 * r1);
+ if (f >= 0 && f <= 1)
+ {
+ double e1 = a1 + f * (b1 - a1), e2 = a2 + f * (b2 - a2);
+ r1 = e1 - x;
+ r2 = e2 - y;
+ if (r1 * r1 + r2 * r2 <= WIDTH_SQUARED)
+ return Optional.of(new WireClickData(new Point(e1, e2), (i / 2) - 1));
+ }
+ }
+ }
+ return Optional.empty();
+ }
+
+ private final static class WireClickData
+ {
+ WireClickData(Point pos, int segment)
+ {
+ this.pos = pos;
+ this.segment = segment;
+ }
+
+ /**
+ * Position on the wire that is closest to the click
+ */
+ public final Point pos;
+ /**
+ * Segment of the wire that the {@link Point} pos is on
+ */
+ public final int segment;
+ }
+
+ @Override
+ public HandleType getType()
+ {
+ return HandleType.WIRE;
+ }
+
+ @Override
+ public void pathChanged(GUIWire wire, int diff)
+ {
+ updateBounds();
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor.handles;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.model.model.wires.GUIWire;
+
+public class WirePointHandle extends Handle
+{
+ private final static int END_OFFSET = 4;
+ private boolean selected = false;
+ public final GUIWire parent;
+
+ private int pointIndex;
+
+ public WirePointHandle(GUIWire parent, int pointIndex)
+ {
+ super();
+ this.parent = parent;
+ this.pointIndex = pointIndex;
+ setSize(END_OFFSET, END_OFFSET);
+ Point pathPoint = parent.getPathPoint(pointIndex);
+ moveTo(pathPoint.x, pathPoint.y);
+ }
+
+ void updatePos()
+ {
+ Point p = parent.getPathPoint(pointIndex);
+ moveTo(p.x, p.y);
+ }
+
+ @Override
+ public void render(GeneralGC gc)
+ {
+ gc.setLineWidth(1.0);
+ gc.setForeground(Display.getDefault().getSystemColor(selected ? SWT.COLOR_YELLOW : SWT.COLOR_BLUE));
+ gc.drawLine(getPosX(), getPosY(), getPosX() + END_OFFSET, getPosY() + END_OFFSET);
+ }
+
+ @Override
+ public void reqMove(double x, double y)
+ {
+ parent.setPathPoint(new Point(x, y), pointIndex);
+ }
+
+ @Override
+ public void onSelect()
+ {
+ selected = true;
+ callRedrawListeners();
+ }
+
+ @Override
+ public void onDeselect()
+ {
+ selected = false;
+ callRedrawListeners();
+ }
+
+ @Override
+ public void reqDelete()
+ {
+ parent.removePathPoint(pointIndex);
+ }
+
+ @Override
+ public HandleType getType()
+ {
+ return HandleType.WIRE_POINT;
+ }
+
+ /**
+ * Sets the index of the {@link Point} within the parent {@link Wire}s path that is controlled by this handle
+ * @param index Index of the Point in the Wires path.
+ * @throws IndexOutOfBoundsException
+ */
+ public void setIndex(int index)
+ {
+ this.pointIndex = index;
+ updatePos();
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor.states;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer;
+import net.mograsim.logic.model.editor.Editor;
+import net.mograsim.logic.model.editor.Selection;
+import net.mograsim.logic.model.editor.handles.Handle;
+
+public class BoxSelectionState extends EditorState
+{
+ private Point origin;
+ private double mX, mY;
+
+ private final ZoomedRenderer boxRenderer = gc ->
+ {
+ if (origin != null)
+ {
+ gc.setLineWidth(0.5);
+ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW));
+ gc.drawRectangle(origin.x, origin.y, mX - origin.x, mY - origin.y);
+ }
+ };
+
+ public BoxSelectionState(Editor editor, StateManager manager)
+ {
+ super(editor, manager);
+ }
+
+ @Override
+ public void onEntry()
+ {
+ editor.gui.logicCanvas.addZoomedRenderer(boxRenderer);
+ editor.gui.logicCanvas.redrawThreadsafe();
+ }
+
+ @Override
+ public void onExit()
+ {
+ editor.gui.logicCanvas.removeZoomedRenderer(boxRenderer);
+ editor.gui.logicCanvas.redrawThreadsafe();
+ }
+
+ @Override
+ public void boxSelect()
+ {
+ manager.setState(new SelectionState(editor, manager));
+ }
+
+ @Override
+ public void clicked(Point clicked, int stateMask)
+ {
+ if (origin == null)
+ {
+ origin = new Point(clicked.x, clicked.y);
+ mX = clicked.x;
+ mY = clicked.y;
+ } else
+ {
+ Selection s = editor.getSelection();
+ s.clear();
+ boolean leftToRight = mX > origin.x, topToBottom = mY > origin.y;
+ double x = leftToRight ? origin.x : mX, y = topToBottom ? origin.y : mY,
+ width = leftToRight ? mX - origin.x : origin.x - mX,
+ height = topToBottom ? mY - origin.y : origin.y - mY;
+
+ Rectangle selected = new Rectangle(x, y, width, height);
+ for (Handle h : editor.handleManager.getHandles())
+ {
+ Rectangle hBounds = h.getBounds();
+ if (selected.contains(hBounds.x, hBounds.y)
+ && selected.contains(hBounds.x + hBounds.width, hBounds.y + hBounds.height))
+ {
+ s.add(h);
+ }
+ }
+ manager.setState(new SelectionState(editor, manager));
+ }
+ }
+
+ @Override
+ public void mouseMoved(double x, double y)
+ {
+ mX = x;
+ mY = y;
+ editor.gui.logicCanvas.redrawThreadsafe();
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor.states;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer;
+import net.mograsim.logic.model.editor.Editor;
+import net.mograsim.logic.model.editor.handles.PinHandle;
+import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo;
+
+public class CreateWireState extends EditorState
+{
+ private final PinHandle origin;
+ private double mX, mY;
+ private ZoomedRenderer drawLine;
+
+ public CreateWireState(Editor session, StateManager manager, PinHandle origin)
+ {
+ super(session, manager);
+ this.origin = origin;
+ mX = origin.getCenterX();
+ mY = origin.getCenterY();
+ }
+
+ @Override
+ public void mouseMoved(double x, double y)
+ {
+ this.mX = x;
+ this.mY = y;
+ editor.gui.logicCanvas.redraw();
+ }
+
+ @Override
+ public void onEntry()
+ {
+ editor.getSelection().clear();
+ drawLine = gc ->
+ {
+ gc.setLineWidth(1);
+ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
+ gc.drawLine((int) origin.getCenterX(), (int) origin.getCenterY(), (int) mX, (int) mY);
+ };
+ editor.gui.logicCanvas.addZoomedRenderer(drawLine);
+ editor.gui.logicCanvas.redraw();
+ }
+
+ @Override
+ public void onExit()
+ {
+ editor.gui.logicCanvas.removeZoomedRenderer(drawLine);
+ editor.gui.logicCanvas.redraw();
+ }
+
+ @Override
+ public boolean clickedHandle(HandleClickInfo handleClickInfo)
+ {
+ switch (handleClickInfo.clicked.getType())
+ {
+ case INTERFACE_PIN:
+ case STATIC_PIN:
+ try
+ {
+ editor.addWire(origin, (PinHandle) handleClickInfo.clicked);
+ }
+ catch (IllegalArgumentException e)
+ {
+ Shell tmp = new Shell(Display.getCurrent());
+ editor.dialogManager.openWarningDialog("Warning!", e.getMessage());
+ tmp.dispose();
+ }
+ break;
+ default:
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public void clicked(Point clicked, int stateMask)
+ {
+ manager.setState(new SelectionState(editor, manager));
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor.states;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.editor.Editor;
+import net.mograsim.logic.model.editor.handles.InterfacePinHandle;
+import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo;
+
+public abstract class EditorState
+{
+ protected final Editor editor;
+ protected final StateManager manager;
+
+ public EditorState(Editor session, StateManager manager)
+ {
+ this.editor = session;
+ this.manager = manager;
+ }
+
+ //@formatter:off
+ public void add() {}
+ public void delete() {}
+ public void copy() {}
+ public void paste() {}
+ public void duplicate() {}
+ public void grab() {}
+ public void mouseMoved(double x, double y) {}
+ public void select(Point pos, boolean additive) {}
+ public void boxSelect() {}
+ public void onEntry() {}
+ public void onExit() {}
+ public void clicked(InterfacePinHandle interfacePinHandle, int stateMask) {}
+ public void clickedEmpty(Point clicked, int stateMask) {}
+ public void clicked(Point clicked, int stateMask) {}
+ public boolean clickedHandle(HandleClickInfo handleClickInfo) { return false; }
+ //@formatter:on
+}
--- /dev/null
+package net.mograsim.logic.model.editor.states;
+
+import java.util.Map;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.editor.Editor;
+import net.mograsim.logic.model.editor.handles.Handle;
+
+public class GrabState extends EditorState
+{
+ private Map<Handle, Point> offsets;
+
+ public GrabState(Editor editor, StateManager manager)
+ {
+ super(editor, manager);
+ }
+
+ @Override
+ public void onEntry()
+ {
+ offsets = editor.getSelection().calculateOffsets();
+ }
+
+ @Override
+ public void grab()
+ {
+ manager.setState(new SelectionState(editor, manager));
+ }
+
+ @Override
+ public void mouseMoved(double x, double y)
+ {
+ editor.moveHandles(x, y, offsets);
+ }
+
+ @Override
+ public void clicked(Point clicked, int stateMask)
+ {
+ manager.setState(new SelectionState(editor, manager));
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor.states;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer;
+import net.mograsim.logic.model.editor.Editor;
+import net.mograsim.logic.model.editor.Selection;
+import net.mograsim.logic.model.editor.DialogManager.InteractiveDialog;
+import net.mograsim.logic.model.editor.handles.Handle;
+import net.mograsim.logic.model.editor.handles.PinHandle;
+import net.mograsim.logic.model.editor.handles.WireHandle;
+import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo;
+import net.mograsim.logic.model.editor.handles.WireHandle.WireHandleClickInfo;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+
+public class SelectionState extends EditorState
+{
+ private final ZoomedRenderer outlineRenderer = gc ->
+ {
+ if (editor.getSelection().size() > 1)
+ {
+ gc.setLineWidth(1);
+ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW));
+ gc.drawRectangle(editor.getSelection().getBounds());
+ }
+ };
+
+ public SelectionState(Editor editor, StateManager manager)
+ {
+ super(editor, manager);
+ }
+
+ @Override
+ public void add()
+ {
+ Point curserPos = editor.getWorldMousePosition();
+ editor.addComponent(curserPos.x, curserPos.y);
+ }
+
+ @Override
+ public void delete()
+ {
+ editor.deleteSelection();
+ }
+
+ @Override
+ public void copy()
+ {
+ editor.copy();
+ }
+
+ @Override
+ public void paste()
+ {
+ Point curserPos = editor.getWorldMousePosition();
+ editor.paste(curserPos.x, curserPos.y);
+ }
+
+ @Override
+ public void duplicate()
+ {
+ editor.duplicate();
+ }
+
+ @Override
+ public void grab()
+ {
+ if (!editor.getSelection().isEmpty())
+ manager.setState(new GrabState(editor, manager));
+ }
+
+ @Override
+ public void boxSelect()
+ {
+ manager.setState(new BoxSelectionState(editor, manager));
+ }
+
+ @Override
+ public void onEntry()
+ {
+ editor.gui.logicCanvas.addZoomedRenderer(outlineRenderer);
+ editor.gui.logicCanvas.redrawThreadsafe();
+ }
+
+ @Override
+ public void onExit()
+ {
+ editor.gui.logicCanvas.removeZoomedRenderer(outlineRenderer);
+ editor.gui.logicCanvas.redrawThreadsafe();
+ }
+
+ @Override
+ public void clickedEmpty(Point clicked, int stateMask)
+ {
+ editor.getSelection().clear();
+ if ((stateMask & SWT.ALT) == SWT.ALT)
+ {
+ InteractiveDialog pinAdd = new InteractiveDialog("Add Pin...", "Add", "Cancel", "Name", "Logic Width");
+ pinAdd.open();
+ if (pinAdd.getState().equals(InteractiveDialog.InteractiveDialogState.ACCEPTED))
+ {
+ try
+ {
+ Pin p = editor.toBeEdited.addSubmodelInterface(new MovablePin(editor.toBeEdited, pinAdd.getText(),
+ Integer.parseInt(pinAdd.getText(1)), clicked.x, clicked.y));
+ editor.handleManager.getInterfacePinHandle(p).reqMove(clicked.x, clicked.y);
+ } catch (NumberFormatException e)
+ {
+ editor.dialogManager.openWarningDialog("Failed to create Pin!", "Bit width must be a number!");
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean clickedHandle(HandleClickInfo handleClickInfo)
+ {
+ switch (handleClickInfo.clicked.getType())
+ {
+ case INTERFACE_PIN:
+ if ((handleClickInfo.stateMask & SWT.CTRL) == SWT.CTRL)
+ {
+ manager.setState(new CreateWireState(editor, manager, (PinHandle) handleClickInfo.clicked));
+ break;
+ }
+ case CORNER:
+ case COMPONENT:
+ case WIRE_POINT:
+ boolean additive = (handleClickInfo.stateMask & SWT.SHIFT) == SWT.SHIFT;
+ select(handleClickInfo.clicked, additive);
+ break;
+ case STATIC_PIN:
+ if ((handleClickInfo.stateMask & SWT.CTRL) == SWT.CTRL)
+ manager.setState(new CreateWireState(editor, manager, (PinHandle) handleClickInfo.clicked));
+ else
+ return false;
+ break;
+ case WIRE:
+ if ((handleClickInfo.stateMask & SWT.CTRL) == SWT.CTRL)
+ {
+ WireHandleClickInfo info = (WireHandleClickInfo) handleClickInfo;
+ WireHandle clicked = (WireHandle) info.clicked;
+ clicked.parent.insertPathPoint(info.posOnWire, info.segment);
+ } else
+ {
+ additive = (handleClickInfo.stateMask & SWT.SHIFT) == SWT.SHIFT;
+ select(handleClickInfo.clicked, additive);
+ }
+ break;
+ default:
+ return false;
+ }
+ return true;
+ }
+
+ private void select(Handle h, boolean additive)
+ {
+ Selection sel = editor.getSelection();
+ if (sel.contains(h))
+ if (additive)
+ sel.remove(h);
+ else
+ {
+ if (editor.getSelection().size() > 1)
+ {
+ sel.clear();
+ sel.add(h);
+ } else
+ sel.clear();
+ }
+ else
+ {
+ if (!additive)
+ sel.clear();
+ sel.add(h);
+ }
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.editor.states;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.editor.Editor;
+import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo;
+
+public class StateManager
+{
+ private EditorState state;
+
+ public StateManager(Editor session)
+ {
+ state = new SelectionState(session, this);
+ state.onEntry();
+ }
+
+ public EditorState getState()
+ {
+ return state;
+ }
+
+ public void setState(EditorState state)
+ {
+ this.state.onExit();
+ this.state = state;
+ state.onEntry();
+ }
+
+ public void add()
+ {
+ state.add();
+ }
+
+ public void delete()
+ {
+ state.delete();
+ }
+
+ public void copy()
+ {
+ state.copy();
+ }
+
+ public void paste()
+ {
+ state.paste();
+ }
+
+ public void duplicate()
+ {
+ state.duplicate();
+ }
+
+ public void grab()
+ {
+ state.grab();
+ }
+
+ public void mouseMoved(double x, double y)
+ {
+ state.mouseMoved(x, y);
+ }
+
+ public void select(Point pos, boolean additive)
+ {
+ state.select(pos, additive);
+ }
+
+ public boolean clickedHandle(HandleClickInfo handleClickInfo)
+ {
+ return state.clickedHandle(handleClickInfo);
+ }
+
+ public void boxSelect()
+ {
+ state.boxSelect();
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+ <attributes>
+ <attribute name="module" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>net.mograsim.logic.model</name>
+ <comment></comment>
+ <projects>
+ <project>net.mograsim.logic.core</project>
+ <project>SWTZoomableCanvas</project>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=140
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.lineSplit=140
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=true
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
--- /dev/null
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_MoGraSim
+formatter_settings_version=16
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.organize_imports=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
--- /dev/null
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: net.mograsim.logic.model;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Export-Package: net.mograsim.logic.model,
+ net.mograsim.logic.model.examples,
+ net.mograsim.logic.model.model,
+ net.mograsim.logic.model.model.components,
+ net.mograsim.logic.model.model.components.atomic,
+ net.mograsim.logic.model.model.components.submodels,
+ net.mograsim.logic.model.model.wires,
+ net.mograsim.logic.model.modeladapter,
+ net.mograsim.logic.model.modeladapter.componentadapters,
+ net.mograsim.logic.model.serializing,
+ net.mograsim.logic.model.serializing.snippets,
+ net.mograsim.logic.model.serializing.snippets.highlevelstatehandlers,
+ net.mograsim.logic.model.serializing.snippets.outlinerenderers,
+ net.mograsim.logic.model.serializing.snippets.symbolrenderers,
+ net.mograsim.logic.model.util
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Require-Bundle: org.eclipse.swt;bundle-version="3.0.0";visibility:=reexport,
+ SWTZoomableCanvas;bundle-version="1.0.0";visibility:=reexport,
+ net.mograsim.logic.core;bundle-version="0.1.0";visibility:=reexport,
+ com.google.gson;bundle-version="2.8.2";visibility:=reexport,
+ net.mograsim.preferences;bundle-version="0.1.0"
+Automatic-Module-Name: net.mograsim.logic.ui
+Bundle-Vendor: Mograsim Team
--- /dev/null
+#Properties file for net.mograsim.logic.ui
+Bundle-Vendor = Mograsim Team
+Bundle-Name = Mograsim logic user interface
\ No newline at end of file
--- /dev/null
+source.. = src/
+bin.includes = META-INF/,\
+ .,\
+ OSGI-INF/
--- /dev/null
+package era.mi.gui.components;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import era.mi.logic.components.Merger;
+import era.mi.logic.wires.Wire.ReadEnd;
+import era.mi.logic.wires.Wire.ReadWriteEnd;
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+
+public class GUIMerger extends Merger implements GUIComponent
+{
+ private final int inputCount;
+ private final double height;
+ private final List<ReadEnd> connectedWireEnds;
+ private final List<Point> WireEndConnectionPoints;
+
+ public GUIMerger(ReadWriteEnd union, ReadEnd... inputs)
+ {
+ super(union, inputs);
+
+ List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();
+ List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();
+
+ this.inputCount = inputs.length;
+ this.height = (inputCount - 1) * 10;
+
+ {
+ connectedWireEndsModifiable.addAll(Arrays.asList(inputs));
+ double inputHeight = 0;
+ for (int i = 0; i < inputCount; i++, inputHeight += 10)
+ WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));
+ }
+
+ connectedWireEndsModifiable.add(union);
+ WireEndConnectionPointsModifiable.add(new Point(20, height / 2));
+
+ this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
+ this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
+ }
+
+ @Override
+ public Rectangle getBounds()
+ {
+ return new Rectangle(0, 0, 20, height);
+ }
+
+ @Override
+ public void render(GeneralGC gc)
+ {
+ double inputHeight = 0;
+ for (int i = 0; i < inputCount; i++, inputHeight += 10)
+ gc.drawLine(0, inputHeight, 10, inputHeight);
+ gc.drawLine(10, 0, 10, height);
+ gc.drawLine(10, height / 2, 20, height / 2);
+ }
+
+ @Override
+ public int getConnectedWireEndsCount()
+ {
+ return connectedWireEnds.size();
+ }
+
+ @Override
+ public ReadEnd getConnectedWireEnd(int connectionIndex)
+ {
+ return connectedWireEnds.get(connectionIndex);
+ }
+
+ @Override
+ public Point getWireEndConnectionPoint(int connectionI)
+ {
+ return WireEndConnectionPoints.get(connectionI);
+ }
+}
\ No newline at end of file
--- /dev/null
+package era.mi.gui.components;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import era.mi.logic.components.Mux;
+import era.mi.logic.wires.Wire.ReadEnd;
+import era.mi.logic.wires.Wire.ReadWriteEnd;
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+
+public class GUIMux extends Mux implements GUIComponent
+{
+ private final double height;
+ private final List<ReadEnd> connectedWireEnds;
+ private final List<Point> WireEndConnectionPoints;
+
+ public GUIMux(int processTime, ReadWriteEnd out, ReadEnd select, ReadEnd... inputs)
+ {
+ super(processTime, out, select, inputs);
+
+ double height = inputs.length * 5;
+ if (height < 10)
+ height = 10;
+ this.height = height;
+
+ List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();
+ List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();
+
+ connectedWireEndsModifiable.add(out);
+ WireEndConnectionPointsModifiable.add(new Point(20, 10 + height / 2));
+
+ connectedWireEndsModifiable.add(select);
+ WireEndConnectionPointsModifiable.add(new Point(10, 5));
+
+ {
+ connectedWireEndsModifiable.addAll(Arrays.asList(inputs));
+ double inputHeightIncrement = (height + 20) / inputs.length;
+ double inputHeight = inputHeightIncrement / 2;
+ for (int i = 0; i < inputs.length; i++, inputHeight += inputHeightIncrement)
+ WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));
+ }
+
+ this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
+ this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
+ }
+
+ @Override
+ public Rectangle getBounds()
+ {
+ return new Rectangle(0, 0, 20, height + 20);
+ }
+
+ @Override
+ public void render(GeneralGC gc)
+ {
+ gc.drawPolygon(new double[] { 0, 0, 20, 10, 20, height + 10, 0, height + 20 });
+ }
+
+ @Override
+ public int getConnectedWireEndsCount()
+ {
+ return connectedWireEnds.size();
+ }
+
+ @Override
+ public ReadEnd getConnectedWireEnd(int connectionIndex)
+ {
+ return connectedWireEnds.get(connectionIndex);
+ }
+
+ @Override
+ public Point getWireEndConnectionPoint(int connectionI)
+ {
+ return WireEndConnectionPoints.get(connectionI);
+ }
+}
\ No newline at end of file
--- /dev/null
+package era.mi.gui.components;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import era.mi.gui.ViewModel;
+import era.mi.logic.components.Splitter;
+import era.mi.logic.wires.Wire.ReadEnd;
+import era.mi.logic.wires.Wire.ReadWriteEnd;
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+
+public class GUISplitter extends GUIComponent
+{
+ public GUISplitter(ViewModel model)
+ {
+ super(model);
+
+ this.outputCount = outputs.length;
+ this.height = (outputCount - 1) * 10;
+
+ connectedWireEndsModifiable.add(input);
+ WireEndConnectionPointsModifiable.add(new Point(0, height / 2));
+
+ {
+ connectedWireEndsModifiable.addAll(Arrays.asList(outputs));
+ double outputHeight = 0;
+ for (int i = 0; i < outputCount; i++, outputHeight += 10)
+ WireEndConnectionPointsModifiable.add(new Point(20, outputHeight));
+ }
+
+ this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
+ this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
+ }
+
+ @Override
+ public Rectangle getBounds()
+ {
+ return new Rectangle(0, 0, 20, height);
+ }
+
+ @Override
+ public void render(GeneralGC gc)
+ {
+ gc.drawLine(0, height / 2, 10, height / 2);
+ gc.drawLine(10, 0, 10, height);
+ double outputHeight = 0;
+ for (int i = 0; i < outputCount; i++, outputHeight += 10)
+ gc.drawLine(10, outputHeight, 20, outputHeight);
+ }
+
+ @Override
+ public int getConnectedWireEndsCount()
+ {
+ return connectedWireEnds.size();
+ }
+
+ @Override
+ public ReadEnd getConnectedWireEnd(int connectionIndex)
+ {
+ return connectedWireEnds.get(connectionIndex);
+ }
+
+ @Override
+ public Point getWireEndConnectionPoint(int connectionI)
+ {
+ return WireEndConnectionPoints.get(connectionI);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicLong;
+
+import net.mograsim.logic.core.timeline.Timeline;
+
+//TODO maybe move to logic core?
+public class LogicExecuter
+{
+ // TODO replace with LogicModel when it exists
+ private final Timeline timeline;
+
+ private final AtomicBoolean shouldBeRunningLive;
+ private final AtomicBoolean isRunningLive;
+ private final AtomicLong nextExecSimulTime;
+ private final Thread simulationThread;
+
+ public LogicExecuter(Timeline timeline)
+ {
+ this.timeline = timeline;
+
+ timeline.setTimeFunction(System::currentTimeMillis);
+ shouldBeRunningLive = new AtomicBoolean();
+ isRunningLive = new AtomicBoolean();
+ nextExecSimulTime = new AtomicLong();
+ simulationThread = new Thread(() ->
+ {
+ isRunningLive.set(true);
+ synchronized (isRunningLive)
+ {
+ isRunningLive.notify();
+ }
+ try
+ {
+ while (shouldBeRunningLive.get())
+ {
+ // always execute to keep timeline from "hanging behind" for too long
+ long current = System.currentTimeMillis();
+ timeline.executeUntil(timeline.laterThan(current), current + 10);
+ long sleepTime;
+ if (timeline.hasNext())
+ sleepTime = timeline.nextEventTime() - current;
+ else
+ sleepTime = 10000;
+ try
+ {
+ nextExecSimulTime.set(current + sleepTime);
+ if (sleepTime > 0)
+ Thread.sleep(sleepTime);
+ }
+ catch (@SuppressWarnings("unused") InterruptedException e)
+ {// do nothing; it is normal execution flow to be interrupted
+ }
+ }
+ }
+ finally
+ {
+ isRunningLive.set(false);
+ synchronized (isRunningLive)
+ {
+ isRunningLive.notify();
+ }
+ }
+ });
+ timeline.addEventAddedListener(event ->
+ {
+ if (isRunningLive.get())
+ if (Timeline.timeCmp(event.getTiming(), nextExecSimulTime.get()) < 0)
+ simulationThread.interrupt();
+ });
+ }
+
+ public void executeNextStep()
+ {
+ timeline.executeNext();
+ }
+
+ public synchronized void startLiveExecution()
+ {
+ if (shouldBeRunningLive.get())
+ return;
+ shouldBeRunningLive.set(true);
+ simulationThread.start();
+ waitForIsRunning(true);
+ }
+
+ public synchronized void stopLiveExecution()
+ {
+ if (!shouldBeRunningLive.get())
+ return;
+ shouldBeRunningLive.set(false);
+ simulationThread.interrupt();
+ waitForIsRunning(false);
+ }
+
+ private void waitForIsRunning(boolean expectedState)
+ {
+ while (isRunningLive.get() ^ expectedState)
+ try
+ {
+ synchronized (isRunningLive)
+ {
+ isRunningLive.wait();
+ }
+ }
+ catch (@SuppressWarnings("unused") InterruptedException e)
+ {// no need to do anything
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelInterface;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.preferences.Preferences;
+
+/**
+ * Simulation visualizer canvas.
+ *
+ * @author Daniel Kirschten
+ */
+public class LogicUICanvas extends ZoomableCanvas
+{
+ private static final boolean OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL = false;
+
+ private final ViewModel model;
+
+ public LogicUICanvas(Composite parent, int style, ViewModel model)
+ {
+ super(parent, style);
+
+ this.model = model;
+
+ LogicUIRenderer renderer = new LogicUIRenderer(model);
+ addZoomedRenderer(gc ->
+ {
+ Color background = Preferences.current().getColor("net.mograsim.logic.ui.color.background");
+ if (background != null)
+ setBackground(background);// this.setBackground, not gc.setBackground to have the background fill the canvas
+ renderer.render(gc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
+ });
+ model.addRedrawListener(this::redrawThreadsafe);
+
+ addListener(SWT.MouseDown, this::mouseDown);
+
+ if (OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL)
+ openDebugSetHighLevelStateShell(model);
+ }
+
+ private void mouseDown(Event e)
+ {
+ if (e.button == 1)
+ {
+ Point click = canvasToWorldCoords(e.x, e.y);
+ for (GUIComponent component : model.getComponentsByName().values())
+ if (component.getBounds().contains(click) && component.clicked(click.x, click.y))
+ {
+ redraw();
+ break;
+ }
+ }
+ }
+
+ private void openDebugSetHighLevelStateShell(ViewModel model)
+ {
+ Shell debugShell = new Shell();
+ debugShell.setLayout(new GridLayout(2, false));
+ new Label(debugShell, SWT.NONE).setText("Target component: ");
+ Combo componentSelector = new Combo(debugShell, SWT.DROP_DOWN | SWT.READ_ONLY);
+ componentSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ List<GUIComponent> componentsByItemIndex = new ArrayList<>();
+ model.addComponentAddedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
+ model.addComponentRemovedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
+ recalculateComponentSelector(componentsByItemIndex, componentSelector, model);
+ new Label(debugShell, SWT.NONE).setText("Target state ID: ");
+ Text stateIDText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
+ stateIDText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ new Label(debugShell, SWT.NONE).setText("Value type: ");
+ Composite radioGroup = new Composite(debugShell, SWT.NONE);
+ radioGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ GridLayout radioGroupLayout = new GridLayout(2, false);
+ radioGroupLayout.marginHeight = 0;
+ radioGroupLayout.marginWidth = 0;
+ radioGroup.setLayout(radioGroupLayout);
+ Button radioBit = new Button(radioGroup, SWT.RADIO);
+ radioBit.setText("Single bit");
+ Button radioBitVector = new Button(radioGroup, SWT.RADIO);
+ radioBitVector.setText("Bitvector");
+ new Label(debugShell, SWT.NONE).setText("Value string representation: \n(Bit vectors: MSBit...LSBit)");
+ Text valueText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
+ valueText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ Button send = new Button(debugShell, SWT.PUSH);
+ send.setText("Send!");
+ Button get = new Button(debugShell, SWT.PUSH);
+ get.setText("Get!");
+ Text output = new Text(debugShell, SWT.READ_ONLY);
+ output.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
+ Listener sendAction = e ->
+ {
+ try
+ {
+ int componentIndex = componentSelector.getSelectionIndex();
+ if (componentIndex < 0 || componentIndex >= componentsByItemIndex.size())
+ throw new RuntimeException("No component selected");
+ GUIComponent target = componentsByItemIndex.get(componentIndex);
+ String valueString = valueText.getText();
+ Object value;
+ if (radioBit.getSelection())
+ value = Bit.parse(valueString);
+ else if (radioBitVector.getSelection())
+ value = BitVector.parse(valueString);
+ else
+ throw new RuntimeException("No value type selected");
+ target.setHighLevelState(stateIDText.getText(), value);
+ output.setText("Success!");
+ }
+ catch (Exception x)
+ {
+ output.setText(x.getClass().getSimpleName() + (x.getMessage() == null ? "" : ": " + x.getMessage()));
+ }
+ };
+ Listener getAction = e ->
+ {
+ try
+ {
+ if (componentSelector.getSelectionIndex() >= componentsByItemIndex.size())
+ throw new RuntimeException("No valid component selected");
+ output.setText("Success! Value: \r\n"
+ + componentsByItemIndex.get(componentSelector.getSelectionIndex()).getHighLevelState(stateIDText.getText()));
+ }
+ catch (Exception x)
+ {
+ output.setText(x.getClass().getSimpleName() + (x.getMessage() == null ? "" : ": " + x.getMessage()));
+ }
+ };
+ send.addListener(SWT.Selection, sendAction);
+ valueText.addListener(SWT.DefaultSelection, sendAction);
+ get.addListener(SWT.Selection, getAction);
+ stateIDText.addListener(SWT.DefaultSelection, getAction);
+ debugShell.open();
+ }
+
+ private void recalculateComponentSelector(List<GUIComponent> componentsByItemIndex, Combo componentSelector, ViewModel model)
+ {
+ componentsByItemIndex.clear();
+ componentSelector.setItems();
+ addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model);
+ }
+
+ private void addComponentSelectorItems(List<GUIComponent> componentsByItemIndex, String base, Combo componentSelector, ViewModel model)
+ {
+ for (GUIComponent c : model.getComponentsByName().values())
+ if (!(c instanceof WireCrossPoint || c instanceof SubmodelInterface))
+ {
+ String item = base + c.name;
+ componentsByItemIndex.add(c);
+ componentSelector.add(item);
+ if (c instanceof SubmodelComponent)
+ addComponentSelectorItems(componentsByItemIndex, item + " -> ", componentSelector, ((SubmodelComponent) c).submodel);
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model;
+
+import org.eclipse.swt.SWT;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+
+public class LogicUIRenderer
+{
+ private static final boolean DRAW_PINS = false;
+
+ private final ViewModel model;
+
+ public LogicUIRenderer(ViewModel model)
+ {
+ this.model = model;
+ }
+
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ gc.setAntialias(SWT.ON);
+ gc.setClipping(visibleRegion);
+ gc.setLineWidth(.5);
+ model.getWires().forEach(w ->
+ {
+ Rectangle bounds = w.getBounds();
+ double lw = gc.getLineWidth();
+ if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
+ w.render(gc);
+ });
+ model.getComponentsByName().values().forEach(c -> renderComponent(gc, c, visibleRegion));
+ }
+
+ private static void renderComponent(GeneralGC gc, GUIComponent component, Rectangle visibleRegion)
+ {
+ Rectangle bounds = component.getBounds();
+ double lw = gc.getLineWidth();
+ if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
+ {
+ component.render(gc, visibleRegion);
+ if (DRAW_PINS)
+ {
+ gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN));
+ for (Pin p : component.getPins().values())
+ {
+ Point pos = p.getPos();
+ gc.fillOval(pos.x - 1, pos.y - 1, 2, 2);
+ }
+ }
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay;
+import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
+import net.mograsim.logic.model.model.ViewModel;
+
+/**
+ * Standalone simulation visualizer graphical user interface.
+ *
+ * @author Daniel Kirschten
+ */
+public class LogicUIStandaloneGUI implements Runnable
+{
+ private final Display display;
+ private final Shell shell;
+ private final LogicUICanvas ui;
+
+ public LogicUIStandaloneGUI(ViewModel model)
+ {
+ display = new Display();
+ shell = new Shell(display);
+ shell.setLayout(new FillLayout());
+ ui = new LogicUICanvas(shell, SWT.NONE, model);
+
+ ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(ui);
+ userInput.buttonDrag = 3;
+ userInput.buttonZoom = 2;
+ userInput.enableUserInput();
+ new ZoomableCanvasOverlay(ui, null).enableScale();
+ }
+
+ public LogicUICanvas getLogicUICanvas()
+ {
+ return ui;
+ }
+
+ /**
+ * Opens the UI shell. Returns when the shell is closed.
+ */
+ @Override
+ public void run()
+ {
+ shell.open();
+ while (!shell.isDisposed())
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model;
+
+import java.util.function.Consumer;
+
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+
+public class SimpleLogicUIStandalone
+{
+ public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel)
+ {
+ LogicModelParameters params = new LogicModelParameters();
+ params.gateProcessTime = 50;
+ params.wireTravelTime = 10;
+ executeVisualisation(setupViewModel, params);
+ }
+
+ public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, LogicModelParameters params)
+ {
+ // setup view model
+ ViewModelModifiable viewModel = new ViewModelModifiable();
+ setupViewModel.accept(viewModel);
+
+ // convert to logic model
+ Timeline timeline = ViewLogicModelAdapter.convert(viewModel, params);
+
+ // initialize UI and executer
+ LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(viewModel);
+ LogicExecuter exec = new LogicExecuter(timeline);
+
+ // run it
+ exec.startLiveExecution();
+ ui.run();
+ exec.stopLiveExecution();
+ }
+
+ private SimpleLogicUIStandalone()
+ {
+ throw new UnsupportedOperationException("No SimpleLogicUIStandalone instances");
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.examples;
+
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+
+public class ClickableSubmodelComponentsTest
+{
+ public static void main(String[] args)
+ {
+ SimpleLogicUIStandalone.executeVisualisation(ClickableSubmodelComponentsTest::createExample);
+ }
+
+ public static void createExample(ViewModelModifiable model)
+ {
+ @SuppressWarnings("unused") // GUIWire
+ SimpleRectangularSubmodelComponent comp = new SimpleRectangularSubmodelComponent(model, 1, "")
+ {
+ {
+ setSubmodelScale(.4);
+ setOutputPins("O0");
+
+ GUIManualSwitch sw = new GUIManualSwitch(submodelModifiable);
+ GUIBitDisplay bd = new GUIBitDisplay(submodelModifiable);
+
+ sw.moveTo(10, 5);
+ bd.moveTo(50, 5);
+
+ new GUIWire(submodelModifiable, sw.getOutputPin(), bd.getInputPin());
+
+ }
+ };
+ comp.moveTo(10, 10);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.examples;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.atomic.GUINotGate;
+import net.mograsim.logic.model.model.components.atomic.GUIOrGate;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+
+public class RSLatchExample
+{
+ public static void main(String[] args)
+ {
+ SimpleLogicUIStandalone.executeVisualisation(RSLatchExample::createRSLatchExample);
+ }
+
+ @SuppressWarnings("unused") // for GUIWires being created
+ public static void createRSLatchExample(ViewModelModifiable model)
+ {
+ GUIManualSwitch rIn = new GUIManualSwitch(model);
+ rIn.moveTo(100, 100);
+ GUIManualSwitch sIn = new GUIManualSwitch(model);
+ sIn.moveTo(100, 200);
+
+ GUIOrGate or1 = new GUIOrGate(model, 1);
+ or1.moveTo(160, 102.5);
+ new GUIWire(model, rIn.getOutputPin(), or1.getPin("A"));
+
+ GUIOrGate or2 = new GUIOrGate(model, 1);
+ or2.moveTo(160, 192.5);
+ new GUIWire(model, sIn.getOutputPin(), or2.getPin("B"));
+
+ GUINotGate not1 = new GUINotGate(model, 1);
+ not1.moveTo(200, 107.5);
+ new GUIWire(model, or1.getPin("Y"), not1.getPin("A"));
+
+ GUINotGate not2 = new GUINotGate(model, 1);
+ not2.moveTo(200, 197.5);
+ new GUIWire(model, or2.getPin("Y"), not2.getPin("A"));
+
+ WireCrossPoint p1 = new WireCrossPoint(model, 1);
+ p1.moveCenterTo(250, 112.5);
+ new GUIWire(model, not1.getPin("Y"), p1);
+ new GUIWire(model, p1, or2.getPin("A"), new Point(250, 130), new Point(140, 185), new Point(140, 197.5));
+
+ WireCrossPoint p2 = new WireCrossPoint(model, 1);
+ p2.moveCenterTo(250, 202.5);
+ new GUIWire(model, not2.getPin("Y"), p2);
+ new GUIWire(model, p2, or1.getPin("B"), new Point(250, 185), new Point(140, 130), new Point(140, 117.5));
+
+ WireCrossPoint o1 = new WireCrossPoint(model, 1);
+ o1.moveCenterTo(270, 112.5);
+ new GUIWire(model, p1, o1);
+
+ WireCrossPoint o2 = new WireCrossPoint(model, 1);
+ o2.moveCenterTo(270, 202.5);
+ new GUIWire(model, p2, o2);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+
+public class ViewModel
+{
+ private final Map<String, GUIComponent> components;
+ private final Map<String, GUIComponent> componentsUnmodifiable;
+ private final List<GUIWire> wires;
+ private final List<GUIWire> wiresUnmodifiable;
+
+ private final List<Consumer<? super GUIComponent>> componentAddedListeners;
+ private final List<Consumer<? super GUIComponent>> componentRemovedListeners;
+ private final List<Consumer<? super GUIWire>> wireAddedListeners;
+ private final List<Consumer<? super GUIWire>> wireRemovedListeners;
+ private final List<Runnable> redrawListeners;
+
+ private final Runnable redrawListenerForSubcomponents;
+
+ protected ViewModel()
+ {
+ components = new HashMap<>();
+ componentsUnmodifiable = Collections.unmodifiableMap(components);
+ wires = new ArrayList<>();
+ wiresUnmodifiable = Collections.unmodifiableList(wires);
+
+ componentAddedListeners = new ArrayList<>();
+ componentRemovedListeners = new ArrayList<>();
+ wireAddedListeners = new ArrayList<>();
+ wireRemovedListeners = new ArrayList<>();
+ redrawListeners = new ArrayList<>();
+
+ redrawListenerForSubcomponents = this::callRedrawListeners;
+ }
+
+ /**
+ * Adds the given component to the list of components and calls all componentAddedListeners. Don't call this method from application
+ * code as it is automatically called in {@link GUIComponent}'s constructor.
+ */
+ protected void componentCreated(GUIComponent component)
+ {
+ if (components.containsKey(component.name))
+ throw new IllegalStateException("Don't add the same component twice!");
+ components.put(component.name, component);
+ callComponentAddedListeners(component);
+ component.addRedrawListener(redrawListenerForSubcomponents);
+ callRedrawListeners();
+ }
+
+ /**
+ * Removes the given component from the list of components and calls all componentRemovedListeners. Don't call this method from
+ * application code as it is automatically called in {@link GUIComponent#destroy()}.
+ */
+ protected void componentDestroyed(GUIComponent component)
+ {
+ if (!components.containsKey(component.name))
+ throw new IllegalStateException("Don't remove the same component twice!");
+ components.remove(component.name);
+ callComponentRemovedListeners(component);
+ component.removeRedrawListener(redrawListenerForSubcomponents);
+ callRedrawListeners();
+ }
+
+ /**
+ * Adds the given wire to the list of wires and calls all wireAddedListeners. Don't call this method from application code as it is
+ * automatically called in {@link GUIWire}'s constructor(s).
+ */
+ protected void wireCreated(GUIWire wire)
+ {
+ if (wires.contains(wire))
+ throw new IllegalStateException("Don't add the same wire twice!");
+ wires.add(wire);
+ callWireAddedListeners(wire);
+ wire.addRedrawListener(redrawListenerForSubcomponents);
+ callRedrawListeners();
+ }
+
+ /**
+ * Removes the given wire from the list of wires and calls all wireRemovedListeners. Don't call this method from application code as it
+ * is automatically called in {@link GUIWire#destroy()}.
+ */
+ protected void wireDestroyed(GUIWire wire)
+ {
+ if (!wires.contains(wire))
+ throw new IllegalStateException("Don't remove the same wire twice!");
+ wires.remove(wire);
+ callWireRemovedListeners(wire);
+ wire.removeRedrawListener(redrawListenerForSubcomponents);
+ callRedrawListeners();
+ }
+
+ public Map<String, GUIComponent> getComponentsByName()
+ {
+ return componentsUnmodifiable;
+ }
+
+ public List<GUIWire> getWires()
+ {
+ return wiresUnmodifiable;
+ }
+
+ // @formatter:off
+ public void addComponentAddedListener (Consumer<? super GUIComponent> listener) {componentAddedListeners .add (listener);}
+ public void addComponentRemovedListener (Consumer<? super GUIComponent> listener) {componentRemovedListeners.add (listener);}
+ public void addWireAddedListener (Consumer<? super GUIWire > listener) {wireAddedListeners .add (listener);}
+ public void addWireRemovedListener (Consumer<? super GUIWire > listener) {wireRemovedListeners .add (listener);}
+ public void addRedrawListener (Runnable listener) {redrawListeners .add (listener);}
+
+ public void removeComponentAddedListener (Consumer<? super GUIComponent> listener) {componentAddedListeners .remove(listener);}
+ public void removeComponentRemovedListener(Consumer<? super GUIComponent> listener) {componentRemovedListeners.remove(listener);}
+ public void removeWireAddedListener (Consumer<? super GUIWire > listener) {wireAddedListeners .remove(listener);}
+ public void removeWireRemovedListener (Consumer<? super GUIWire > listener) {wireRemovedListeners .remove(listener);}
+ public void removeRedrawListener (Runnable listener) {redrawListeners .remove(listener);}
+
+ private void callComponentAddedListeners (GUIComponent c) {componentAddedListeners .forEach(l -> l.accept(c));}
+ private void callComponentRemovedListeners(GUIComponent c) {componentRemovedListeners.forEach(l -> l.accept(c));}
+ private void callWireAddedListeners (GUIWire w ) {wireAddedListeners .forEach(l -> l.accept(w));}
+ private void callWireRemovedListeners (GUIWire w ) {wireRemovedListeners .forEach(l -> l.accept(w));}
+ private void callRedrawListeners ( ) {redrawListeners .forEach(l -> l.run( ));}
+ // @formatter:on
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model;
+
+import java.util.Set;
+
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+
+public class ViewModelModifiable extends ViewModel
+{
+ public String getDefaultComponentName(GUIComponent component)
+ {
+ Set<String> componentNames = getComponentsByName().keySet();
+ String nameBase = component.getClass().getSimpleName() + '#';
+ for (int i = 0;; i++)
+ {
+ String nameCandidate = nameBase + i;
+ if (!componentNames.contains(nameCandidate))
+ return nameCandidate;
+ }
+ }
+
+ @Override
+ public void componentCreated(GUIComponent component)
+ {
+ super.componentCreated(component);
+ }
+
+ @Override
+ public void componentDestroyed(GUIComponent component)
+ {
+ super.componentDestroyed(component);
+ }
+
+ @Override
+ public void wireCreated(GUIWire wire)
+ {
+ super.wireCreated(wire);
+ }
+
+ @Override
+ public void wireDestroyed(GUIWire wire)
+ {
+ super.wireDestroyed(wire);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonNull;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.snippets.HighLevelStateHandler;
+
+/**
+ * The base class for all GUI components.<br>
+ * A <code>GUIComponent</code> has a position and size. The size can only be modified by subclasses.<br>
+ *
+ * @author Daniel Kirschten
+ */
+public abstract class GUIComponent
+{
+ /**
+ * The model this component is a part of.
+ */
+ protected final ViewModelModifiable model;
+ /**
+ * The name of this component. Is unique in its model.
+ */
+ public final String name;
+ private final Rectangle bounds;
+ /**
+ * The list of all pins of this component by name.
+ */
+ private final Map<String, Pin> pinsByName;
+ /**
+ * An unmodifiable view of {@link #pinsByName}.
+ */
+ protected final Map<String, Pin> pinsUnmodifiable;
+
+ private final List<Consumer<? super GUIComponent>> componentMovedListeners;
+ private final List<Consumer<? super GUIComponent>> componentResizedListeners;
+ private final List<Consumer<? super Pin>> pinAddedListeners;
+ private final List<Consumer<? super Pin>> pinRemovedListeners;
+ private final List<Runnable> redrawListeners;
+
+ private final Runnable redrawListenerForSubcomponents;
+ // creation and destruction
+
+ public GUIComponent(ViewModelModifiable model, String name)
+ {
+ this.model = model;
+ this.name = name == null ? model.getDefaultComponentName(this) : name;
+ this.bounds = new Rectangle(0, 0, 0, 0);
+ this.pinsByName = new HashMap<>();
+ this.pinsUnmodifiable = Collections.unmodifiableMap(pinsByName);
+
+ this.componentMovedListeners = new ArrayList<>();
+ this.componentResizedListeners = new ArrayList<>();
+ this.pinAddedListeners = new ArrayList<>();
+ this.pinRemovedListeners = new ArrayList<>();
+ this.redrawListeners = new ArrayList<>();
+
+ redrawListenerForSubcomponents = this::requestRedraw;
+
+ model.componentCreated(this);
+ }
+
+ /**
+ * Destroys this component. This method implicitly calls {@link ViewModelModifiable#componentDestroyed(GUIComponent)
+ * componentDestroyed()} for the model this component is a part of.
+ *
+ * @author Daniel Kirschten
+ */
+ public void destroy()
+ {
+ pinsByName.values().forEach(p -> pinRemovedListeners.forEach(l -> l.accept(p)));
+ model.componentDestroyed(this);
+ }
+
+ // pins
+
+ /**
+ * Adds the given pin to this component and calls pinAddedListeners and redrawListeners.
+ *
+ * @throws IllegalArgumentException if the pin doesn't belong to this component
+ * @throws IllegalArgumentException if there already is a pin with the given name
+ *
+ * @author Daniel Kirschten
+ */
+ protected void addPin(Pin pin)
+ {
+ if (pin.component != this)
+ throw new IllegalArgumentException("Can't add a pin not belonging to this component!");
+ if (pinsByName.containsKey(pin.name))
+ throw new IllegalArgumentException("Duplicate pin name: " + pin.name);
+ pinsByName.put(pin.name, pin);
+ callPinAddedListeners(pin);
+ pin.addRedrawListener(redrawListenerForSubcomponents);
+ requestRedraw();
+ }
+
+ /**
+ * Removes the given pin from this component and calls pinAddedListeners and redrawListeners.
+ *
+ * @throws NullPointerException if there was no pin with this name
+ *
+ * @author Daniel Kirschten
+ */
+ protected void removePin(String name)
+ {
+ Pin pin = pinsByName.remove(name);
+ callPinRemovedListeners(pin);
+ pin.removeRedrawListener(redrawListenerForSubcomponents);
+ requestRedraw();
+ }
+
+ /**
+ * Returns a collection of pins of this component.
+ *
+ * @author Daniel Kirschten
+ */
+ public Map<String, Pin> getPins()
+ {
+ return pinsUnmodifiable;
+ }
+
+ /**
+ * Returns the pin with the given name of this component.
+ *
+ * @throws IllegalArgumentException if there is no pin with the given name
+ *
+ * @author Daniel Kirschten
+ */
+ public Pin getPin(String name)
+ {
+ Pin pin = pinsByName.get(name);
+ if (pin == null)
+ throw new IllegalArgumentException("No pin with the name " + name);
+ return pin;
+ }
+
+ // high-level access
+
+ /**
+ * Sets the given high-level state to the given value. <br>
+ * See {@link HighLevelStateHandler#setHighLevelState(String, Object)} for an explanation of high-level state IDs.
+ *
+ * @see #getHighLevelState(String)
+ * @see HighLevelStateHandler#setHighLevelState(String, Object)
+ *
+ * @author Daniel Kirschten
+ */
+ @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden
+ public void setHighLevelState(String stateID, Object newState)
+ {
+ throw new IllegalArgumentException("No high level state with ID " + stateID);
+ }
+
+ /**
+ * Gets the current value of the given high-level state. <br>
+ * See {@link HighLevelStateHandler#setHighLevelState(String, Object)} for an explanation of high-level state IDs.
+ *
+ * @see #setHighLevelState(String, Object)
+ * @see HighLevelStateHandler#getHighLevelState(String)
+ *
+ * @author Daniel Kirschten
+ */
+ @SuppressWarnings("static-method") // this method is intended to be overridden
+ public Object getHighLevelState(String stateID)
+ {
+ throw new IllegalArgumentException("No high level state with ID " + stateID);
+ }
+
+ // "graphical" operations
+
+ /**
+ * Sets the position of this component and calls componentMovedListeners and redrawListeners.
+ *
+ * @author Daniel Kirschten
+ */
+ public void moveTo(double x, double y)
+ {
+ bounds.x = x;
+ bounds.y = y;
+ callComponentMovedListeners();
+ requestRedraw();
+ }
+
+ /**
+ * Sets the size of this component and calls redrawListeners.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void setSize(double width, double height)
+ {
+ bounds.width = width;
+ bounds.height = height;
+ callComponentResizedListener();
+ requestRedraw();
+ }
+
+ /**
+ * Returns the bounds of this component. Is a bit slower than {@link #getPosX()}, {@link #getPosY()}, {@link #getWidth},
+ * {@link #getHeight}, because new objects are created.
+ *
+ * @author Daniel Kirschten
+ */
+ public final Rectangle getBounds()
+ {
+ return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
+ }
+
+ /**
+ * Returns the x coordinate of the position of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
+ *
+ * @author Daniel Kirschten
+ */
+ public double getPosX()
+ {
+ return bounds.x;
+ }
+
+ /**
+ * Returns the y coordinate of the position of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
+ *
+ * @author Daniel Kirschten
+ */
+ public double getPosY()
+ {
+ return bounds.y;
+ }
+
+ /**
+ * Returns the (graphical) width of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
+ *
+ * @author Daniel Kirschten
+ */
+ public double getWidth()
+ {
+ return bounds.width;
+ }
+
+ /**
+ * Returns the height of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
+ *
+ * @author Daniel Kirschten
+ */
+ public double getHeight()
+ {
+ return bounds.height;
+ }
+
+ /**
+ * Called when this component is clicked. Absolute coordinates of the click are given. Returns true if this component consumed this
+ * click.
+ *
+ * @author Daniel Kirschten
+ */
+ @SuppressWarnings({ "static-method", "unused" }) // this method is inteded to be overridden
+ public boolean clicked(double x, double y)
+ {
+ return false;
+ }
+
+ /**
+ * Render this component to the given gc, in absoulute coordinates.
+ *
+ * @author Daniel Kirschten
+ */
+ public abstract void render(GeneralGC gc, Rectangle visibleRegion);
+
+ // serializing
+
+ @SuppressWarnings("static-method") // this method is intended to be overridden
+ public JsonElement getParams()
+ {
+ return JsonNull.INSTANCE;
+ }
+
+ // listeners
+
+ /**
+ * Calls redraw listeners.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void requestRedraw()
+ {
+ callRedrawListeners();
+ }
+
+ // @formatter:off
+ public void addComponentMovedListener (Consumer<? super GUIComponent> listener) {componentMovedListeners .add (listener);}
+ public void addComponentResizedListener (Consumer<? super GUIComponent> listener) {componentResizedListeners.add (listener);}
+ public void addPinAddedListener (Consumer<? super Pin > listener) {pinAddedListeners .add (listener);}
+ public void addPinRemovedListener (Consumer<? super Pin > listener) {pinRemovedListeners .add (listener);}
+ public void addRedrawListener (Runnable listener) {redrawListeners .add (listener);}
+
+ public void removeComponentMovedListener (Consumer<? super GUIComponent> listener) {componentMovedListeners .remove(listener);}
+ public void removeComponentResizedListener (Consumer<? super GUIComponent> listener) {componentResizedListeners.remove(listener);}
+ public void removePinAddedListener (Consumer<? super Pin > listener) {pinAddedListeners .remove(listener);}
+ public void removePinRemovedListener (Consumer<? super Pin > listener) {pinRemovedListeners .remove(listener);}
+ public void removeRedrawListener (Runnable listener) {redrawListeners .remove(listener);}
+
+ private void callComponentMovedListeners ( ) {componentMovedListeners .forEach(l -> l.accept(this));}
+ private void callComponentResizedListener( ) {componentResizedListeners.forEach(l -> l.accept(this));}
+ private void callPinAddedListeners (Pin p) {pinAddedListeners .forEach(l -> l.accept(p ));}
+ private void callPinRemovedListeners (Pin p) {pinRemovedListeners .forEach(l -> l.accept(p ));}
+ private void callRedrawListeners ( ) {redrawListeners .forEach(l -> l.run( ));}
+ // @formatter:on
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.atomic;
+
+import net.mograsim.logic.core.components.gates.AndGate;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIAndGate extends SimpleRectangularGUIGate
+{
+ public GUIAndGate(ViewModelModifiable model, int logicWidth)
+ {
+ this(model, logicWidth, null);
+ }
+
+ public GUIAndGate(ViewModelModifiable model, int logicWidth, String name)
+ {
+ super(model, "&", false, logicWidth, name);
+ setInputCount(2);// TODO make variable
+ }
+
+ static
+ {
+ ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUIAndGate.class, AndGate::new));
+ IndirectGUIComponentCreator.setComponentSupplier(GUIAndGate.class.getCanonicalName(),
+ (m, p, n) -> new GUIAndGate(m, p.getAsInt(), n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.atomic;
+
+import org.eclipse.swt.graphics.Color;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.core.LogicObserver;
+import net.mograsim.logic.core.components.BitDisplay;
+import net.mograsim.logic.core.types.BitVectorFormatter;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.BitDisplayAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.preferences.Preferences;
+
+public class GUIBitDisplay extends GUIComponent
+{
+ private static final double width = 20;
+ private static final double height = 15;
+ private static final double fontHeight = 5;
+
+ private final Pin inputPin;
+
+ private final LogicObserver logicObs;
+ private BitDisplay bitDisplay;
+
+ public GUIBitDisplay(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIBitDisplay(ViewModelModifiable model, String name)
+ {
+ super(model, name);
+ logicObs = (i) -> requestRedraw();
+
+ setSize(width, height);
+ addPin(this.inputPin = new Pin(this, "", 1, 0, height / 2));
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
+ if (foreground != null)
+ gc.setForeground(foreground);
+ gc.drawRectangle(getBounds());
+ String label = bitDisplay == null ? BitVectorFormatter.formatAsString(null)
+ : BitVectorFormatter.formatAsString(bitDisplay.getDisplayedValue());
+ Font oldFont = gc.getFont();
+ Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
+ gc.setFont(labelFont);
+ Point textExtent = gc.textExtent(label);
+ Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+ if (textColor != null)
+ gc.setForeground(textColor);
+ gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
+ gc.setFont(oldFont);
+ }
+
+ public void setLogicModelBinding(BitDisplay bitDisplay)
+ {
+ if (this.bitDisplay != null)
+ this.bitDisplay.deregisterObserver(logicObs);
+ this.bitDisplay = bitDisplay;
+ if (bitDisplay != null)
+ bitDisplay.registerObserver(logicObs);
+ }
+
+ public boolean hasLogicModelBinding()
+ {
+ return bitDisplay != null;
+ }
+
+ public BitDisplay getBitDisplay()
+ {
+ return bitDisplay;
+ }
+
+ public Pin getInputPin()
+ {
+ return inputPin;
+ }
+
+ static
+ {
+ ViewLogicModelAdapter.addComponentAdapter(new BitDisplayAdapter());
+ IndirectGUIComponentCreator.setComponentSupplier(GUIBitDisplay.class.getCanonicalName(), (m, p, n) -> new GUIBitDisplay(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.atomic;
+
+import org.eclipse.swt.graphics.Color;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.core.LogicObservable;
+import net.mograsim.logic.core.LogicObserver;
+import net.mograsim.logic.core.components.ManualSwitch;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVectorFormatter;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.ManualSwitchAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.preferences.Preferences;
+
+public class GUIManualSwitch extends GUIComponent
+{
+ private static final double width = 20;
+ private static final double height = 15;
+ private static final double fontHeight = 5;
+
+ private final Pin outputPin;
+
+ private final LogicObserver logicObs;
+ private ManualSwitch logicSwitch;
+ private ReadEnd end;
+
+ public GUIManualSwitch(ViewModelModifiable model)
+ {
+ this(model, null);
+ }
+
+ public GUIManualSwitch(ViewModelModifiable model, String name)
+ {
+ super(model, name);
+ logicObs = (i) -> requestRedraw();
+
+ setSize(width, height);
+ addPin(this.outputPin = new Pin(this, "", 1, width, height / 2));
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ // TODO maybe draw switch state too?
+ Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
+ if (foreground != null)
+ gc.setForeground(foreground);
+ gc.drawRectangle(getBounds());
+ String label = BitVectorFormatter.formatValueAsString(end);
+ Font oldFont = gc.getFont();
+ Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
+ gc.setFont(labelFont);
+ Point textExtent = gc.textExtent(label);
+ Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+ if (textColor != null)
+ gc.setForeground(textColor);
+ gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
+ gc.setFont(oldFont);
+ }
+
+ public void setLogicModelBinding(ManualSwitch logicSwitch, ReadEnd end)
+ {
+ deregisterLogicObs(this.end);
+ deregisterLogicObs(this.logicSwitch);
+ this.logicSwitch = logicSwitch;
+ this.end = end;
+ registerLogicObs(end);
+ registerLogicObs(logicSwitch);
+ }
+
+ public boolean hasLogicModelBinding()
+ {
+ return logicSwitch != null;
+ }
+
+ @Override
+ public void setHighLevelState(String stateID, Object newState)
+ {
+ switch (stateID)
+ {
+ case "out":
+ if (logicSwitch != null)
+ logicSwitch.setToValueOf((Bit) newState);
+ break;
+ default:
+ super.setHighLevelState(stateID, newState);
+ break;
+ }
+ }
+
+ @Override
+ public Object getHighLevelState(String stateID)
+ {
+ switch (stateID)
+ {
+ case "out":
+ if (logicSwitch != null)
+ return logicSwitch.getValue();
+ return null;
+ default:
+ return super.getHighLevelState(stateID);
+ }
+ }
+
+ private void registerLogicObs(LogicObservable observable)
+ {
+ if (observable != null)
+ observable.registerObserver(logicObs);
+ }
+
+ private void deregisterLogicObs(LogicObservable observable)
+ {
+ if (observable != null)
+ observable.deregisterObserver(logicObs);
+ }
+
+ @Override
+ public boolean clicked(double x, double y)
+ {
+ if (logicSwitch != null)
+ logicSwitch.toggle();
+ return true;
+ }
+
+ public ManualSwitch getManualSwitch()
+ {
+ return logicSwitch;
+ }
+
+ public Pin getOutputPin()
+ {
+ return outputPin;
+ }
+
+ static
+ {
+ ViewLogicModelAdapter.addComponentAdapter(new ManualSwitchAdapter());
+ IndirectGUIComponentCreator.setComponentSupplier(GUIManualSwitch.class.getName(), (m, p, n) -> new GUIManualSwitch(m, n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.atomic;
+
+import net.mograsim.logic.core.components.gates.NandGate;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUINandGate extends SimpleRectangularGUIGate
+{
+ public GUINandGate(ViewModelModifiable model, int logicWidth)
+ {
+ this(model, logicWidth, null);
+ }
+
+ public GUINandGate(ViewModelModifiable model, int logicWidth, String name)
+ {
+ super(model, "&", true, logicWidth, name);
+ setInputCount(2);// TODO make variable
+ }
+
+ static
+ {
+ ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUINandGate.class, NandGate::new));
+ IndirectGUIComponentCreator.setComponentSupplier(GUINandGate.class.getCanonicalName(),
+ (m, p, n) -> new GUINandGate(m, p.getAsInt(), n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.atomic;
+
+import net.mograsim.logic.core.components.gates.NotGate;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUINotGate extends SimpleRectangularGUIGate
+{
+ public GUINotGate(ViewModelModifiable model, int logicWidth)
+ {
+ this(model, logicWidth, null);
+ }
+
+ public GUINotGate(ViewModelModifiable model, int logicWidth, String name)
+ {
+ super(model, "1", true, logicWidth, name);
+ setInputCount(1);
+ }
+
+ static
+ {
+ ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUINotGate.class, (t, p, o, i) -> new NotGate(t, p, i[0], o)));
+ IndirectGUIComponentCreator.setComponentSupplier(GUINotGate.class.getCanonicalName(),
+ (m, p, n) -> new GUINotGate(m, p.getAsInt(), n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.atomic;
+
+import net.mograsim.logic.core.components.gates.OrGate;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.SimpleGateAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+
+public class GUIOrGate extends SimpleRectangularGUIGate
+{
+ public GUIOrGate(ViewModelModifiable model, int logicWidth)
+ {
+ this(model, logicWidth, null);
+ }
+
+ public GUIOrGate(ViewModelModifiable model, int logicWidth, String name)
+ {
+ super(model, "\u22651", false, logicWidth, name);// ">=1"
+ setInputCount(2);
+ }
+
+ static
+ {
+ ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUIOrGate.class, OrGate::new));
+ IndirectGUIComponentCreator.setComponentSupplier(GUIOrGate.class.getCanonicalName(),
+ (m, p, n) -> new GUIOrGate(m, p.getAsInt(), n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.atomic;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.graphics.Color;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.preferences.Preferences;
+
+public class SimpleRectangularGUIGate extends GUIComponent
+{
+ private static final double width = 20;
+ private static final double pinDistance = 10;
+ private static final double fontHeight = 5;
+ private static final double invertedCircleDiam = 3.5;
+
+ private final String label;
+ private final boolean isInverted;
+ protected final int logicWidth;
+ private final double rectWidth;
+
+ private MovablePin outputPin;
+ private final List<Pin> inputPins;
+
+ protected SimpleRectangularGUIGate(ViewModelModifiable model, String label, boolean isInverted, int logicWidth, String name)
+ {
+ super(model, name);
+ this.label = label;
+ this.logicWidth = logicWidth;
+ this.isInverted = isInverted;
+ this.rectWidth = width - (isInverted ? invertedCircleDiam : 0);
+ this.outputPin = new MovablePin(this, "Y", logicWidth, width, 0);
+ addPin(outputPin);
+ this.inputPins = new ArrayList<>();
+ setInputCount(1);
+ }
+
+ protected void setInputCount(int inputCount)
+ {
+ int oldInputCount = inputPins.size();
+ setSize(width, inputCount * pinDistance);
+ if (oldInputCount > inputCount)
+ while (inputPins.size() > inputCount)
+ removePin(inputPins.remove(inputCount).name);
+ else if (oldInputCount < inputCount)
+ for (int i = oldInputCount; i < inputCount; i++)
+ {
+ // TODO what for more than 24 input pins?
+ Pin pin = new Pin(this, String.valueOf((char) ('A' + i)), logicWidth, 0, pinDistance / 2 + i * pinDistance);
+ inputPins.add(pin);
+ addPin(pin);
+ }
+ outputPin.setRelPos(width, inputCount * pinDistance / 2);
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
+ if (foreground != null)
+ gc.setForeground(foreground);
+ double height = (getPins().size() - 1) * pinDistance;
+ gc.drawRectangle(getPosX(), getPosY(), rectWidth, height);
+ if (isInverted)
+ gc.drawOval(getPosX() + rectWidth, getPosY() + (height - invertedCircleDiam) / 2, invertedCircleDiam, invertedCircleDiam);
+ Font oldFont = gc.getFont();
+ Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
+ gc.setFont(labelFont);
+ Point textExtent = gc.textExtent(label);
+ Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+ if (textColor != null)
+ gc.setForeground(textColor);
+ gc.drawText(label, getPosX() + (rectWidth - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
+ gc.setFont(oldFont);
+ }
+
+ // serializing
+
+ /**
+ * {@link SimpleRectangularGUIGate}s implementation returns a {@link JsonPrimitive} of type int containing the {@link #logicWidth} of
+ * this component.
+ *
+ * @see GUIComponent#getParams()
+ */
+ @Override
+ public JsonElement getParams()
+ {
+ return new JsonPrimitive(logicWidth);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.atomic;
+
+import org.eclipse.swt.graphics.Color;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.modeladapter.componentadapters.NoLogicAdapter;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.preferences.Preferences;
+
+//TODO clean size calculation mess
+public class TextComponent extends GUIComponent
+{
+ private final String text;
+
+ public TextComponent(ViewModelModifiable model, String text)
+ {
+ this(model, text, null);
+ }
+
+ public TextComponent(ViewModelModifiable model, String text, String name)
+ {
+ super(model, name);
+ this.text = text;
+ // If size is unset, it defaults to 0, which could prohibit this component from being rendered, which would prohibit the size being
+ // set to a better guess
+ setSize(1, 1);
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ Point textExtent = gc.textExtent(text);
+ setSize(textExtent.x, textExtent.y);
+
+ Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+ if (textColor != null)
+ gc.setForeground(textColor);
+ gc.drawText(text, getPosX(), getPosY(), true);
+ }
+
+ // serializing
+
+ @Override
+ public JsonElement getParams()
+ {
+ return new JsonPrimitive(text);
+ }
+
+ static
+ {
+ ViewLogicModelAdapter.addComponentAdapter(new NoLogicAdapter<>(TextComponent.class));
+ IndirectGUIComponentCreator.setComponentSupplier(TextComponent.class.getName(),
+ (m, p, n) -> new TextComponent(m, p.getAsString(), n));
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.model.components.submodels;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.function.Function;
+
+import org.eclipse.swt.graphics.Color;
+
+import com.google.gson.JsonObject;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer;
+import net.mograsim.logic.model.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams;
+import net.mograsim.preferences.Preferences;
+
+public class SimpleRectangularSubmodelComponent extends SubmodelComponent
+{
+ private static final double width = 35;
+ private static final double pinDistance = 10;
+ private static final double pinNameMargin = .5;
+ private static final double labelFontHeight = 5;
+ private static final double pinNameFontHeight = 3.5;
+
+ private final String label;
+ protected final int logicWidth;
+
+ private final List<String> inputPinNames;
+ private final List<String> inputPinNamesUnmodifiable;
+ private final List<String> outputPinNames;
+ private final List<String> outputPinNamesUnmodifiable;
+
+ private Renderer symbolRenderer;
+
+ public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label)
+ {
+ this(model, logicWidth, label, null);
+ }
+
+ public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label, String name)
+ {
+ super(model, name);
+ this.label = label;
+ this.logicWidth = logicWidth;
+ this.inputPinNames = new ArrayList<>();
+ this.inputPinNamesUnmodifiable = Collections.unmodifiableList(inputPinNames);
+ this.outputPinNames = new ArrayList<>();
+ this.outputPinNamesUnmodifiable = Collections.unmodifiableList(outputPinNames);
+
+ SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams();
+ rendererParams.centerText = label;
+ rendererParams.centerTextHeight = labelFontHeight;
+ rendererParams.horizontalComponentCenter = getWidth() / 2;
+ rendererParams.pinLabelHeight = pinNameFontHeight;
+ rendererParams.pinLabelMargin = pinNameMargin;
+ symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams);
+ }
+
+ protected void setInputPins(String... pinNames)
+ {
+ setIOPins(0, inputPinNames, outputPinNames, pinNames);
+ }
+
+ protected void setOutputPins(String... pinNames)
+ {
+ setIOPins(width, outputPinNames, inputPinNames, pinNames);
+ }
+
+ private void setIOPins(double relX, List<String> pinNamesListThisSide, List<String> pinNamesListOtherSide, String... newPinNames)
+ {
+ int inputCount = newPinNames.length;
+ List<String> newPinNamesList = Arrays.asList(newPinNames);
+ if (new HashSet<>(newPinNamesList).size() != inputCount)
+ throw new IllegalArgumentException("Pin names contain duplicates");
+ for (String pinName : newPinNamesList)
+ if (pinNamesListOtherSide.contains(pinName))
+ throw new IllegalArgumentException("Can't add pin. There is a pin on the other side with the same name: " + pinName);
+ super.setSize(width, Math.max(inputCount, pinNamesListOtherSide.size()) * pinDistance);
+ for (int i = 0; i < inputCount; i++)
+ {
+ String pinName = newPinNames[i];
+ int oldPinIndex = pinNamesListThisSide.indexOf(pinName);
+ if (oldPinIndex == -1)
+ super.addSubmodelInterface(new MovablePin(this, pinName, logicWidth, relX, pinDistance / 2 + i * pinDistance));
+ else
+ getSupermodelMovablePin(pinName).setRelPos(relX, pinDistance / 2 + i * pinDistance);
+ }
+ for (String pinName : pinNamesListThisSide)
+ if (!newPinNamesList.contains(pinName))
+ super.removeSubmodelInterface(pinName);
+ pinNamesListThisSide.clear();
+ pinNamesListThisSide.addAll(newPinNamesList);
+ }
+
+ public List<String> getInputPinNames()
+ {
+ return inputPinNamesUnmodifiable;
+ }
+
+ public List<String> getOutputPinNames()
+ {
+ return outputPinNamesUnmodifiable;
+ }
+
+ @Override
+ protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
+ {
+ symbolRenderer.render(gc, visibleRegion);
+ }
+
+ @Override
+ protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
+ {
+ Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
+ if (foreground != null)
+ gc.setForeground(foreground);
+ gc.drawRectangle(getBounds());
+ }
+
+ // serializing
+
+ @Override
+ public SubmodelComponentParams calculateParams(Function<GUIComponent, String> getIdentifier)
+ {
+ SubmodelComponentParams params = super.calculateParams(getIdentifier);
+ JsonObject symbolRendererParams = new JsonObject();
+ symbolRendererParams.addProperty("centerText", label);
+ symbolRendererParams.addProperty("horizontalComponentCenter", getWidth() / 2);
+ symbolRendererParams.addProperty("centerTextHeight", labelFontHeight);
+ symbolRendererParams.addProperty("pinLabelHeight", pinNameFontHeight);
+ symbolRendererParams.addProperty("pinLabelMargin", pinNameMargin);
+ params.symbolRendererSnippetID = "SimpleRectangularLikeSymbolRenderer";
+ params.symbolRendererParams = symbolRendererParams;
+ return params;
+ }
+
+ @Override
+ protected Pin addSubmodelInterface(MovablePin supermodelPin)
+ {
+ throw new UnsupportedOperationException(
+ "Can't add submodel interfaces to a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
+ }
+
+ @Override
+ protected void removeSubmodelInterface(String name)
+ {
+ throw new UnsupportedOperationException(
+ "Can't remove submodel interfaces of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
+ }
+
+ @Override
+ protected void setSize(double width, double height)
+ {
+ throw new UnsupportedOperationException(
+ "Can't set the size of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.submodels;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.function.Function;
+
+import net.haspamelodica.swt.helper.gcs.GCConfig;
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.gcs.TranslatedGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.LogicUIRenderer;
+import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.InterfacePinParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters.InnerComponentParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams.InnerPinParams;
+
+/**
+ * A {@link GUIComponent} consisting of another model. A <code>SubmodelComponent</code> can have so-called "interface pins" connecting the
+ * inner and outer models.
+ */
+public abstract class SubmodelComponent extends GUIComponent
+{
+ private static final String SUBMODEL_INTERFACE_NAME = "_submodelinterface";
+ /**
+ * A modifiable view of {@link #submodel}.
+ */
+ protected final ViewModelModifiable submodelModifiable;
+ /**
+ * The model this {@link SubmodelComponent} consists of.
+ */
+ public final ViewModel submodel;
+ /**
+ * The list of all submodel interface pins of this {@link SubmodelComponent} on the submodel side.
+ */
+ private final Map<String, MovablePin> submodelPins;
+ /**
+ * An unmodifiable view of {@link #submodelPins}.
+ */
+ private final Map<String, MovablePin> submodelMovablePinsUnmodifiable;
+ /**
+ * An unmodifiable view of {@link #submodelPins} where pins are not movable.
+ */
+ private final Map<String, Pin> submodelUnmovablePinsUnmodifiable;
+ /**
+ * The list of all submodel interface pins of this {@link SubmodelComponent} on the supermodel side.
+ */
+ private final Map<String, MovablePin> supermodelPins;
+ /**
+ * An unmodifiable view of {@link #supermodelPins}.
+ */
+ private final Map<String, MovablePin> supermodelMovablePinsUnmodifiable;
+ /**
+ * An unmodifiable view of {@link #supermodelPins} where pins are not movable.
+ */
+ private final Map<String, Pin> supermodelUnmovablePinsUnmodifiable;
+ /**
+ * A pseudo-component containing all submodel interface pins on the submodel side.
+ */
+ private final SubmodelInterface submodelInterface;
+
+ /**
+ * The list of all high level state IDs this component supports without delegating to subcomponents.
+ */
+ private final Set<String> highLevelAtomicStates;
+ /**
+ * A map of high level state subcomponent IDs to the {@link GUIComponent} high level state access requests are delegated to.
+ */
+ private final Map<String, GUIComponent> subcomponentsByHighLevelStateSubcomponentID;
+
+ /**
+ * The factor by which the submodel is scaled when rendering.
+ */
+ private double submodelScale;
+ /**
+ * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel starts to
+ * be visible.
+ */
+ private double maxVisibleRegionFillRatioForAlpha0;
+ /**
+ * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel is fully
+ * visible.
+ */
+ private double minVisibleRegionFillRatioForAlpha1;
+ /**
+ * The renderer used for rendering the submodel.
+ */
+ private final LogicUIRenderer renderer;
+
+ // creation and destruction
+
+ public SubmodelComponent(ViewModelModifiable model, String name)
+ {
+ super(model, name);
+ this.submodelModifiable = new ViewModelModifiable();
+ this.submodel = submodelModifiable;
+ this.submodelPins = new HashMap<>();
+ this.submodelMovablePinsUnmodifiable = Collections.unmodifiableMap(submodelPins);
+ this.submodelUnmovablePinsUnmodifiable = Collections.unmodifiableMap(submodelPins);
+ this.supermodelPins = new HashMap<>();
+ this.supermodelMovablePinsUnmodifiable = Collections.unmodifiableMap(supermodelPins);
+ this.supermodelUnmovablePinsUnmodifiable = Collections.unmodifiableMap(supermodelPins);
+ this.submodelInterface = new SubmodelInterface(submodelModifiable, SUBMODEL_INTERFACE_NAME);
+
+ this.highLevelAtomicStates = new HashSet<>();
+ this.subcomponentsByHighLevelStateSubcomponentID = new HashMap<>();
+
+ this.submodelScale = 1;
+ this.maxVisibleRegionFillRatioForAlpha0 = 0.4;
+ this.minVisibleRegionFillRatioForAlpha1 = 0.8;
+ this.renderer = new LogicUIRenderer(submodelModifiable);
+
+ submodelModifiable.addRedrawListener(this::requestRedraw);
+ }
+
+ // pins
+
+ /**
+ * Adds a new submodel interface pin.
+ *
+ * @param supermodelPin the submodel interface pin on the supermodel side
+ *
+ * @return the submodel interface pin on the submodel side
+ *
+ * @author Daniel Kirschten
+ */
+ protected Pin addSubmodelInterface(MovablePin supermodelPin)
+ {
+ super.addPin(supermodelPin);// do this first to be fail-fast if the supermodel does not belong to this component
+
+ String name = supermodelPin.name;
+ MovablePin submodelPin = new MovablePin(submodelInterface, name, supermodelPin.logicWidth, supermodelPin.getRelX() / submodelScale,
+ supermodelPin.getRelY() / submodelScale);
+
+ submodelPin.addPinMovedListener(p ->
+ {
+ double newRelX = p.getRelX() * submodelScale;
+ double newRelY = p.getRelY() * submodelScale;
+ if (supermodelPin.getRelX() != newRelX || supermodelPin.getRelY() != newRelY)
+ supermodelPin.setRelPos(newRelX, newRelY);
+ });
+ supermodelPin.addPinMovedListener(p ->
+ {
+ double newRelX = p.getRelX() / submodelScale;
+ double newRelY = p.getRelY() / submodelScale;
+ if (submodelPin.getRelX() != newRelX || submodelPin.getRelY() != newRelY)
+ submodelPin.setRelPos(newRelX, newRelY);
+ });
+
+ submodelInterface.addPin(submodelPin);
+
+ submodelPins.put(name, submodelPin);
+ supermodelPins.put(name, supermodelPin);
+
+ // no need to call requestRedraw() because addPin() will request a redraw
+ return submodelPin;
+ }
+
+ /**
+ * Removes a submodel interface pin.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void removeSubmodelInterface(String name)
+ {
+ super.removePin(name);// do this first to be fail-fast if this component doesn't have a pin with the given name
+ Pin submodelPin = submodelPins.remove(name);
+ submodelInterface.removePin(submodelPin.name);
+ supermodelPins.remove(name);
+
+ // no need to call requestRedraw() because removePin() will request a redraw
+ }
+
+ /**
+ * Returns a collection of submodel interface pins on the submodel side of this component.
+ *
+ * @author Daniel Kirschten
+ */
+ public Map<String, Pin> getSubmodelPins()
+ {
+ return submodelUnmovablePinsUnmodifiable;
+ }
+
+ /**
+ * Returns the submodel interface pin with the given name on the submodel side of this component.
+ *
+ * @author Daniel Kirschten
+ */
+ public Pin getSubmodelPin(String name)
+ {
+ return getSubmodelMovablePin(name);
+ }
+
+ /**
+ * Returns a collection of movable submodel interface pins on the submodel side of this component.
+ *
+ * @author Daniel Kirschten
+ */
+ protected Map<String, MovablePin> getSubmodelMovablePins()
+ {
+ return submodelMovablePinsUnmodifiable;
+ }
+
+ /**
+ * Returns the movable submodel interface pin with the given name on the submodel side of this component.
+ *
+ * @author Daniel Kirschten
+ */
+ protected MovablePin getSubmodelMovablePin(String name)
+ {
+ return submodelPins.get(name);
+ }
+
+ /**
+ * Returns a collection of submodel interface pins on the supermodel side of this component.
+ *
+ * @author Daniel Kirschten
+ */
+ public Map<String, Pin> getSupermodelPins()
+ {
+ return supermodelUnmovablePinsUnmodifiable;
+ }
+
+ /**
+ * Returns the submodel interface pin with the given name on the supermodel side of this component.
+ *
+ * @author Daniel Kirschten
+ */
+ public Pin getSupermodelPin(String name)
+ {
+ return getSupermodelMovablePin(name);
+ }
+
+ /**
+ * Returns a collection of movable submodel interface pins on the supermodel side of this component.
+ *
+ * @author Daniel Kirschten
+ */
+ protected Map<String, MovablePin> getSupermodelMovablePins()
+ {
+ return supermodelMovablePinsUnmodifiable;
+ }
+
+ /**
+ * Returns the movable submodel interface pin with the given name on the supermodel side of this component.
+ *
+ * @author Daniel Kirschten
+ */
+ protected MovablePin getSupermodelMovablePin(String name)
+ {
+ return supermodelPins.get(name);
+ }
+
+ // high-level access
+
+ /**
+ * Adds the given subcomponent ID to the set of allowed subcomponent IDs and links the given {@link GUIComponent} as the delegate target
+ * for this subcomponent ID. <br>
+ * Note that this method does not affect whether {@link #setSubcomponentHighLevelState(String, String, Object)
+ * set}/{@link #getSubcomponentHighLevelState(String, String)} will be called. <br>
+ * See {@link GUIComponent#setHighLevelState(String, Object)} for details about subcomponent IDs.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void addHighLevelStateSubcomponentID(String subcomponentID, GUIComponent subcomponent)
+ {
+ checkHighLevelStateIDPart(subcomponentID);
+ subcomponentsByHighLevelStateSubcomponentID.put(subcomponentID, subcomponent);
+ }
+
+ /**
+ * Removes the given subcomponent ID from the set of allowed subcomponent IDs. <br>
+ * Note that this method does not affect whether {@link #setSubcomponentHighLevelState(String, String, Object)
+ * set}/{@link #getSubcomponentHighLevelState(String, String)} will be called.<br>
+ * See {@link GUIComponent#setHighLevelState(String, Object)} for details about subcomponent IDs.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void removeHighLevelStateSubcomponentID(String subcomponentID)
+ {
+ subcomponentsByHighLevelStateSubcomponentID.remove(subcomponentID);
+ }
+
+ /**
+ * Adds the given atomic state ID to the set of allowed atomic state IDs. <br>
+ * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void addAtomicHighLevelStateID(String stateID)
+ {
+ checkHighLevelStateIDPart(stateID);
+ highLevelAtomicStates.add(stateID);
+ }
+
+ /**
+ * Removes the given atomic state ID from the set of allowed atomic state IDs. <br>
+ * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void removeAtomicHighLevelStateID(String stateID)
+ {
+ highLevelAtomicStates.remove(stateID);
+ }
+
+ @Override
+ public final void setHighLevelState(String stateID, Object newState)
+ {
+ int indexOfDot = stateID.indexOf('.');
+ if (indexOfDot == -1)
+ if (highLevelAtomicStates.contains(stateID))
+ setAtomicHighLevelState(stateID, newState);
+ else
+ super.setHighLevelState(stateID, newState);
+ else
+ setSubcomponentHighLevelState(stateID.substring(0, indexOfDot), stateID.substring(indexOfDot + 1), newState);
+ }
+
+ /**
+ * This method is called in {@link #setHighLevelState(String, Object)} when the state ID is not atomic. The default implementation uses
+ * the information given to {@link #addHighLevelStateSubcomponentID(String, GUIComponent)
+ * add}/{@link #removeHighLevelStateSubcomponentID(String)} to decide which subcomponent to delegate to.<br>
+ * Note that {@link #addHighLevelStateSubcomponentID(String, GUIComponent) add}/{@link #removeHighLevelStateSubcomponentID(String)}
+ * don't affect whether this method will be called.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void setSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID, Object newState)
+ {
+ GUIComponent subcomponent = subcomponentsByHighLevelStateSubcomponentID.get(subcomponentID);
+ if (subcomponent != null)
+ subcomponent.setHighLevelState(subcomponentHighLevelStateID, newState);
+ else
+ super.setHighLevelState(subcomponentID + "." + subcomponentHighLevelStateID, newState);
+ }
+
+ /**
+ * This method is called in {@link #setHighLevelState(String, Object)} when the state ID is atomic and in the set of allowed atomic
+ * state IDs. <br>
+ * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
+ *
+ * @author Daniel Kirschten
+ */
+ @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden
+ protected void setAtomicHighLevelState(String stateID, Object newState)
+ {
+ throw new IllegalStateException("Unknown high level state ID: " + stateID);
+ }
+
+ @Override
+ public final Object getHighLevelState(String stateID)
+ {
+ int indexOfDot = stateID.indexOf('.');
+ if (indexOfDot == -1)
+ {
+ if (highLevelAtomicStates.contains(stateID))
+ return getAtomicHighLevelState(stateID);
+ return super.getHighLevelState(stateID);
+ }
+ return getSubcomponentHighLevelState(stateID.substring(0, indexOfDot), stateID.substring(indexOfDot + 1));
+ }
+
+ /**
+ * This method is called in {@link #getHighLevelState(String, Object)} when the state ID is not atomic. The default implementation uses
+ * the information given to {@link #addHighLevelStateSubcomponentID(String, GUIComponent)
+ * add}/{@link #removeHighLevelStateSubcomponentID(String)} to decide which subcomponent to delegate to. <br>
+ * Note that {@link #addHighLevelStateSubcomponentID(String, GUIComponent) add}/{@link #removeHighLevelStateSubcomponentID(String)}
+ * don't affect whether this method will be called.
+ *
+ * @author Daniel Kirschten
+ */
+ protected Object getSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID)
+ {
+ GUIComponent subcomponent = subcomponentsByHighLevelStateSubcomponentID.get(subcomponentID);
+ if (subcomponent != null)
+ return subcomponent.getHighLevelState(subcomponentHighLevelStateID);
+ return super.getHighLevelState(subcomponentID + "." + subcomponentHighLevelStateID);
+ }
+
+ /**
+ * This method is called in {@link SubmodelComponent#getHighLevelState(String)} when the state ID is in the set of allowed atomic state
+ * IDs. <br>
+ * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
+ *
+ * @author Daniel Kirschten
+ */
+ @SuppressWarnings("static-method") // this method is intended to be overridden
+ protected Object getAtomicHighLevelState(String stateID)
+ {
+ throw new IllegalStateException("Unknown high level state ID: " + stateID);
+ }
+
+ private static void checkHighLevelStateIDPart(String stateIDPart)
+ {
+ if (stateIDPart.indexOf('.') != -1)
+ throw new IllegalArgumentException("Illegal high level state ID part (contains dot): " + stateIDPart);
+
+ }
+
+ // "graphical" operations
+
+ /**
+ * Sets the factor by which the submodel is scaled when rendering and calls redrawListeners. Note that the submodel interface pins will
+ * stay at their position relative to the supermodel, which means they will move relative to the submodel.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void setSubmodelScale(double submodelScale)
+ {
+ this.submodelScale = submodelScale;
+
+ for (Entry<String, MovablePin> e : supermodelPins.entrySet())
+ getSubmodelMovablePin(e.getKey()).setRelPos(e.getValue().getRelX() * submodelScale, e.getValue().getRelY() * submodelScale);
+
+ requestRedraw();// needed if there is no submodel interface pin
+ }
+
+ /**
+ * Returns the current factor by which the submodel is scaled when rendering.
+ *
+ * @author Daniel Kirschten
+ */
+ protected double getSubmodelScale()
+ {
+ return submodelScale;
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ GCConfig conf = new GCConfig(gc);
+ TranslatedGC tgc = new TranslatedGC(gc, getPosX(), getPosY(), submodelScale, true);
+ conf.reset(tgc);
+ double visibleRegionFillRatio = Math.max(getWidth() / visibleRegion.width, getHeight() / visibleRegion.height);
+ double alphaFactor = map(visibleRegionFillRatio, maxVisibleRegionFillRatioForAlpha0, minVisibleRegionFillRatioForAlpha1, 0, 1);
+ alphaFactor = Math.max(0, Math.min(1, alphaFactor));
+ // we need to take the old alpha into account to support nested submodules better.
+ int oldAlpha = gc.getAlpha();
+ int submodelAlpha = Math.max(0, Math.min(255, (int) (oldAlpha * alphaFactor)));
+ int labelAlpha = Math.max(0, Math.min(255, (int) (oldAlpha * (1 - alphaFactor))));
+ if (submodelAlpha != 0)
+ {
+ gc.setAlpha(submodelAlpha);
+ renderer.render(tgc, visibleRegion.translate(getPosX() / submodelScale, getPosY() / submodelScale, 1 / submodelScale));
+ }
+ if (labelAlpha != 0)
+ {
+ gc.setAlpha(labelAlpha);
+ renderSymbol(gc, visibleRegion);
+ }
+ conf.reset(gc);
+ // draw the outline after all other operations to make interface pins look better
+ renderOutline(gc, visibleRegion);
+ }
+
+ // TODO make this a path
+ /**
+ * Render the outline of this {@link SubmodelComponent}, e.g. the graphical elements that should stay visible if the submodel is drawn.
+ *
+ * @author Daniel Kirschten
+ */
+ protected abstract void renderOutline(GeneralGC gc, Rectangle visibleRegion);
+
+ /**
+ * Render the symbol of this {@link SubmodelComponent}, e.g. the things that should be hidden if the submodel is drawn.
+ *
+ * @author Daniel Kirschten
+ */
+ protected abstract void renderSymbol(GeneralGC gc, Rectangle visibleRegion);
+
+ private static double map(double val, double valMin, double valMax, double mapMin, double mapMax)
+ {
+ return mapMin + (val - valMin) * (mapMax - mapMin) / (valMax - valMin);
+ }
+
+ @Override
+ public boolean clicked(double x, double y)
+ {
+ double scaledX = (x - getPosX()) / submodelScale;
+ double scaledY = (y - getPosY()) / submodelScale;
+ for (GUIComponent component : submodel.getComponentsByName().values())
+ if (component.getBounds().contains(scaledX, scaledY) && component.clicked(scaledX, scaledY))
+ return true;
+ return false;
+ }
+
+ // serializing
+
+ // TODO move the methods below to serializing classes
+
+ public SubmodelComponentParams calculateParams()
+ {
+ return calculateParams(c -> "class:" + c.getClass().getCanonicalName());
+ }
+
+ /**
+ * @return {@link SubmodelComponentParams}, which describe this {@link SubmodelComponent}.
+ */
+ public SubmodelComponentParams calculateParams(Function<GUIComponent, String> getIdentifier)
+ {
+ SubmodelComponentParams params = new SubmodelComponentParams();
+ params.submodel = calculateSubmodelParams(getIdentifier);
+
+ params.width = getWidth();
+ params.height = getHeight();
+
+ InterfacePinParams[] iPins = new InterfacePinParams[getPins().size()];
+ int i = 0;
+ for (Pin p : getPins().values())
+ {
+ InterfacePinParams iPinParams = new InterfacePinParams();
+ iPins[i] = iPinParams;
+ iPinParams.location = p.getRelPos();
+ iPinParams.name = p.name;
+ iPinParams.logicWidth = p.logicWidth;
+ i++;
+ }
+ params.interfacePins = iPins;
+ return params;
+ }
+
+ private SubmodelParameters calculateSubmodelParams(Function<GUIComponent, String> getIdentifier)
+ {
+ SubmodelParameters params = new SubmodelParameters();
+ params.innerScale = getSubmodelScale();
+
+ Map<String, GUIComponent> components = new HashMap<>(submodel.getComponentsByName());
+ components.remove(SUBMODEL_INTERFACE_NAME);
+ InnerComponentParams[] comps = new InnerComponentParams[components.size()];
+ int i = 0;
+ for (GUIComponent component : components.values())
+ {
+ InnerComponentParams inner = new InnerComponentParams();
+ comps[i] = inner;
+ inner.pos = new Point(component.getPosX(), component.getPosY());
+ inner.id = getIdentifier.apply(component);
+ inner.params = component.getParams();
+ inner.name = component.name;
+ i++;
+ }
+ params.subComps = comps;
+
+ List<GUIWire> wireList = submodel.getWires();
+ InnerWireParams wires[] = new InnerWireParams[wireList.size()];
+ i = 0;
+ for (GUIWire wire : wireList)
+ {
+ InnerWireParams inner = new InnerWireParams();
+ wires[i] = inner;
+ InnerPinParams pin1Params = new InnerPinParams(), pin2Params = new InnerPinParams();
+
+ pin1Params.pinName = wire.getPin1().name;
+ pin1Params.compName = wire.getPin1().component.name;
+ pin2Params.pinName = wire.getPin2().name;
+ pin2Params.compName = wire.getPin2().component.name;
+ inner.pin1 = pin1Params;
+ inner.pin2 = pin2Params;
+ inner.path = wire.getPath();
+ i++;
+ }
+ params.innerWires = wires;
+ return params;
+ }
+
+ // operations no longer supported
+
+ @Override
+ protected void addPin(Pin pin)
+ {
+ throw new UnsupportedOperationException("Can't add pins to a SubmodelComponent directly, call addSubmodelInterface instead");
+ }
+
+ @Override
+ protected void removePin(String name)
+ {
+ throw new UnsupportedOperationException("Can't remove pins of a SubmodelComponent directly, call removeSubmodelInterface instead");
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.components.submodels;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+
+public class SubmodelInterface extends GUIComponent
+{
+ public SubmodelInterface(ViewModelModifiable model, String name)
+ {
+ super(model, name);
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {// nothing to do here
+ }
+
+ /**
+ * {@inheritDoc}<br>
+ * This method is only marked public in {@link SubmodelInterface} for {@link SubmodelComponent} to be able to add / remove pins to /
+ * from a SubmodelInterface.<br>
+ *
+ * @see GUIComponent#removePin(Pin)
+ *
+ * @author Daniel Kirschten
+ */
+ @Override
+ public void addPin(Pin pin)
+ {
+ super.addPin(pin);
+ }
+
+ /**
+ * {@inheritDoc}<br>
+ * This method is only marked public in {@link SubmodelInterface} for {@link SubmodelComponent} to be able to add / remove pins to /
+ * from a SubmodelInterface.<br>
+ *
+ * @see GUIComponent#removePin(Pin)
+ *
+ * @author Daniel Kirschten
+ */
+ @Override
+ protected void removePin(String name)
+ {
+ super.removePin(name);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.wires;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.swt.SWT;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.core.LogicObserver;
+import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.core.types.BitVectorFormatter;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+
+/**
+ * A wire connecting exactly two {@link Pin}s.
+ *
+ * @author Daniel Kirschten
+ */
+public class GUIWire
+{
+ /**
+ * The model this wire is a part of.
+ */
+ private final ViewModelModifiable model;
+ /**
+ * The logical width of this wire. Is equal to the logical with of {@link #pin1} and {@link #pin2}.
+ */
+ public final int logicWidth;
+ /**
+ * The {@link Pin} on one side of this wire, usually the signal source.
+ */
+ private Pin pin1;
+ /**
+ * The {@link Pin} on one side of this wire, usually the signal target.
+ */
+ private Pin pin2;
+ /**
+ * The user-defined path between {@link #pin1} and {@link #pin2}.<br>
+ * Special cases: <code>null</code> means "choose an interpolation as fits", and an empty array means "direct connection without any
+ * interpolation".
+ */
+ private Point[] path;
+ /**
+ * The bounds of this wire, excluding line width (and line joins, if the line join is {@link SWT#JOIN_MITER})
+ */
+ private final Rectangle bounds;
+ /**
+ * The effective path of this wire, including automatic interpolation and the position of both {@link Pin}s. Is never null.
+ */
+ private double[] effectivePath;
+
+ private final List<Runnable> redrawListeners;
+
+ private final Set<PathChangedListener> pathChangedListeners;
+
+ /**
+ * A LogicObserver calling redrawListeners. Used for logic model bindings.
+ */
+ private final LogicObserver logicObs;
+ /**
+ * A ReadEnd of the logic wire this GUI wire currently is bound to.
+ */
+ private ReadEnd end;
+
+ // creation and destruction
+
+ /**
+ * Creates a new {@link GUIWire} with automatic interpolation.
+ *
+ * @author Daniel Kirschten
+ */
+ public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, WireCrossPoint pin2)
+ {
+ this(model, pin1, pin2, (Point[]) null);
+ }
+
+ /**
+ * Creates a new {@link GUIWire} with automatic interpolation.
+ *
+ * @author Daniel Kirschten
+ */
+ public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, Pin pin2)
+ {
+ this(model, pin1, pin2, (Point[]) null);
+ }
+
+ /**
+ * Creates a new {@link GUIWire} with automatic interpolation.
+ *
+ * @author Daniel Kirschten
+ */
+ public GUIWire(ViewModelModifiable model, Pin pin1, WireCrossPoint pin2)
+ {
+ this(model, pin1, pin2, (Point[]) null);
+ }
+
+ /**
+ * Creates a new {@link GUIWire} with automatic interpolation.
+ *
+ * @author Daniel Kirschten
+ */
+ public GUIWire(ViewModelModifiable model, Pin pin1, Pin pin2)
+ {
+ this(model, pin1, pin2, (Point[]) null);
+ }
+
+ /**
+ * Creates a new {@link GUIWire} without automatic interpolation.
+ *
+ * @author Daniel Kirschten
+ */
+ public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, WireCrossPoint pin2, Point... path)
+ {
+ this(model, pin1.getPin(), pin2.getPin(), path);
+ }
+
+ /**
+ * Creates a new {@link GUIWire} without automatic interpolation.
+ *
+ * @author Daniel Kirschten
+ */
+ public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, Pin pin2, Point... path)
+ {
+ this(model, pin1.getPin(), pin2, path);
+ }
+
+ /**
+ * Creates a new {@link GUIWire} without automatic interpolation.
+ *
+ * @author Daniel Kirschten
+ */
+ public GUIWire(ViewModelModifiable model, Pin pin1, WireCrossPoint pin2, Point... path)
+ {
+ this(model, pin1, pin2.getPin(), path);
+ }
+
+ /**
+ * Creates a new {@link GUIWire} without automatic interpolation.
+ *
+ * @author Daniel Kirschten
+ */
+ public GUIWire(ViewModelModifiable model, Pin pin1, Pin pin2, Point... path)
+ {
+ pathChangedListeners = new HashSet<>();
+ logicObs = (i) -> callRedrawListeners();
+ this.model = model;
+ this.logicWidth = pin1.logicWidth;
+ if (pin2.logicWidth != pin1.logicWidth)
+ throw new IllegalArgumentException("Can't connect pins of different logic width");
+
+ this.pin1 = pin1;
+ this.pin2 = pin2;
+
+ this.path = path == null ? null : Arrays.copyOf(path, path.length);
+ this.bounds = new Rectangle(0, 0, -1, -1);
+
+ redrawListeners = new ArrayList<>();
+
+ pin1.addPinMovedListener(p -> pinMoved());
+ pin2.addPinMovedListener(p -> pinMoved());
+
+ recalculateEffectivePath();
+
+ model.wireCreated(this);
+ }
+
+ /**
+ * Destroys this wire. This method implicitly calls {@link ViewModelModifiable#wireDestroyed(GUIWire) wireDestroyed()} for the model
+ * this component is a part of.
+ *
+ * @author Daniel Kirschten
+ */
+ public void destroy()
+ {
+ model.wireDestroyed(this);
+ }
+
+ // pins
+
+ /**
+ * Returns the {@link Pin} on one side of this wire, usually the signal source.
+ *
+ * @author Daniel Kirschten
+ */
+ public Pin getPin1()
+ {
+ return pin1;
+ }
+
+ /**
+ * Returns the {@link Pin} on one side of this wire, usually the signal target.
+ *
+ * @author Daniel Kirschten
+ */
+ public Pin getPin2()
+ {
+ return pin2;
+ }
+
+ /**
+ * Called when {@link #pin1} or {@link #pin2} were moved.
+ *
+ * @author Daniel Kirschten
+ */
+ private void pinMoved()
+ {
+ recalculateEffectivePath();
+ callRedrawListeners();
+ }
+
+ // "graphical" operations
+
+ /**
+ * Recalculates {@link #effectivePath} "from scratch". Also updates {@link #bounds}.
+ *
+ * @author Daniel Kirschten
+ */
+ private void recalculateEffectivePath()
+ {
+ Point pos1 = pin1.getPos(), pos2 = pin2.getPos();
+
+ double boundsX1 = Math.min(pos1.x, pos2.x);
+ double boundsY1 = Math.min(pos1.y, pos2.y);
+ double boundsX2 = Math.max(pos1.x, pos2.x);
+ double boundsY2 = Math.max(pos1.y, pos2.y);
+
+ if (path == null)
+ effectivePath = new double[] { pos1.x, pos1.y, (pos1.x + pos2.x) / 2, pos1.y, (pos1.x + pos2.x) / 2, pos2.y, pos2.x, pos2.y };
+ else
+ {
+ effectivePath = new double[path.length * 2 + 4];
+ effectivePath[0] = pos1.x;
+ effectivePath[1] = pos1.y;
+ for (int srcI = 0, dstI = 2; srcI < path.length; srcI++, dstI += 2)
+ {
+ double pathX = path[srcI].x;
+ double pathY = path[srcI].y;
+ effectivePath[dstI + 0] = pathX;
+ effectivePath[dstI + 1] = pathY;
+ if (pathX < boundsX1)
+ boundsX1 = pathX;
+ if (pathX > boundsX2)
+ boundsX2 = pathX;
+ if (pathY < boundsY1)
+ boundsY1 = pathY;
+ if (pathY > boundsY2)
+ boundsY2 = pathY;
+ }
+ effectivePath[effectivePath.length - 2] = pos2.x;
+ effectivePath[effectivePath.length - 1] = pos2.y;
+ }
+
+ bounds.x = boundsX1;
+ bounds.y = boundsY1;
+ bounds.width = boundsX2 - boundsX1;
+ bounds.height = boundsY2 - boundsY1;
+ }
+
+ /**
+ * Returns the bounds of this wire, excluding line width (and line joins, if the line join is {@link SWT#JOIN_MITER})
+ *
+ * @author Daniel Kirschten
+ */
+ public Rectangle getBounds()
+ {
+ return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
+ }
+
+ /**
+ * Render this wire to the given gc, in absoulute coordinates.
+ *
+ * @author Daniel Kirschten
+ */
+ public void render(GeneralGC gc)
+ {
+ ColorDefinition wireColor = BitVectorFormatter.formatAsColor(end);
+ if (wireColor != null)
+ gc.setForeground(ColorManager.current().toColor(wireColor));
+ gc.drawPolyline(effectivePath);
+ }
+
+ /**
+ * The user-defined path between {@link #pin1} and {@link #pin2}. Note that this is not neccessarily equal to the effective path drawn
+ * in {@link #render(GeneralGC)}.<br>
+ * Special cases: <code>null</code> means "choose an interpolation as fits", and an empty array means "direct connection without any
+ * interpolation".
+ *
+ * @author Daniel Kirschten
+ */
+ public Point[] getPath()
+ {
+ return path == null ? null : path.clone();
+ }
+
+ // logic model binding
+
+ /**
+ * Binds this {@link GUIWire} to the given {@link ReadEnd}: The color of this {@link GUIWire} will now depend on the state of the given
+ * {@link ReadEnd}, and further changes of the given {@link ReadEnd} will result in readrawListeners being called.<br>
+ * The argument can be null, in which case the old binding is stopped.
+ *
+ * @author Daniel Kirschten
+ */
+ public void setLogicModelBinding(ReadEnd end)
+ {
+ if (this.end != null)
+ this.end.deregisterObserver(logicObs);
+ this.end = end;
+ if (end != null)
+ end.registerObserver(logicObs);
+ }
+
+ /**
+ * Returns whether this {@link GUIWire} has a logic model binding or not.
+ *
+ * @author Daniel Kirschten
+ */
+ public boolean hasLogicModelBinding()
+ {
+ return end != null;
+ }
+
+ /**
+ * If this {@link GUIWire} has a logic model binding, delegates to {@link Wire#forceValues(BitVector)} for the {@link Wire}
+ * corresponding to this {@link GUIWire}.
+ *
+ * @author Daniel Kirschten
+ */
+ public void forceWireValues(BitVector values)
+ {
+ end.getWire().forceValues(values);
+ }
+
+ /**
+ * If this {@link GUIWire} has a logic model binding, delegates to {@link ReadEnd#getValues()} for the {@link ReadEnd} corresponding to
+ * this {@link GUIWire}.
+ *
+ * @author Daniel Kirschten
+ */
+ public BitVector getWireValues()
+ {
+ return end.getValues();
+ }
+
+ // listeners
+
+ // @formatter:off
+ public void addRedrawListener (Runnable listener) {redrawListeners .add (listener);}
+
+ public void removeRedrawListener(Runnable listener) {redrawListeners .remove(listener);}
+
+ private void callRedrawListeners() {redrawListeners.forEach(l -> l.run());}
+
+ public void addPathChangedListener(PathChangedListener l) { pathChangedListeners.add(l); }
+
+ public void removePathChangedListener(PathChangedListener l) { pathChangedListeners.remove(l); }
+
+ public void callPathChangedListeners(int diff) { pathChangedListeners.forEach(l -> l.pathChanged(this, diff)); }
+
+ @FunctionalInterface
+ public static interface PathChangedListener
+ {
+ /**
+ * Called whenever the {@link Wire}'s path changes
+ *
+ * @param wire The wire which had its path changed
+ * @param diff The length difference between before and after the path change.
+ */
+ public void pathChanged(GUIWire wire, int diff);
+ }
+ // @formatter:on
+
+ @Override
+ public String toString()
+ {
+ return "GUIWire [" + pin1 + "---" + pin2 + ", value=" + (end == null ? "null" : end.getValues()) + "]";
+ }
+
+ public void setPath(Point[] path)
+ {
+ int diff = (path == null ? 0 : path.length) - (this.path == null ? 0 : this.path.length);
+ this.path = path == null ? null : path.clone();
+ recalculateEffectivePath();
+ callPathChangedListeners(diff);
+ callRedrawListeners();
+ }
+
+ public void setPathPoint(Point p, int index)
+ {
+ path[index] = p;
+ recalculateEffectivePath();
+ callPathChangedListeners(0);
+ callRedrawListeners();
+ }
+
+ public void insertPathPoint(Point p, int index)
+ {
+ Point[] path = getPath();
+ if (path == null)
+ setPath(new Point[] { p });
+ else
+ {
+ Point[] newPath = new Point[path.length + 1];
+ System.arraycopy(path, 0, newPath, 0, index);
+ if (index < path.length)
+ System.arraycopy(path, index, newPath, index + 1, path.length - index);
+ newPath[index] = p;
+ setPath(newPath);
+ }
+ }
+
+ public void removePathPoint(int index)
+ {
+ Point[] path = getPath();
+ Point[] newPath = new Point[path.length - 1];
+ System.arraycopy(path, 0, newPath, 0, index);
+ if (index < path.length - 1)
+ System.arraycopy(path, index + 1, newPath, index, path.length - index - 1);
+ setPath(newPath);
+ }
+
+ /**
+ * @throws IndexOutOfBoundsException
+ */
+ public Point getPathPoint(int index)
+ {
+ return path[index];
+ }
+
+ public int getPathLength()
+ {
+ return path.length;
+ }
+
+ public double[] getEffectivePath()
+ {
+ return effectivePath.clone();
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.wires;
+
+import net.mograsim.logic.model.model.components.GUIComponent;
+
+/**
+ * Exactly like {@link Pin}, but {@link #setRelPos(double, double) setRelPos(...)} is public.
+ *
+ * @author Daniel Kirschten
+ */
+public class MovablePin extends Pin
+{
+ public MovablePin(GUIComponent component, String name, int logicWidth, double relX, double relY)
+ {
+ super(component, name, logicWidth, relX, relY);
+ }
+
+ @Override
+ public void setRelPos(double relX, double relY)
+ {
+ super.setRelPos(relX, relY);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.wires;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.components.GUIComponent;
+
+/**
+ * A connection interface between a GUIComponent and the rest of a ViewModel. Pins usually are created by {@link GUIComponent}s themselves.
+ * <br>
+ * A pin has a name identifying it. Pin names are unique for a {@link GUIComponent}: Every pin of a {@link GUIComponent} has a different
+ * name, but different {@link GUIComponent}s can have pins with the same name.
+ *
+ * @author Daniel Kirschten
+ */
+public class Pin
+{
+ /**
+ * The {@link GUIComponent} this pin belongs to
+ */
+ public final GUIComponent component;
+ /**
+ * The name identifying this pin. Is unique for a {@link GUIComponent}.
+ */
+ public final String name;
+ /**
+ * The logical width of this pin. Denotes how many bits this pin consists of.
+ */
+ public final int logicWidth;
+
+ /**
+ * The X position of this pin, relative to its component's location.
+ */
+ protected double relX;
+ /**
+ * The Y position of this pin, relative to its component's location.
+ */
+ protected double relY;
+
+ private final List<Consumer<? super Pin>> pinMovedListeners;
+ private final List<Runnable> redrawListeners;
+
+ // creation and destruction
+
+ /**
+ * Creates a new pin. Usually it is not needed to call this constructor manually, as {@link GUIComponent}s create their pins themselves.
+ *
+ * @author Daniel Kirschten
+ */
+ public Pin(GUIComponent component, String name, int logicWidth, double relX, double relY)
+ {
+ this.component = component;
+ this.name = name;
+ this.logicWidth = logicWidth;
+ this.relX = relX;
+ this.relY = relY;
+
+ this.pinMovedListeners = new ArrayList<>();
+ this.redrawListeners = new ArrayList<>();
+
+ component.addComponentMovedListener(c -> callPinMovedListeners());
+ }
+
+ // "graphical" operations
+
+ /**
+ * Returns the X position of this pin relative to the position of its component.
+ *
+ * @author Daniel Kirschten
+ */
+ public double getRelX()
+ {
+ return relX;
+ }
+
+ /**
+ * Returns the Y position of this pin relative to the position of its component.
+ *
+ * @author Daniel Kirschten
+ */
+ public double getRelY()
+ {
+ return relY;
+ }
+
+ /**
+ * Returns the position of this pin relative to the position of its component.
+ *
+ * @author Daniel Kirschten
+ */
+ public Point getRelPos()
+ {
+ return new Point(relX, relY);
+ }
+
+ /**
+ * Returns the absolute position of this pin.
+ *
+ * @author Daniel Kirschten
+ */
+ public Point getPos()
+ {
+ return new Point(relX + component.getPosX(), relY + component.getPosY());
+ }
+
+ /**
+ * Sets the position of this pin relative to the position of its component.
+ *
+ * @author Daniel Kirschten
+ */
+ protected void setRelPos(double relX, double relY)
+ {
+ this.relX = relX;
+ this.relY = relY;
+ callPinMovedListeners();
+ callRedrawListeners();
+ }
+
+ // listeners
+
+ // @formatter:off
+ public void addPinMovedListener (Consumer<? super Pin> listener){pinMovedListeners.add (listener);}
+ public void addRedrawListener (Runnable listener){redrawListeners .add (listener);}
+
+ public void removePinMovedListener(Consumer<? super Pin> listener){pinMovedListeners.remove(listener);}
+ public void removeRedrawListener (Runnable listener){redrawListeners .remove(listener);}
+
+ private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));}
+ private void callRedrawListeners () {redrawListeners .forEach(l -> l.run ( ));}
+ // @formatter:on
+
+ @Override
+ public String toString()
+ {
+ return "Pin [" + name + ", point=" + getPos() + "]";
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.model.wires;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.core.LogicObserver;
+import net.mograsim.logic.core.types.BitVectorFormatter;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+
+/**
+ * A {@link GUIComponent} with only one pin. Is used to create wires connecting more than two pins. <br>
+ * Example: There are three pins <code>P1</code>, <code>P2</code>, <code>P3</code> that need to be connected. Solution: Create a
+ * WireCrossPoint (<code>WCP</code>) and create the GUIWires <code>P1</code>-<code>WCP</code>, <code>P2</code>-<code>WCP</code>,
+ * <code>P3</code>-<code>WCP</code>.<br>
+ * Cross points are drawn as circles. The pin of cross points is in the center of this circle.
+ *
+ * @author Daniel Kirschten
+ */
+public class WireCrossPoint extends GUIComponent
+{
+ private static final int CIRCLE_RADIUS = 1;
+ private static final int CIRCLE_DIAM = CIRCLE_RADIUS * 2;
+
+ /**
+ * The (single) pin of this cross point.
+ */
+ private final Pin pin;
+
+ /**
+ * A {@link LogicObserver} calling {@link #requestRedraw()}.
+ */
+ private final LogicObserver logicObs;
+ /**
+ * The {@link ReadEnd} currently bound to this cross point.
+ */
+ private ReadEnd end;
+
+ // creation and destruction
+
+ public WireCrossPoint(ViewModelModifiable model, int logicWidth)
+ {
+ this(model, logicWidth, null);
+ }
+
+ public WireCrossPoint(ViewModelModifiable model, int logicWidth, String name)
+ {
+ super(model, name);
+ logicObs = (i) -> requestRedraw();
+
+ setSize(CIRCLE_DIAM, CIRCLE_DIAM);
+ addPin(this.pin = new Pin(this, "", logicWidth, CIRCLE_RADIUS, CIRCLE_RADIUS));
+ }
+
+ // pins
+
+ public Pin getPin()
+ {
+ return pin;
+ }
+
+ // "graphical" operations
+
+ /**
+ * Moves the center (and therefore the pin) of this {@link WireCrossPoint} to the given location.
+ *
+ * @author Daniel Kirschten
+ */
+ public void moveCenterTo(double x, double y)
+ {
+ moveTo(x - CIRCLE_RADIUS, y - CIRCLE_RADIUS);
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ ColorDefinition wireColor = BitVectorFormatter.formatAsColor(end);
+ if (wireColor != null)
+ gc.setBackground(ColorManager.current().toColor(wireColor));
+ gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM);
+ }
+
+ // logic model binding
+
+ /**
+ * Binds this {@link WireCrossPoint} to the given {@link ReadEnd}: The color of this {@link WireCrossPoint} will now depend on the state
+ * of the given {@link ReadEnd}, and further changes of the given {@link ReadEnd} will result in readrawListeners being called.<br>
+ * The argument can be null, in which case the old binding is stopped.
+ *
+ * @author Daniel Kirschten
+ */
+ public void setLogicModelBinding(ReadEnd end)
+ {
+ if (this.end != null)
+ this.end.deregisterObserver(logicObs);
+ this.end = end;
+ if (end != null)
+ end.registerObserver(logicObs);
+ }
+
+ /**
+ * Returns whether this {@link WireCrossPoint} has a logic model binding or not.
+ */
+ public boolean hasLogicModelBinding()
+ {
+ return end != null;
+ }
+
+ // serializing
+
+ @Override
+ public JsonElement getParams()
+ {
+ return new JsonPrimitive(pin.logicWidth);
+ }
+
+ static
+ {
+ IndirectGUIComponentCreator.setComponentSupplier(WireCrossPoint.class.getCanonicalName(),
+ (m, p, n) -> new WireCrossPoint(m, p.getAsInt(), n));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.modeladapter;
+
+public class LogicModelParameters
+{
+ public int wireTravelTime;
+ public int gateProcessTime;
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.modeladapter;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.model.model.ViewModel;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelInterface;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.modeladapter.componentadapters.ComponentAdapter;
+
+public class ViewLogicModelAdapter
+{
+ private final static Map<Class<? extends GUIComponent>, ComponentAdapter<? extends GUIComponent>> componentAdapters = new HashMap<>();
+
+ public static void addComponentAdapter(ComponentAdapter<? extends GUIComponent> componentAdapter)
+ {
+ componentAdapters.put(componentAdapter.getSupportedClass(), componentAdapter);
+ }
+
+ public static Timeline convert(ViewModel viewModel, LogicModelParameters params)
+ {
+ // TODO replace Timeline with LogicModel as soon as it exists
+ Timeline timeline = new Timeline(10);
+
+ convert(viewModel, params, timeline, Map.of());
+
+ return timeline;
+ }
+
+ private static void convert(ViewModel viewModel, LogicModelParameters params, Timeline timeline, Map<Pin, Wire> externalWires)
+ {
+ Map<Pin, Wire> logicWiresPerPin = convertWires(getAllPins(viewModel), viewModel.getWires(), externalWires, params, timeline);
+ Map<Pin, Wire> logicWiresPerPinUnmodifiable = Collections.unmodifiableMap(logicWiresPerPin);
+
+ for (GUIComponent guiComp : viewModel.getComponentsByName().values())
+ {
+ if (guiComp instanceof SubmodelComponent)
+ {
+ SubmodelComponent guiCompCasted = (SubmodelComponent) guiComp;
+ Map<String, Pin> supermodelPins = guiCompCasted.getSupermodelPins();
+ Map<Pin, Wire> externalWiresForSubmodel = supermodelPins.entrySet().stream()
+ .collect(Collectors.toMap(e -> guiCompCasted.getSubmodelPin(e.getKey()), e -> logicWiresPerPin.get(e.getValue())));
+ convert(guiCompCasted.submodel, params, timeline, externalWiresForSubmodel);
+ } else if (guiComp instanceof WireCrossPoint)
+ {
+ WireCrossPoint guiCompCasted = (WireCrossPoint) guiComp;
+ guiCompCasted.setLogicModelBinding(logicWiresPerPin.get(guiCompCasted.getPin()).createReadOnlyEnd());
+ } else if (!(guiComp instanceof SubmodelInterface))// nothing to do for SubmodelInterfaces
+ createAndLinkComponent(timeline, params, guiComp, logicWiresPerPinUnmodifiable, componentAdapters.get(guiComp.getClass()));
+ }
+ }
+
+ private static Set<Pin> getAllPins(ViewModel viewModel)
+ {
+ return viewModel.getComponentsByName().values().stream().flatMap(component -> component.getPins().values().stream())
+ .collect(Collectors.toSet());
+ }
+
+ private static Map<Pin, Wire> convertWires(Set<Pin> allPins, List<GUIWire> wires, Map<Pin, Wire> externalWires,
+ LogicModelParameters params, Timeline timeline)
+ {
+ Map<Pin, Set<Pin>> connectedPinGroups = getConnectedPinGroups(allPins, wires);
+ Map<Pin, Wire> logicWiresPerPin = createLogicWires(params, timeline, connectedPinGroups, externalWires);
+ setGUIWiresLogicModelBinding(wires, logicWiresPerPin);
+ return logicWiresPerPin;
+ }
+
+ private static Map<Pin, Wire> createLogicWires(LogicModelParameters params, Timeline timeline, Map<Pin, Set<Pin>> connectedPinGroups,
+ Map<Pin, Wire> externalWires)
+ {
+ Map<Pin, Wire> logicWiresPerPin = new HashMap<>();
+ Map<Set<Pin>, Wire> logicWiresPerPinGroup = new HashMap<>();
+ for (Entry<Pin, Set<Pin>> e : connectedPinGroups.entrySet())
+ logicWiresPerPin.put(e.getKey(), logicWiresPerPinGroup.computeIfAbsent(e.getValue(), set ->
+ {
+ Wire externalWire = null;
+ for (Pin p : set)
+ {
+ Wire externalWireCandidate = externalWires.get(p);
+ if (externalWireCandidate != null)
+ if (externalWire == null)
+ externalWire = externalWireCandidate;
+ else if (externalWire.length == externalWireCandidate.length)
+ Wire.fuse(externalWire, externalWireCandidate);
+ else
+ throw new IllegalArgumentException(
+ "Two pins to external wires with different logicWidths can't be connected directly");
+ }
+ return externalWire == null ? new Wire(timeline, e.getKey().logicWidth, params.wireTravelTime) : externalWire;
+ }));
+ return logicWiresPerPin;
+ }
+
+ private static void setGUIWiresLogicModelBinding(List<GUIWire> wires, Map<Pin, Wire> logicWiresPerPin)
+ {
+ Map<Wire, ReadEnd> guiWireSharedReadEnd = logicWiresPerPin.values().stream().distinct()
+ .collect(Collectors.toMap(Function.identity(), Wire::createReadOnlyEnd));
+ for (GUIWire guiWire : wires)
+ guiWire.setLogicModelBinding(guiWireSharedReadEnd.get(logicWiresPerPin.get(guiWire.getPin1())));
+ }
+
+ private static Map<Pin, Set<Pin>> getConnectedPinGroups(Set<Pin> allPins, List<GUIWire> wires)
+ {
+ Map<Pin, Set<Pin>> connectedPinsPerPin = new HashMap<>();
+
+ for (Pin p : allPins)
+ {
+ HashSet<Pin> connectedPins = new HashSet<>();
+ connectedPins.add(p);
+ connectedPinsPerPin.put(p, connectedPins);
+ }
+
+ wires.forEach(wire ->
+ {
+ Pin pin1 = wire.getPin1();
+ Pin pin2 = wire.getPin2();
+
+ Set<Pin> pin1ConnectedPins = connectedPinsPerPin.get(pin1);
+ Set<Pin> pin2ConnectedPins = connectedPinsPerPin.get(pin2);
+
+ pin1ConnectedPins.addAll(pin2ConnectedPins);
+ pin1ConnectedPins.add(pin1);
+ pin1ConnectedPins.add(pin2);
+
+ pin2ConnectedPins.forEach(pin -> connectedPinsPerPin.put(pin, pin1ConnectedPins));
+ });
+ return connectedPinsPerPin;
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <G extends GUIComponent> void createAndLinkComponent(Timeline timeline, LogicModelParameters params,
+ GUIComponent guiComponent, Map<Pin, Wire> logicWiresPerPin, ComponentAdapter<G> adapter)
+ {
+ if (adapter == null)
+ throw new IllegalArgumentException("Unknown component class: " + guiComponent.getClass());
+ adapter.createAndLinkComponent(timeline, params, (G) guiComponent, logicWiresPerPin);
+ }
+
+ private ViewLogicModelAdapter()
+ {
+ throw new UnsupportedOperationException("No ViewLogicModelConverter instances");
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.modeladapter.componentadapters;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.components.BitDisplay;
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+
+public class BitDisplayAdapter implements ComponentAdapter<GUIBitDisplay>
+{
+ @Override
+ public Class<GUIBitDisplay> getSupportedClass()
+ {
+ return GUIBitDisplay.class;
+ }
+
+ @Override
+ public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIBitDisplay guiComponent,
+ Map<Pin, Wire> logicWiresPerPin)
+ {
+ ReadEnd end = logicWiresPerPin.get(guiComponent.getInputPin()).createReadOnlyEnd();
+ BitDisplay bitDisplay = new BitDisplay(timeline, end);
+ guiComponent.setLogicModelBinding(bitDisplay);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.modeladapter.componentadapters;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+
+public interface ComponentAdapter<G extends GUIComponent>
+{
+ public Class<G> getSupportedClass();
+
+ public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map<Pin, Wire> logicWiresPerPin);
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.modeladapter.componentadapters;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.components.ManualSwitch;
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+
+public class ManualSwitchAdapter implements ComponentAdapter<GUIManualSwitch>
+{
+ @Override
+ public Class<GUIManualSwitch> getSupportedClass()
+ {
+ return GUIManualSwitch.class;
+ }
+
+ @Override
+ public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIManualSwitch guiComponent,
+ Map<Pin, Wire> logicWiresPerPin)
+ {
+ ReadWriteEnd end = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd();
+ ManualSwitch manualSwitch = new ManualSwitch(timeline, end);
+ guiComponent.setLogicModelBinding(manualSwitch, end);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.modeladapter.componentadapters;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+
+/**
+ * For GUIComponents that do not have any simulation logic behaviour
+ *
+ * @author Christian Femers
+ */
+public class NoLogicAdapter<T extends GUIComponent> implements ComponentAdapter<T>
+{
+ private final Class<T> guiComponentClass;
+
+ public NoLogicAdapter(Class<T> guiComponentClass)
+ {
+ this.guiComponentClass = guiComponentClass;
+ }
+
+ @Override
+ public Class<T> getSupportedClass()
+ {
+ return guiComponentClass;
+ }
+
+ @Override
+ public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, T guiComponent, Map<Pin, Wire> logicWiresPerPin)
+ {
+ // do nothing
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.modeladapter.componentadapters;
+
+import java.util.Map;
+
+import net.mograsim.logic.core.components.Component;
+import net.mograsim.logic.core.timeline.Timeline;
+import net.mograsim.logic.core.wires.Wire;
+import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
+import net.mograsim.logic.model.model.components.atomic.SimpleRectangularGUIGate;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+
+public class SimpleGateAdapter<G extends SimpleRectangularGUIGate> implements ComponentAdapter<G>
+{
+ private final Class<G> supportedClass;
+ private final ComponentConstructor constructor;
+
+ public SimpleGateAdapter(Class<G> supportedClass, ComponentConstructor constructor)
+ {
+ this.supportedClass = supportedClass;
+ this.constructor = constructor;
+ }
+
+ @Override
+ public Class<G> getSupportedClass()
+ {
+ return supportedClass;
+ }
+
+ @Override
+ public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map<Pin, Wire> logicWiresPerPin)
+ {
+ ReadWriteEnd out = logicWiresPerPin.get(guiComponent.getPin("Y")).createReadWriteEnd();
+
+ // TODO can we do this prettier?
+ int inputPinCount = guiComponent.getPins().size() - 1;
+ ReadEnd[] ins = new ReadEnd[inputPinCount];
+ for (int i = 0; i < inputPinCount; i++)
+ ins[i] = logicWiresPerPin.get(guiComponent.getPin(String.valueOf((char) ('A' + i)))).createReadOnlyEnd();
+
+ constructor.newComponent(timeline, params.gateProcessTime, out, ins);
+ }
+
+ public static interface ComponentConstructor
+ {
+ public Component newComponent(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd[] ins);
+ }
+
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.mograsim.logic.model.serializing.snippets.HighLevelStateHandler;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler;
+import net.mograsim.logic.model.serializing.snippets.outlinerenderers.DefaultOutlineRenderer;
+import net.mograsim.logic.model.serializing.snippets.symbolrenderers.DefaultSymbolRenderer;
+import net.mograsim.logic.model.util.JsonHandler;
+
+public class CodeSnippetSupplier<S>
+{
+ // public static members
+ public static final CodeSnippetSupplier<Renderer> symbolRendererSupplier;
+ public static final CodeSnippetSupplier<Renderer> outlineRendererSupplier;
+ public static final CodeSnippetSupplier<HighLevelStateHandler> highLevelStateHandlerSupplier;
+
+ static
+ {
+ symbolRendererSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new));
+ outlineRendererSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new));
+ highLevelStateHandlerSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultHighLevelStateHandler::new));
+ }
+
+ // per-instance members
+
+ private final Map<String, String> standardSnippetIDClassNames = new HashMap<>();
+ private final Map<String, SnippetSupplier<?, S>> snippetSuppliersForClassNames = new HashMap<>();
+ private final SnippetSupplier<?, S> defaultSnippetSupplier;
+
+ private CodeSnippetSupplier(SnippetSupplier<?, S> defaultSnippetSupplier)
+ {
+ this.defaultSnippetSupplier = defaultSnippetSupplier;
+ }
+
+ public void addStandardSnippetID(String standardSnippetID, String associatedSnippetClassName)
+ {
+ standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName);
+ }
+
+ public void setSnippetSupplier(String id, SnippetSupplier<?, S> snippetSupplier)
+ {
+ snippetSuppliersForClassNames.put(id, snippetSupplier);
+ }
+
+ // TODO report errors
+ public SnippetSupplier<?, S> getSnippetSupplier(String id)
+ {
+ if (id != null)
+ {
+ String snippetClassName;
+ if (id.startsWith("class:"))
+ snippetClassName = id.substring(6);
+ else
+ snippetClassName = standardSnippetIDClassNames.get(id);
+ if (snippetClassName != null)
+ {
+ tryLoadSnippetClass(snippetClassName);
+ SnippetSupplier<?, S> snippetSupplier = snippetSuppliersForClassNames.get(snippetClassName);
+ if (snippetSupplier != null)
+ return snippetSupplier;
+ }
+ System.err.println("Couldn't load snippet " + id + "; using default");
+ }
+ return defaultSnippetSupplier;
+ }
+
+ // static helpers
+
+ static
+ {
+ try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardSnippetIDMapping.json"))
+ {
+ if (s == null)
+ throw new IOException("Resource not found");
+ SnippetIDClassNames tmp = JsonHandler.readJson(s, SnippetIDClassNames.class);
+ tmp.standardOutlineRendererSuppliers.forEach(outlineRendererSupplier::addStandardSnippetID);
+ tmp.standardSymbolRendererSuppliers.forEach(symbolRendererSupplier::addStandardSnippetID);
+ tmp.standardHighLevelStateHandlerSuppliers.forEach(highLevelStateHandlerSupplier::addStandardSnippetID);
+ }
+ catch (Exception e)
+ {
+ System.err.println("Failed to initialize standard snippet ID mapping: ");
+ e.printStackTrace();
+ }
+ }
+
+ private static class SnippetIDClassNames
+ {
+ public Map<String, String> standardOutlineRendererSuppliers;
+ public Map<String, String> standardSymbolRendererSuppliers;
+ public Map<String, String> standardHighLevelStateHandlerSuppliers;
+ }
+
+ private static void tryLoadSnippetClass(String snippetClassName)
+ {
+ tryInvokeStaticInitializer(snippetClassName, "Error getting snippet class: %s: %s\n");
+ }
+
+ public static void tryInvokeStaticInitializer(String className, String errorMessageFormat)
+ {
+ try
+ {
+ Class.forName(className, true, CodeSnippetSupplier.class.getClassLoader());
+ }
+ catch (ClassNotFoundException e)
+ {
+ System.err.printf(errorMessageFormat, className, "ClassNotFoundException thrown: " + e.getMessage());
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing;
+
+import java.util.Map;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+
+public class DeserializedSubmodelComponent extends SubmodelComponent
+{
+ public Renderer outlineRenderer;
+ public Renderer symbolRenderer;
+
+ public DeserializedSubmodelComponent(ViewModelModifiable model, String name)
+ {
+ super(model, name);
+ }
+
+ @Override
+ protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
+ {
+ if (outlineRenderer != null)
+ outlineRenderer.render(gc, visibleRegion);
+ }
+
+ @Override
+ protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
+ {
+ if (symbolRenderer != null)
+ symbolRenderer.render(gc, visibleRegion);
+ }
+
+ public void setOutlineRenderer(Renderer outlineRenderer)
+ {
+ this.outlineRenderer = outlineRenderer;
+ }
+
+ public void setSymbolRenderer(Renderer symbolRenderer)
+ {
+ this.symbolRenderer = symbolRenderer;
+ }
+
+ public ViewModelModifiable getSubmodelModifiable()
+ {
+ return submodelModifiable;
+ }
+
+ @Override
+ public void setSubmodelScale(double submodelScale)
+ {
+ super.setSubmodelScale(submodelScale);
+ }
+
+ @Override
+ public void setSize(double width, double height)
+ {
+ super.setSize(width, height);
+ }
+
+ @Override
+ public Pin addSubmodelInterface(MovablePin supermodelPin)
+ {
+ return super.addSubmodelInterface(supermodelPin);
+ }
+
+ @Override
+ public double getSubmodelScale()
+ {
+ return super.getSubmodelScale();
+ }
+
+ @Override
+ public Map<String, MovablePin> getSubmodelMovablePins()
+ {
+ return super.getSubmodelMovablePins();
+ }
+
+ @Override
+ public void removeSubmodelInterface(String name)
+ {
+ super.removeSubmodelInterface(name);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonNull;
+
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.util.JsonHandler;
+
+public class IndirectGUIComponentCreator
+{
+ private static final Map<String, String> standardComponentIDs = new HashMap<>();
+
+ private static final Map<String, ComponentSupplier> componentSuppliers = new HashMap<>();
+
+ static
+ {
+ try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardComponentIDMapping.json"))
+ {
+ if (s == null)
+ throw new IOException("Resource not found");
+ Map<String, String> tmp = JsonHandler.readJson(s, Map.class);
+ // don't use putAll to apply sanity checks
+ tmp.forEach((st, id) ->
+ {
+ try
+ {
+ addStandardComponentID(st, id);
+ }
+ catch (IllegalArgumentException e)
+ {
+ System.err.println("Component ID mapping contained illegal entry: " + e.getMessage());
+ }
+ });
+ }
+ catch (IOException e)
+ {
+ System.err.println("Failed to initialize standard snippet ID mapping: " + e.getMessage());
+ }
+ }
+
+ public static void addStandardComponentID(String standardComponentID, String associatedComponentID)
+ {
+ if (!associatedComponentID.startsWith("file:") && !associatedComponentID.startsWith("class:"))
+ throw new IllegalArgumentException("Unrecognized component ID format: " + associatedComponentID);
+ standardComponentIDs.put(standardComponentID, associatedComponentID);
+ }
+
+ public static Collection<String> getStandardComponentIDs()
+ {
+ return standardComponentIDs.keySet();
+ }
+
+ public static void setComponentSupplier(String className, ComponentSupplier componentSupplier)
+ {
+ componentSuppliers.put(className, componentSupplier);
+ }
+
+ public static GUIComponent createComponent(ViewModelModifiable model, String id)
+ {
+ return createComponent(model, id, (String) null);
+ }
+
+ public static GUIComponent createComponent(ViewModelModifiable model, String id, String name)
+ {
+ return createComponent(model, id, JsonNull.INSTANCE, name);
+ }
+
+ public static GUIComponent createComponent(ViewModelModifiable model, String id, JsonElement params)
+ {
+ return createComponent(model, id, params, null);
+ }
+
+ public static GUIComponent createComponent(ViewModelModifiable model, String id, JsonElement params, String name)
+ {
+ if (id != null)
+ {
+ String resolvedID;
+ if (id.startsWith("class:") || id.startsWith("file:"))
+ resolvedID = id;
+ else
+ resolvedID = standardComponentIDs.get(id);
+ if (resolvedID.startsWith("class:"))
+ {
+ String className = resolvedID.substring(6);
+ tryLoadComponentClass(className);
+ ComponentSupplier componentSupplier = componentSuppliers.get(className);
+ if (componentSupplier != null)
+ return componentSupplier.create(model, params, name);
+ } else
+ // we know id has to start with "file:" here
+ // because standardComponentIDs only contains strings starting with "class:" or "file:"
+ return SubmodelComponentDeserializer.create(model, resolvedID.substring(5), name);
+ }
+ throw new RuntimeException("Could not get component supplier for ID " + id);
+ }
+
+ private static void tryLoadComponentClass(String componentClassName)
+ {
+ CodeSnippetSupplier.tryInvokeStaticInitializer(componentClassName, "Error loading component class %s: %s\n");
+ }
+
+ public static interface ComponentSupplier
+ {
+ public GUIComponent create(ViewModelModifiable model, JsonElement params, String name);
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing;
+
+import java.io.IOException;
+import java.util.Map;
+
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.InterfacePinParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters.InnerComponentParams;
+import net.mograsim.logic.model.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams;
+
+/**
+ * Creates {@link SubmodelComponent}s from {@link SubmodelComponentParams}
+ */
+public final class SubmodelComponentDeserializer
+{
+ /**
+ * Like {@link #create(ViewModelModifiable, String, String)}, but using the default name.
+ */
+ public static SubmodelComponent create(ViewModelModifiable model, String path)
+ {
+ return create(model, path, null);
+ }
+
+ /**
+ * Creates a {@link SubmodelComponent} from the {@link SubmodelComponentParams} located at the given path as a JSON file. The returned
+ * SubmodelComponent is a {@link DeserializedSubmodelComponent}.
+ *
+ * @param path The path of the file describing the {@link SubmodelComponentParams}, which define the new {@link SubmodelComponent}
+ * @return A new SubmodelComponent, as described in the file located at the given path
+ */
+ public static SubmodelComponent create(ViewModelModifiable model, String path, String name)
+ {
+ try
+ {
+ SubmodelComponentParams params = SubmodelComponentParams.readJson(path);
+ SubmodelComponent ret = create(model, params, name);
+ return ret;
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException("Failed to construct GUICustomComponent. Parameters were not found.", e);
+ }
+ }
+
+ /**
+ * Creates a {@link SubmodelComponent} from the specified {@link SubmodelComponentParams}. The returned SubmodelComponent is a
+ * {@link DeserializedSubmodelComponent}.
+ *
+ * @param params The parameters describing the {@link SubmodelComponent}
+ *
+ * @return A new SubmodelComponent, as described by the {@link SubmodelComponentParams}
+ */
+ public static SubmodelComponent create(ViewModelModifiable model, SubmodelComponentParams params, String name)
+ {
+ DeserializedSubmodelComponent comp = createSubmodelComponent(model, params, name);
+ initSubmodel(comp, params.submodel);
+ return comp;
+ }
+
+ private static DeserializedSubmodelComponent createSubmodelComponent(ViewModelModifiable model, SubmodelComponentParams params,
+ String name)
+ {
+ DeserializedSubmodelComponent comp = new DeserializedSubmodelComponent(model, name);
+ comp.setSubmodelScale(params.submodel.innerScale);
+ comp.setOutlineRenderer(CodeSnippetSupplier.outlineRendererSupplier.getSnippetSupplier(params.outlineRendererSnippetID).create(comp,
+ params.outlineRendererParams));
+ comp.setSymbolRenderer(CodeSnippetSupplier.symbolRendererSupplier.getSnippetSupplier(params.symbolRendererSnippetID).create(comp,
+ params.symbolRendererParams));
+ // TODO high level states
+ comp.setSize(params.width, params.height);
+ for (InterfacePinParams iPinParams : params.interfacePins)
+ comp.addSubmodelInterface(
+ new MovablePin(comp, iPinParams.name, iPinParams.logicWidth, iPinParams.location.x, iPinParams.location.y));
+ return comp;
+ }
+
+ @SuppressWarnings("unused") // GUIWire being created
+ private static void initSubmodel(DeserializedSubmodelComponent comp, SubmodelParameters params)
+ {
+ ViewModelModifiable submodelModifiable = comp.getSubmodelModifiable();
+ Map<String, GUIComponent> componentsByName = submodelModifiable.getComponentsByName();
+ GUIComponent[] components = new GUIComponent[params.subComps.length];
+ for (int i = 0; i < components.length; i++)
+ {
+ InnerComponentParams cParams = params.subComps[i];
+ components[i] = IndirectGUIComponentCreator.createComponent(submodelModifiable, cParams.id, cParams.params, cParams.name);
+ components[i].moveTo(cParams.pos.x, cParams.pos.y);
+ }
+
+ for (int i = 0; i < params.innerWires.length; i++)
+ {
+ InnerWireParams innerWire = params.innerWires[i];
+ new GUIWire(submodelModifiable, componentsByName.get(innerWire.pin1.compName).getPin(innerWire.pin1.pinName),
+ componentsByName.get(innerWire.pin2.compName).getPin(innerWire.pin2.pinName), innerWire.path);
+ }
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.serializing;
+
+import java.io.IOException;
+
+import com.google.gson.JsonElement;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.util.JsonHandler;
+
+/**
+ * This class contains all the information necessary to create a new {@link SubmodelComponent}
+ */
+public class SubmodelComponentParams
+{
+ // basic stuff
+ public double width, height;
+ public InterfacePinParams[] interfacePins;
+ public SubmodelParameters submodel;
+
+ // functionality that needs to be expressed in Java code
+ public String outlineRendererSnippetID;
+ public JsonElement outlineRendererParams;
+
+ public String symbolRendererSnippetID;
+ public JsonElement symbolRendererParams;
+
+ public static class InterfacePinParams
+ {
+ public Point location;
+ public String name;
+ public int logicWidth;
+ }
+
+ public static class SubmodelParameters
+ {
+ public double innerScale;
+ public InnerComponentParams[] subComps;
+ public InnerWireParams[] innerWires;
+
+ public static class InnerComponentParams
+ {
+ public Point pos;
+ public String id;
+ public String name;
+ public JsonElement params;
+ }
+
+ public static class InnerWireParams
+ {
+ public InnerPinParams pin1, pin2;
+ public Point[] path;
+
+ public static class InnerPinParams
+ {
+ public String compName;
+ public String pinName;
+ }
+ }
+ }
+
+ public static SubmodelComponentParams readJson(String path) throws IOException
+ {
+ return JsonHandler.readJson(path, SubmodelComponentParams.class);
+ }
+
+ /**
+ * Writes this {@link SubmodelComponentParams} object into a file in json format. The correct file extension is important! Check
+ * {@link SubmodelComponentParams}.fileExtension
+ */
+ public void writeJson(String path)
+ {
+ try
+ {
+ JsonHandler.writeJson(this, path);
+ }
+ catch (IOException e)
+ {
+ System.err.println("Failed to write SubComponentParams to file");
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing.snippets;
+
+import net.mograsim.logic.model.model.components.GUIComponent;
+
+public interface HighLevelStateHandler
+{
+ /**
+ * Sets the given high-level state to the given value. <br>
+ * A high level state ID consists of parts separated by dots ('.').<br>
+ * The last part (the part after the last dot) is called "atomic high level state ID". The parts before that part are called
+ * "subcomponent ID"s.<br>
+ * If there is no dot in a high level state ID, the whole high level state ID is called atomic.<br>
+ * Note that subcomponent IDs don't have to correspond to actual subcomponents. For example, a RAM component may supply subcomponent IDs
+ * "c0000", "c0001" ... "cFFFF" without actually having a subcomponent for each cell. It also is allowed to delegate an atomic high
+ * level state ID to a subcomponent.
+ *
+ * @see #getHighLevelState(String)
+ * @see GUIComponent#setHighLevelState(String, Object)
+ *
+ * @author Daniel Kirschten
+ */
+ public void setHighLevelState(String stateID, Object newState);
+
+ /**
+ * Gets the current value of the given high-level state. <br>
+ * See {@link #setHighLevelState(String, Object)} for an explanation of high-level state IDs.
+ *
+ * @see #setHighLevelState(String, Object)
+ * @see GUIComponent#getHighLevelState(String)
+ *
+ * @author Daniel Kirschten
+ */
+ public Object getHighLevelState(String stateID);
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing.snippets;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+
+public interface Renderer
+{
+ public void render(GeneralGC gc, Rectangle visibleRegion);
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing.snippets;
+
+import java.util.function.BiFunction;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+
+public interface SnippetSupplier<P, S>
+{
+ public Class<P> getParamClass();
+
+ public S create(SubmodelComponent component, P params);
+
+ public default S create(SubmodelComponent component, JsonElement params)
+ {
+ return create(component, new Gson().fromJson(params, getParamClass()));
+ }
+
+ public static <P, S> SnippetSupplier<P, S> create(Class<P> paramClass, BiFunction<SubmodelComponent, P, S> supplier)
+ {
+ return new SnippetSupplier<>()
+ {
+ @Override
+ public Class<P> getParamClass()
+ {
+ return paramClass;
+ }
+
+ @Override
+ public S create(SubmodelComponent component, P params)
+ {
+ return supplier.apply(component, params);
+ }
+ };
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing.snippets.highlevelstatehandlers;
+
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.HighLevelStateHandler;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+
+public class DefaultHighLevelStateHandler implements HighLevelStateHandler
+{
+ @SuppressWarnings("unused") // we don't need the component; and params are always null
+ public DefaultHighLevelStateHandler(SubmodelComponent component, Void params)
+ {
+ // nothing to do here
+ }
+
+ @Override
+ public void setHighLevelState(String stateID, Object newState)
+ {
+ throw new IllegalArgumentException("No high level state with ID " + stateID);
+ }
+
+ @Override
+ public Object getHighLevelState(String stateID)
+ {
+ throw new IllegalArgumentException("No high level state with ID " + stateID);
+ }
+
+ static
+ {
+ CodeSnippetSupplier.highLevelStateHandlerSupplier.setSnippetSupplier(DefaultHighLevelStateHandler.class.getCanonicalName(),
+ SnippetSupplier.create(Void.class, DefaultHighLevelStateHandler::new));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing.snippets.outlinerenderers;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+import net.mograsim.preferences.Preferences;
+
+public class DefaultOutlineRenderer implements Renderer
+{
+ private final GUIComponent component;
+
+ public DefaultOutlineRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params)
+ {
+ this.component = component;
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.foreground");
+ if (fg != null)
+ gc.setForeground(ColorManager.current().toColor(fg));
+ gc.drawRectangle(component.getBounds());
+ }
+
+ static
+ {
+ CodeSnippetSupplier.outlineRendererSupplier.setSnippetSupplier(DefaultOutlineRenderer.class.getCanonicalName(),
+ SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing.snippets.symbolrenderers;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+import net.mograsim.preferences.Preferences;
+
+/**
+ * Renders a text (<code>"text"</code>) with a given font height (<code>"height"</code>) in the center of the component.
+ *
+ * @author Daniel Kirschten
+ */
+public class CenteredTextSymbolRenderer implements Renderer
+{
+ private final GUIComponent component;
+ private final CenteredTextParams params;
+
+ public CenteredTextSymbolRenderer(SubmodelComponent component, CenteredTextParams params)
+ {
+ this.component = component;
+ this.params = params;
+
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ Font oldFont = gc.getFont();
+ gc.setFont(new Font(oldFont.getName(), params.fontHeight, oldFont.getStyle()));
+ ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
+ if (fg != null)
+ gc.setForeground(ColorManager.current().toColor(fg));
+ Point idSize = gc.textExtent(params.text);
+ Rectangle bounds = component.getBounds();
+ gc.drawText(params.text, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
+ gc.setFont(oldFont);
+ }
+
+ public static class CenteredTextParams
+ {
+ public String text;
+ public double fontHeight;
+ }
+
+ static
+ {
+ CodeSnippetSupplier.symbolRendererSupplier.setSnippetSupplier(CenteredTextSymbolRenderer.class.getCanonicalName(),
+ SnippetSupplier.create(CenteredTextParams.class, CenteredTextSymbolRenderer::new));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing.snippets.symbolrenderers;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.ColorDefinition;
+import net.mograsim.preferences.ColorManager;
+import net.mograsim.preferences.Preferences;
+
+public class DefaultSymbolRenderer implements Renderer
+{
+ private static final String id = "<Symbol\nunknown>";
+
+ private final GUIComponent component;
+
+ public DefaultSymbolRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params)
+ {
+ this.component = component;
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
+ if (fg != null)
+ gc.setForeground(ColorManager.current().toColor(fg));
+ Point idSize = gc.textExtent(id);
+ Rectangle bounds = component.getBounds();
+ gc.drawText(id, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
+ }
+
+ static
+ {
+ CodeSnippetSupplier.symbolRendererSupplier.setSnippetSupplier(DefaultSymbolRenderer.class.getCanonicalName(),
+ SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.serializing.snippets.symbolrenderers;
+
+import java.util.Map.Entry;
+
+import org.eclipse.swt.graphics.Color;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.CodeSnippetSupplier;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+import net.mograsim.logic.model.serializing.snippets.SnippetSupplier;
+import net.mograsim.preferences.Preferences;
+
+/**
+ * Renders a text (<code>"centerText"</code>) with a given font height (<code>"centerTextHeight"</code>) in the center of the component and
+ * draws a label for each pin with a given font height (<code>"pinLabelHeight"</code>). The labels of pins to the left of a given x
+ * coordinate (<code>"horizontalComponentCenter"</code>) are drawn to the right of the respective pin; labels of pins to the right are drawn
+ * left. A margin (<code>"pinLabelMargin"</code>) is applied for pin label drawing.
+ *
+ * @author Daniel Kirschten
+ */
+public class SimpleRectangularLikeSymbolRenderer implements Renderer
+{
+ private final GUIComponent component;
+ private final SimpleRectangularLikeParams params;
+
+ public SimpleRectangularLikeSymbolRenderer(SubmodelComponent component, SimpleRectangularLikeParams params)
+ {
+ this.component = component;
+ this.params = params;
+ }
+
+ @Override
+ public void render(GeneralGC gc, Rectangle visibleRegion)
+ {
+ double posX = component.getPosX();
+ double posY = component.getPosY();
+ double width = component.getWidth();
+ double height = component.getHeight();
+
+ Font oldFont = gc.getFont();
+ gc.setFont(new Font(oldFont.getName(), params.centerTextHeight, oldFont.getStyle()));
+ Point textExtent = gc.textExtent(params.centerText);
+ Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
+ if (textColor != null)
+ gc.setForeground(textColor);
+ gc.drawText(params.centerText, posX + (width - textExtent.x) / 2, posY + (height - textExtent.y) / 2, true);
+ gc.setFont(new Font(oldFont.getName(), params.pinLabelHeight, oldFont.getStyle()));
+ for (Entry<String, Pin> pinEntry : component.getPins().entrySet())
+ {
+ String pinName = pinEntry.getKey();
+ Pin pin = pinEntry.getValue();
+ double pinX = pin.getRelX();
+ double pinY = posY + pin.getRelY();
+ textExtent = gc.textExtent(pinName);
+ gc.drawText(pinName,
+ posX + pinX + (pinX > params.horizontalComponentCenter ? -textExtent.x - params.pinLabelMargin : params.pinLabelMargin),
+ pinY - textExtent.y / 2, true);
+ }
+ gc.setFont(oldFont);
+ }
+
+ public static class SimpleRectangularLikeParams
+ {
+ public String centerText;
+ public double centerTextHeight;
+ public double horizontalComponentCenter;
+ public double pinLabelHeight;
+ public double pinLabelMargin;
+ }
+
+ static
+ {
+ CodeSnippetSupplier.symbolRendererSupplier.setSnippetSupplier(SimpleRectangularLikeSymbolRenderer.class.getCanonicalName(),
+ SnippetSupplier.create(SimpleRectangularLikeParams.class, SimpleRectangularLikeSymbolRenderer::new));
+ }
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "GUIAm2901": "file:components/am2901/GUIAm2901.json",
+ "GUIAm2901ALUFuncDecode": "file:components/am2901/GUIAm2901ALUFuncDecode.json",
+ "GUIAm2901ALUInclDecode": "file:components/am2901/GUIAm2901ALUInclDecode.json",
+ "GUIAm2901ALUInclSourceDecodeInclFunctionDecode": "file:components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json",
+ "GUIAm2901ALUOneBit": "file:components/am2901/GUIAm2901ALUOneBit.json",
+ "GUIAm2901DestDecode": "file:components/am2901/GUIAm2901DestDecode.json",
+ "GUIAm2901QReg": "file:components/am2901/GUIAm2901QReg.json",
+ "GUIAm2901SourceDecode": "file:components/am2901/GUIAm2901SourceDecode.json",
+ "GUIAndGate": "class:net.mograsim.logic.model.model.components.atomic.GUIAndGate",
+ "GUINandGate": "class:net.mograsim.logic.model.model.components.atomic.GUINandGate",
+ "GUIOrGate": "class:net.mograsim.logic.model.model.components.atomic.GUIOrGate",
+ "GUI_rsLatch": "file:components/GUI_rsLatch.json",
+ "GUIand": "file:components/GUIand.json",
+ "GUIand41": "file:components/GUIand41.json",
+ "GUIandor414": "file:components/GUIandor414.json",
+ "GUIdemux2": "file:components/GUIdemux2.json",
+ "GUIdff": "file:components/GUIdff.json",
+ "GUIdlatch": "file:components/GUIdlatch.json",
+ "GUIdlatch4": "file:components/GUIdlatch4.json",
+ "GUIfulladder": "file:components/GUIfulladder.json",
+ "GUIhalfadder": "file:components/GUIhalfadder.json",
+ "GUImux1": "file:components/GUImux1.json",
+ "GUImux1_4": "file:components/GUImux1_4.json",
+ "GUInand3": "file:components/GUInand3.json",
+ "GUInot4": "file:components/GUInot4.json",
+ "GUIor4": "file:components/GUIor4.json",
+ "GUIor_4": "file:components/GUIor_4.json",
+ "GUIram2": "file:components/GUIram2.json",
+ "GUIram4": "file:components/GUIram4.json",
+ "GUIsel2_4": "file:components/GUIsel2_4.json",
+ "GUIsel3_4": "file:components/GUIsel3_4.json",
+ "GUIxor": "file:components/GUIxor.json",
+ "WireCrossPoint": "class:net.mograsim.logic.model.model.wires.WireCrossPoint"
+}
\ No newline at end of file
--- /dev/null
+mograsim version: 0.1.3
+{
+ "standardOutlineRendererSuppliers": {},
+ "standardSymbolRendererSuppliers": {
+ "CenteredTextSymbolRenderer": "net.mograsim.logic.model.serializing.snippets.symbolrenderers.CenteredTextSymbolRenderer",
+ "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.model.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer"
+ },
+ "standardHighLevelStateHandlerSuppliers": {}
+}
\ No newline at end of file
--- /dev/null
+package net.mograsim.logic.model.util;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.stream.Collectors;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+public class JsonHandler
+{
+ private static Gson parser = new GsonBuilder().setPrettyPrinting().create();
+
+ public static <T> T readJson(String path, Class<T> type) throws IOException
+ {
+ try (FileInputStream jsonStream = new FileInputStream(path))
+ {
+ return readJson(jsonStream, type);
+ }
+ }
+
+ /**
+ * @param input The Stream is closed after being read
+ */
+ public static <T> T readJson(InputStream input, Class<T> type) throws IOException
+ {
+ try (InputStreamReader reader = new InputStreamReader(input); BufferedReader bf = new BufferedReader(reader))
+ {
+ return fromJson(bf.lines().collect(Collectors.joining("\n")), type);
+ }
+ }
+
+ public static <T> T fromJson(String src, Class<T> type)
+ {
+ // TODO actually parse and compare version
+ String rawJson = src.lines().dropWhile(s -> s.length() == 0 || s.charAt(0) != '{').collect(Collectors.joining());
+ return parser.fromJson(rawJson, type);
+ }
+
+ public static void writeJson(Object o, String path) throws IOException
+ {
+ try (FileWriter writer = new FileWriter(path))
+ {
+ writer.write(toJson(o));
+ }
+ }
+
+ public static String toJson(Object o)
+ {
+ return String.format("mograsim version: %s\n%s", Version.jsonCompVersion.toString(), parser.toJson(o));
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.util;
+
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.GUIComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+
+public class ModellingTool
+{
+ private ViewModelModifiable model;
+
+ ModellingTool(ViewModelModifiable model)
+ {
+ this.model = model;
+ }
+
+ public GUIWire connect(GUIComponent a, GUIComponent b, String pinA, String pinB)
+ {
+ return connect(a.getPin(pinA), b.getPin(pinB));
+ }
+
+ public GUIWire connect(WireCrossPoint a, GUIComponent b, String pinB)
+ {
+ return connect(a.getPin(), b.getPin(pinB));
+ }
+
+ public GUIWire connect(Pin a, GUIComponent b, String pinB)
+ {
+ return connect(a, b.getPin(pinB));
+ }
+
+ public GUIWire connect(GUIComponent a, WireCrossPoint b, String pinA)
+ {
+ return connect(a.getPin(pinA), b.getPin());
+ }
+
+ public GUIWire connect(WireCrossPoint a, WireCrossPoint b)
+ {
+ return connect(a.getPin(), b.getPin());
+ }
+
+ public GUIWire connect(Pin a, WireCrossPoint b)
+ {
+ return connect(a, b.getPin());
+ }
+
+ public GUIWire connect(GUIComponent a, Pin b, String pinA)
+ {
+ return connect(a.getPin(pinA), b);
+ }
+
+ public GUIWire connect(WireCrossPoint a, Pin b)
+ {
+ return connect(a.getPin(), b);
+ }
+
+ public GUIWire connect(Pin a, Pin b)
+ {
+ return new GUIWire(model, a, b);
+ }
+
+ public static ModellingTool createFor(ViewModelModifiable model)
+ {
+ return new ModellingTool(model);
+ }
+}
--- /dev/null
+package net.mograsim.logic.model.util;
+
+public final class Version
+{
+ public final static Version jsonCompVersion = new Version(0, 1, 3);
+ public final int major, minor, patch;
+
+ public Version(int major, int minor, int patch)
+ {
+ super();
+ this.major = major;
+ this.minor = minor;
+ this.patch = patch;
+ }
+
+ public int[] getVersionNumbers()
+ {
+ return new int[] { major, minor, patch };
+ }
+
+ @Override
+ public String toString()
+ {
+ return major + "." + minor + "." + patch;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + major;
+ result = prime * result + minor;
+ result = prime * result + patch;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+ if (!(obj instanceof Version))
+ return false;
+ Version other = (Version) obj;
+ if (major != other.major)
+ return false;
+ if (minor != other.minor)
+ return false;
+ if (patch != other.patch)
+ return false;
+ return true;
+ }
+
+ public boolean is(int major)
+ {
+ return major != this.major;
+ }
+
+ public boolean is(int major, int minor)
+ {
+ return is(major) && this.minor == minor;
+ }
+
+ public boolean is(int major, int minor, int patch)
+ {
+ return is(major, minor) && this.patch == patch;
+ }
+}
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
- <attributes>
- <attribute name="module" value="true"/>
- </attributes>
- </classpathentry>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" output="bin/src" path="src"/>
- <classpathentry kind="src" output="bin/test" path="test">
- <attributes>
- <attribute name="test" value="true"/>
- </attributes>
- </classpathentry>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>net.mograsim.logic.ui.am2900</name>
- <comment></comment>
- <projects>
- <project>net.mograsim.logic.ui</project>
- <project>SWTZoomableCanvas</project>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
+++ /dev/null
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
-org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=11
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.APILeak=warning
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
-org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
-org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
-org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=11
-org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
-org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
-org.eclipse.jdt.core.formatter.align_with_spaces=false
-org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
-org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
-org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
-org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
-org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
-org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=140
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.lineSplit=140
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=true
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
-org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
+++ /dev/null
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_MoGraSim
-formatter_settings_version=16
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=true
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=false
-sp_cleanup.organize_imports=false
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_modifiers=false
-sp_cleanup.remove_redundant_semicolons=false
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=false
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=true
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+++ /dev/null
-mograsim version: 0.1.1
-{
- "type": "SimpleRectangularSubmodelComponent",
- "width": 35.0,
- "height": 30.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Z",
- "logicWidth": 1
- }
- ],
- "composition": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 5.0,
- "y": 40.0
- },
- "type": "class:net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder",
- "params": {}
- },
- {
- "pos": {
- "x": 45.0,
- "y": 7.5
- },
- "type": "class:net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder",
- "params": {}
- },
- {
- "pos": {
- "x": 57.5,
- "y": 40.0
- },
- "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
- "params": {
- "logicWidth": 1
- }
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "_Z"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "_Z"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 82.5,
- "y": 22.5
- },
- {
- "x": 82.5,
- "y": 35.0
- },
- {
- "x": 52.5,
- "y": 35.0
- },
- {
- "x": 52.5,
- "y": 45.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Z"
- }
- }
- ]
- },
- "specialized": {
- "input_count": 3,
- "label": "GUIfulladder",
- "logic_width": 1,
- "output_count": 2
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.1
-{
- "type": "SimpleRectangularSubmodelComponent",
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "_Z",
- "logicWidth": 1
- }
- ],
- "composition": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 15.0
- },
- "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
- "params": {
- "logicWidth": 1
- }
- },
- {
- "pos": {
- "x": 40.0,
- "y": 2.5
- },
- "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
- "params": {
- "logicWidth": 1
- }
- },
- {
- "pos": {
- "x": 40.0,
- "y": 27.5
- },
- "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
- "params": {
- "logicWidth": 1
- }
- },
- {
- "pos": {
- "x": 65.0,
- "y": 2.5
- },
- "type": "class:net.mograsim.logic.ui.model.components.GUINandGate",
- "params": {
- "logicWidth": 1
- }
- },
- {
- "pos": {
- "x": 4.0,
- "y": 11.5
- },
- "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
- "params": {
- "logicWidth": 1
- }
- },
- {
- "pos": {
- "x": 4.0,
- "y": 36.5
- },
- "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
- "params": {
- "logicWidth": 1
- }
- },
- {
- "pos": {
- "x": 34.0,
- "y": 24.0
- },
- "type": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint",
- "params": {
- "logicWidth": 1
- }
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "_Z"
- },
- "path": [
- {
- "x": 80.0,
- "y": 25.0
- },
- {
- "x": 80.0,
- "y": 37.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 35.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 62.5,
- "y": 12.5
- },
- {
- "x": 62.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 62.5,
- "y": 37.5
- },
- {
- "x": 62.5,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- },
- "path": []
- }
- ]
- },
- "specialized": {
- "input_count": 2,
- "label": "GUIhalfadder",
- "logic_width": 1,
- "output_count": 2
- }
-}
\ No newline at end of file
+++ /dev/null
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Bundle-Name
-Bundle-SymbolicName: net.mograsim.logic.ui.am2900;singleton:=true
-Bundle-Version: 0.1.0.qualifier
-Export-Package: net.mograsim.logic.ui.examples,
- net.mograsim.logic.ui.model.components.mi.nandbased,
- net.mograsim.logic.ui.model.components.mi.nandbased.am2901
-Bundle-RequiredExecutionEnvironment: JavaSE-11
-Require-Bundle: net.mograsim.logic.ui;bundle-version="0.1.0";visibility:=reexport
-Automatic-Module-Name: net.mograsim.logic.ui
-Bundle-Vendor: Mograsim Team
+++ /dev/null
-#Properties file for net.mograsim.logic.ui
-Bundle-Vendor = Mograsim Team
-Bundle-Name = Mograsim Am2900 logic
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.1
-{
- "type": "SimpleRectangularSubmodelComponent",
- "width": 35.0,
- "height": 10.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "Input pin #0",
- "logicWidth": 1
- }
- ],
- "composition": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 0.0,
- "y": 0.0
- },
- "type": "file:HalfAdder.json",
- "params": {}
- }
- ],
- "innerWires": []
- },
- "specialized": {
- "input_count": 1,
- "label": "Test",
- "logic_width": 1,
- "output_count": 0
- }
-}
\ No newline at end of file
+++ /dev/null
-source.. = src/
-bin.includes = META-INF/,\
- .,\
- OSGI-INF/
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "_Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "_R",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "_S",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 7.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 12.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 16.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "_S"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "_R"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 37.5
- },
- {
- "x": 35.0,
- "y": 27.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 3,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": ""
- },
- "path": [
- {
- "x": 65.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 65.0,
- "y": 42.5
- },
- {
- "x": 5.0,
- "y": 42.5
- },
- {
- "x": 5.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q"
- },
- "path": [
- {
- "x": 35.0,
- "y": 17.5
- },
- {
- "x": 35.0,
- "y": 7.5
- },
- {
- "x": 65.0,
- "y": 7.5
- },
- {
- "x": 65.0,
- "y": 12.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "_Q"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "_rsLatch",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 20.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 3,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 45.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 45.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIand",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 50.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 30.0,
- "y": 7.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 32.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 57.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 82.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 24.0,
- "y": 46.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 71.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 96.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": [
- {
- "x": 25.0,
- "y": 112.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 25.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIand41",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 90.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "C1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "C2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "C3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "C4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 137.5
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 35.0,
- "y": 37.5
- },
- "id": "GUIor_4"
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 112.5
- },
- {
- "x": 10.0,
- "y": 142.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 5.0,
- "y": 137.5
- },
- {
- "x": 5.0,
- "y": 152.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 187.5
- },
- {
- "x": 5.0,
- "y": 172.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 10.0,
- "y": 212.5
- },
- {
- "x": 10.0,
- "y": 182.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 12.5
- },
- {
- "x": 10.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 5.0,
- "y": 37.5
- },
- {
- "x": 5.0,
- "y": 52.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C3"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C4"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 87.5
- },
- {
- "x": 5.0,
- "y": 72.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 70.0,
- "y": 142.5
- },
- {
- "x": 70.0,
- "y": 120.0
- },
- {
- "x": 30.0,
- "y": 120.0
- },
- {
- "x": 30.0,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 65.0,
- "y": 152.5
- },
- {
- "x": 65.0,
- "y": 125.0
- },
- {
- "x": 25.0,
- "y": 125.0
- },
- {
- "x": 25.0,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 60.0,
- "y": 162.5
- },
- {
- "x": 60.0,
- "y": 130.0
- },
- {
- "x": 20.0,
- "y": 130.0
- },
- {
- "x": 20.0,
- "y": 102.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 55.0,
- "y": 172.5
- },
- {
- "x": 55.0,
- "y": 135.0
- },
- {
- "x": 15.0,
- "y": 135.0
- },
- {
- "x": 15.0,
- "y": 112.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": [
- {
- "x": 75.0,
- "y": 42.5
- },
- {
- "x": 75.0,
- "y": 12.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": [
- {
- "x": 80.0,
- "y": 52.5
- },
- {
- "x": 80.0,
- "y": 37.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": [
- {
- "x": 80.0,
- "y": 72.5
- },
- {
- "x": 80.0,
- "y": 87.5
- }
- ]
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIandor414",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 40.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y00",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y11",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y10",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y01",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "S0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "S1",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 10.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 2.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 40.0,
- "y": 27.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 40.0,
- "y": 52.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 40.0,
- "y": 77.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 6.5,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 16.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 36.5,
- "y": 61.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 41.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 66.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "S0"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S1"
- },
- "pin2": {
- "compId": 10,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": ""
- },
- "path": [
- {
- "x": 7.5,
- "y": 62.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": ""
- },
- "path": [
- {
- "x": 5.0,
- "y": 67.5
- },
- {
- "x": 32.5,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 32.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 37.5,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": [
- {
- "x": 32.5,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 37.5,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 32.5,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y00"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y01"
- }
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y10"
- }
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y11"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIdemux2",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "_Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "D",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.2,
- "subComps": [
- {
- "pos": {
- "x": 40.0,
- "y": 10.0
- },
- "id": "GUI_rsLatch"
- },
- {
- "pos": {
- "x": 40.0,
- "y": 40.0
- },
- "id": "GUInand3"
- },
- {
- "pos": {
- "x": 120.0,
- "y": 60.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 120.0,
- "y": 30.0
- },
- "id": "GUI_rsLatch"
- },
- {
- "pos": {
- "x": 9.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 19.0,
- "y": 64.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 99.0,
- "y": 34.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 99.0,
- "y": 44.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "_R"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 10.0,
- "y": 55.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": [
- {
- "x": 145.0,
- "y": 70.0
- },
- {
- "x": 145.0,
- "y": 85.0
- },
- {
- "x": 20.0,
- "y": 85.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "_S"
- },
- "path": [
- {
- "x": 20.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "_Q"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": [
- {
- "x": 100.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 30.0,
- "y": 35.0
- },
- {
- "x": 30.0,
- "y": 45.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "_S"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "_R"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 100.0,
- "y": 65.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "_Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "_Q"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIdff",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "_Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "D",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "E",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 45.0,
- "y": 7.5
- },
- "id": "GUI_rsLatch"
- },
- {
- "pos": {
- "x": 4.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "D"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "E"
- },
- "pin2": {
- "compId": 4,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 35.0,
- "y": 25.0
- },
- {
- "x": 10.0,
- "y": 25.0
- },
- {
- "x": 10.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "_S"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 3,
- "pinName": "_R"
- },
- "path": [
- {
- "x": 40.0,
- "y": 37.5
- },
- {
- "x": 40.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "_Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "_Q"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIdlatch",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 50.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "D4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Q1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Q2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Q3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Q4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "D3",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 30.0,
- "y": 7.5
- },
- "id": "GUIdlatch"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 32.5
- },
- "id": "GUIdlatch"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 57.5
- },
- "id": "GUIdlatch"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 82.5
- },
- "id": "GUIdlatch"
- },
- {
- "pos": {
- "x": 14.0,
- "y": 46.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 71.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 96.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": [
- {
- "x": 15.0,
- "y": 112.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "E"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "E"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "E"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "E"
- },
- "path": [
- {
- "x": 15.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "D"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "D"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "D"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "D"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIdlatch4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 30.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Z",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 5.0,
- "y": 40.0
- },
- "id": "GUIhalfadder"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 7.5
- },
- "id": "GUIhalfadder"
- },
- {
- "pos": {
- "x": 57.5,
- "y": 40.0
- },
- "id": "GUINandGate",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "_Z"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "_Z"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 82.5,
- "y": 22.5
- },
- {
- "x": 82.5,
- "y": 35.0
- },
- {
- "x": 52.5,
- "y": 35.0
- },
- {
- "x": 52.5,
- "y": 45.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Z"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIfulladder",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "_Z",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "_Z"
- },
- "path": [
- {
- "x": 80.0,
- "y": 25.0
- },
- {
- "x": 80.0,
- "y": 37.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 35.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 62.5,
- "y": 12.5
- },
- {
- "x": 62.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 62.5,
- "y": 37.5
- },
- {
- "x": 62.5,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIhalfadder",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 30.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "S0",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 7.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 35.0,
- "y": 22.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 35.0,
- "y": 47.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 60.0,
- "y": 30.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 21.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "S0"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 52.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUImux1",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 90.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I0_1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "I0_3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "I1_2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I0_2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "I1_1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "I1_4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "S0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "I0_4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "I1_3",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 30.0,
- "y": 7.5
- },
- "id": "GUImux1"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 42.5
- },
- "id": "GUImux1"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 77.5
- },
- "id": "GUImux1"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 112.5
- },
- "id": "GUImux1"
- },
- {
- "pos": {
- "x": 24.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 46.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 81.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "S0"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "S0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0_1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 37.5
- },
- {
- "x": 5.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1_1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 137.5
- },
- {
- "x": 10.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "S0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0_2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 62.5
- },
- {
- "x": 5.0,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1_2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 15.0,
- "y": 162.5
- },
- {
- "x": 15.0,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- }
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "S0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0_3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 87.5
- },
- {
- "x": 5.0,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1_3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 20.0,
- "y": 187.5
- },
- {
- "x": 20.0,
- "y": 102.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- }
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "S0"
- },
- "path": [
- {
- "x": 25.0,
- "y": 117.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0_4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 112.5
- },
- {
- "x": 5.0,
- "y": 127.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1_4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 25.0,
- "y": 212.5
- },
- {
- "x": 25.0,
- "y": 137.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUImux1_4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 30.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 35.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 62.5,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 32.5,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 32.5,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 57.5,
- "y": 25.0
- },
- {
- "x": 57.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 60.0,
- "y": 62.5
- },
- {
- "x": 60.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUInand3",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 40.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 30.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 30.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 30.0,
- "y": 52.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 30.0,
- "y": 77.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 61.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 86.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUInot4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 40.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.2,
- "subComps": [
- {
- "pos": {
- "x": 20.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 65.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 115.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 165.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 40.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 140.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 110.0,
- "y": 40.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 110.0,
- "y": 140.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 140.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 74.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 124.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 174.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 104.0,
- "y": 49.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 104.0,
- "y": 149.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 10,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 11,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 12,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 70.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 120.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 170.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 80.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 130.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 105.0,
- "y": 45.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 105.0,
- "y": 55.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": [
- {
- "x": 105.0,
- "y": 145.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 105.0,
- "y": 155.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIor4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 80.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "B4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "B1",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 52.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 77.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 102.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 127.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 152.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 177.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 52.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 77.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 61.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 86.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 111.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 136.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 161.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 186.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B4"
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 107.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 117.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 132.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 142.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 157.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 167.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 182.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 192.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- },
- "path": [
- {
- "x": 40.0,
- "y": 12.5
- },
- {
- "x": 40.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 45.0,
- "y": 112.5
- },
- {
- "x": 45.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A"
- },
- "path": [
- {
- "x": 40.0,
- "y": 37.5
- },
- {
- "x": 40.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 50.0,
- "y": 137.5
- },
- {
- "x": 50.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A"
- },
- "path": [
- {
- "x": 40.0,
- "y": 62.5
- },
- {
- "x": 40.0,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": [
- {
- "x": 55.0,
- "y": 162.5
- },
- {
- "x": 55.0,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A"
- },
- "path": [
- {
- "x": 40.0,
- "y": 87.5
- },
- {
- "x": 40.0,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 60.0,
- "y": 187.5
- },
- {
- "x": 60.0,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIor_4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 90.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "QA1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "QB2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "QB1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "QA3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 75.0
- },
- "name": "QB4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "QA2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 65.0
- },
- "name": "QB3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "QA4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "B0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "WE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "D3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "D4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.1,
- "subComps": [
- {
- "pos": {
- "x": 55.0,
- "y": 45.0
- },
- "id": "GUIdemux2"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 150.0
- },
- "id": "GUIdemux2"
- },
- {
- "pos": {
- "x": 130.0,
- "y": 150.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 325.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 475.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 625.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 775.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 235.0,
- "y": 375.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 235.0,
- "y": 485.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 235.0,
- "y": 635.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 235.0,
- "y": 785.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 135.0,
- "y": 325.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 135.0,
- "y": 435.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 135.0,
- "y": 585.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 135.0,
- "y": 735.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 109.0,
- "y": 154.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 104.0,
- "y": 164.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 99.0,
- "y": 174.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 94.0,
- "y": 184.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 549.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 649.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 749.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 809.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 479.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 489.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 499.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 509.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 629.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 639.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 649.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 659.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 129.0,
- "y": 329.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 124.0,
- "y": 339.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 119.0,
- "y": 349.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 114.0,
- "y": 359.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 129.0,
- "y": 479.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 124.0,
- "y": 489.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 119.0,
- "y": 499.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 114.0,
- "y": 509.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 129.0,
- "y": 629.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 124.0,
- "y": 639.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 119.0,
- "y": 649.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 114.0,
- "y": 659.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 129.0,
- "y": 779.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 124.0,
- "y": 789.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 119.0,
- "y": 799.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 114.0,
- "y": 809.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A0"
- },
- "pin2": {
- "compId": 1,
- "pinName": "S0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "S1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 150.0
- },
- {
- "x": 10.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B0"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 250.0
- },
- {
- "x": 5.0,
- "y": 155.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 350.0
- },
- {
- "x": 10.0,
- "y": 165.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y00"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y01"
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y10"
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y11"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "WE"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 450.0
- },
- {
- "x": 5.0,
- "y": 300.0
- },
- {
- "x": 125.0,
- "y": 300.0
- },
- {
- "x": 125.0,
- "y": 195.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 4,
- "pinName": "C"
- },
- "path": [
- {
- "x": 185.0,
- "y": 155.0
- },
- {
- "x": 185.0,
- "y": 250.0
- },
- {
- "x": 30.0,
- "y": 250.0
- },
- {
- "x": 30.0,
- "y": 370.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 5,
- "pinName": "C"
- },
- "path": [
- {
- "x": 180.0,
- "y": 165.0
- },
- {
- "x": 180.0,
- "y": 245.0
- },
- {
- "x": 25.0,
- "y": 245.0
- },
- {
- "x": 25.0,
- "y": 520.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 6,
- "pinName": "C"
- },
- "path": [
- {
- "x": 175.0,
- "y": 175.0
- },
- {
- "x": 175.0,
- "y": 240.0
- },
- {
- "x": 20.0,
- "y": 240.0
- },
- {
- "x": 20.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 7,
- "pinName": "C"
- },
- "path": [
- {
- "x": 170.0,
- "y": 185.0
- },
- {
- "x": 170.0,
- "y": 235.0
- },
- {
- "x": 15.0,
- "y": 235.0
- },
- {
- "x": 15.0,
- "y": 820.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": [
- {
- "x": 50.0,
- "y": 850.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D1"
- },
- "path": [
- {
- "x": 35.0,
- "y": 330.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D2"
- },
- "path": [
- {
- "x": 40.0,
- "y": 340.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D3"
- },
- "path": [
- {
- "x": 45.0,
- "y": 350.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D4"
- },
- "path": [
- {
- "x": 50.0,
- "y": 360.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 30,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 31,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D1"
- },
- "path": [
- {
- "x": 35.0,
- "y": 780.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D2"
- },
- "path": [
- {
- "x": 40.0,
- "y": 790.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D3"
- },
- "path": [
- {
- "x": 45.0,
- "y": 800.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 32,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 33,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 34,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 35,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 36,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 37,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 38,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 39,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 40,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 41,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 42,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 43,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 44,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 45,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 46,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 47,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y00"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 210.0,
- "y": 50.0
- },
- {
- "x": 210.0,
- "y": 420.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y01"
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 205.0,
- "y": 60.0
- },
- {
- "x": 205.0,
- "y": 570.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y10"
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 200.0,
- "y": 70.0
- },
- {
- "x": 200.0,
- "y": 720.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y11"
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": [
- {
- "x": 195.0,
- "y": 80.0
- },
- {
- "x": 195.0,
- "y": 870.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 110.0,
- "y": 370.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "B"
- },
- "path": [
- {
- "x": 105.0,
- "y": 520.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "B"
- },
- "path": [
- {
- "x": 100.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "B"
- },
- "path": [
- {
- "x": 95.0,
- "y": 820.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 130.0,
- "y": 380.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 125.0,
- "y": 390.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 120.0,
- "y": 400.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 115.0,
- "y": 410.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 130.0,
- "y": 530.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 125.0,
- "y": 540.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 120.0,
- "y": 550.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 115.0,
- "y": 560.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 40,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 130.0,
- "y": 680.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 41,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 125.0,
- "y": 690.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 42,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 120.0,
- "y": 700.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 43,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 115.0,
- "y": 710.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 44,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 130.0,
- "y": 830.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 45,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 125.0,
- "y": 840.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 46,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 120.0,
- "y": 850.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 47,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 115.0,
- "y": 860.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 40,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 41,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 42,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 43,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 44,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 45,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 46,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 47,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 290.0,
- "y": 380.0
- },
- {
- "x": 290.0,
- "y": 445.0
- },
- {
- "x": 230.0,
- "y": 445.0
- },
- {
- "x": 230.0,
- "y": 490.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 285.0,
- "y": 390.0
- },
- {
- "x": 285.0,
- "y": 440.0
- },
- {
- "x": 225.0,
- "y": 440.0
- },
- {
- "x": 225.0,
- "y": 500.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 280.0,
- "y": 400.0
- },
- {
- "x": 280.0,
- "y": 435.0
- },
- {
- "x": 220.0,
- "y": 435.0
- },
- {
- "x": 220.0,
- "y": 510.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 275.0,
- "y": 410.0
- },
- {
- "x": 275.0,
- "y": 430.0
- },
- {
- "x": 215.0,
- "y": 430.0
- },
- {
- "x": 215.0,
- "y": 520.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 290.0,
- "y": 490.0
- },
- {
- "x": 290.0,
- "y": 595.0
- },
- {
- "x": 230.0,
- "y": 595.0
- },
- {
- "x": 230.0,
- "y": 640.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 285.0,
- "y": 500.0
- },
- {
- "x": 285.0,
- "y": 590.0
- },
- {
- "x": 225.0,
- "y": 590.0
- },
- {
- "x": 225.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 280.0,
- "y": 510.0
- },
- {
- "x": 280.0,
- "y": 585.0
- },
- {
- "x": 220.0,
- "y": 585.0
- },
- {
- "x": 220.0,
- "y": 660.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 275.0,
- "y": 520.0
- },
- {
- "x": 275.0,
- "y": 580.0
- },
- {
- "x": 215.0,
- "y": 580.0
- },
- {
- "x": 215.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 290.0,
- "y": 640.0
- },
- {
- "x": 290.0,
- "y": 745.0
- },
- {
- "x": 230.0,
- "y": 745.0
- },
- {
- "x": 230.0,
- "y": 790.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 285.0,
- "y": 650.0
- },
- {
- "x": 285.0,
- "y": 740.0
- },
- {
- "x": 225.0,
- "y": 740.0
- },
- {
- "x": 225.0,
- "y": 800.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 280.0,
- "y": 660.0
- },
- {
- "x": 280.0,
- "y": 735.0
- },
- {
- "x": 220.0,
- "y": 735.0
- },
- {
- "x": 220.0,
- "y": 810.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 275.0,
- "y": 670.0
- },
- {
- "x": 275.0,
- "y": 730.0
- },
- {
- "x": 215.0,
- "y": 730.0
- },
- {
- "x": 215.0,
- "y": 820.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA1"
- },
- "path": [
- {
- "x": 300.0,
- "y": 790.0
- },
- {
- "x": 300.0,
- "y": 50.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA2"
- },
- "path": [
- {
- "x": 305.0,
- "y": 800.0
- },
- {
- "x": 305.0,
- "y": 150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA3"
- },
- "path": [
- {
- "x": 310.0,
- "y": 810.0
- },
- {
- "x": 310.0,
- "y": 250.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA4"
- },
- "path": [
- {
- "x": 315.0,
- "y": 820.0
- },
- {
- "x": 315.0,
- "y": 350.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 190.0,
- "y": 330.0
- },
- {
- "x": 190.0,
- "y": 430.0
- },
- {
- "x": 130.0,
- "y": 430.0
- },
- {
- "x": 130.0,
- "y": 440.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 185.0,
- "y": 340.0
- },
- {
- "x": 185.0,
- "y": 425.0
- },
- {
- "x": 125.0,
- "y": 425.0
- },
- {
- "x": 125.0,
- "y": 450.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 180.0,
- "y": 350.0
- },
- {
- "x": 180.0,
- "y": 420.0
- },
- {
- "x": 120.0,
- "y": 420.0
- },
- {
- "x": 120.0,
- "y": 460.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 175.0,
- "y": 360.0
- },
- {
- "x": 175.0,
- "y": 415.0
- },
- {
- "x": 115.0,
- "y": 415.0
- },
- {
- "x": 115.0,
- "y": 470.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 190.0,
- "y": 440.0
- },
- {
- "x": 190.0,
- "y": 580.0
- },
- {
- "x": 130.0,
- "y": 580.0
- },
- {
- "x": 130.0,
- "y": 590.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 185.0,
- "y": 450.0
- },
- {
- "x": 185.0,
- "y": 575.0
- },
- {
- "x": 125.0,
- "y": 575.0
- },
- {
- "x": 125.0,
- "y": 600.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 180.0,
- "y": 460.0
- },
- {
- "x": 180.0,
- "y": 570.0
- },
- {
- "x": 120.0,
- "y": 570.0
- },
- {
- "x": 120.0,
- "y": 610.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 175.0,
- "y": 470.0
- },
- {
- "x": 175.0,
- "y": 565.0
- },
- {
- "x": 115.0,
- "y": 565.0
- },
- {
- "x": 115.0,
- "y": 620.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 190.0,
- "y": 590.0
- },
- {
- "x": 190.0,
- "y": 730.0
- },
- {
- "x": 130.0,
- "y": 730.0
- },
- {
- "x": 130.0,
- "y": 740.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 185.0,
- "y": 600.0
- },
- {
- "x": 185.0,
- "y": 725.0
- },
- {
- "x": 125.0,
- "y": 725.0
- },
- {
- "x": 125.0,
- "y": 750.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 180.0,
- "y": 610.0
- },
- {
- "x": 180.0,
- "y": 720.0
- },
- {
- "x": 120.0,
- "y": 720.0
- },
- {
- "x": 120.0,
- "y": 760.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 175.0,
- "y": 620.0
- },
- {
- "x": 175.0,
- "y": 715.0
- },
- {
- "x": 115.0,
- "y": 715.0
- },
- {
- "x": 115.0,
- "y": 770.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB1"
- },
- "path": [
- {
- "x": 190.0,
- "y": 740.0
- },
- {
- "x": 190.0,
- "y": 880.0
- },
- {
- "x": 325.0,
- "y": 880.0
- },
- {
- "x": 325.0,
- "y": 450.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB2"
- },
- "path": [
- {
- "x": 185.0,
- "y": 750.0
- },
- {
- "x": 185.0,
- "y": 885.0
- },
- {
- "x": 330.0,
- "y": 885.0
- },
- {
- "x": 330.0,
- "y": 550.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB3"
- },
- "path": [
- {
- "x": 180.0,
- "y": 760.0
- },
- {
- "x": 180.0,
- "y": 890.0
- },
- {
- "x": 335.0,
- "y": 890.0
- },
- {
- "x": 335.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB4"
- },
- "path": [
- {
- "x": 175.0,
- "y": 770.0
- },
- {
- "x": 175.0,
- "y": 895.0
- },
- {
- "x": 340.0,
- "y": 895.0
- },
- {
- "x": 340.0,
- "y": 750.0
- }
- ]
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIram2",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 130.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "QA1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "QB2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "QB1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "QA3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 75.0
- },
- "name": "QB4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "QA2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 65.0
- },
- "name": "QB3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "QA4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "B0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "WE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 105.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 115.0
- },
- "name": "D3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 125.0
- },
- "name": "D4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A3",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.1,
- "subComps": [
- {
- "pos": {
- "x": 55.0,
- "y": 45.0
- },
- "id": "GUIdemux2"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 150.0
- },
- "id": "GUIdemux2"
- },
- {
- "pos": {
- "x": 235.0,
- "y": 150.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 80.0,
- "y": 330.0
- },
- "id": "GUIram2"
- },
- {
- "pos": {
- "x": 80.0,
- "y": 480.0
- },
- "id": "GUIram2"
- },
- {
- "pos": {
- "x": 80.0,
- "y": 630.0
- },
- "id": "GUIram2"
- },
- {
- "pos": {
- "x": 80.0,
- "y": 780.0
- },
- "id": "GUIram2"
- },
- {
- "pos": {
- "x": 250.0,
- "y": 375.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 250.0,
- "y": 485.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 250.0,
- "y": 635.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 250.0,
- "y": 785.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 155.0,
- "y": 325.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 155.0,
- "y": 435.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 155.0,
- "y": 585.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 155.0,
- "y": 735.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 229.0,
- "y": 154.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 224.0,
- "y": 164.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 219.0,
- "y": 174.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 214.0,
- "y": 184.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 59.0,
- "y": 534.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 544.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 69.0,
- "y": 554.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 564.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 59.0,
- "y": 684.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 694.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 69.0,
- "y": 704.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 714.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 59.0,
- "y": 834.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 844.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 69.0,
- "y": 854.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 864.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 484.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 494.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 504.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 54.0,
- "y": 514.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 634.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 644.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 654.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 54.0,
- "y": 664.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 334.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 349.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 649.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 54.0,
- "y": 749.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A0"
- },
- "pin2": {
- "compId": 1,
- "pinName": "S0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "S1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 150.0
- },
- {
- "x": 10.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B0"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 450.0
- },
- {
- "x": 5.0,
- "y": 155.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 550.0
- },
- {
- "x": 10.0,
- "y": 165.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y00"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y01"
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y10"
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y11"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "WE"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 850.0
- },
- {
- "x": 15.0,
- "y": 195.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 4,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 290.0,
- "y": 155.0
- },
- {
- "x": 290.0,
- "y": 230.0
- },
- {
- "x": 35.0,
- "y": 230.0
- },
- {
- "x": 35.0,
- "y": 375.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 5,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 285.0,
- "y": 165.0
- },
- {
- "x": 285.0,
- "y": 225.0
- },
- {
- "x": 30.0,
- "y": 225.0
- },
- {
- "x": 30.0,
- "y": 525.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 6,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 280.0,
- "y": 175.0
- },
- {
- "x": 280.0,
- "y": 220.0
- },
- {
- "x": 25.0,
- "y": 220.0
- },
- {
- "x": 25.0,
- "y": 675.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 7,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 275.0,
- "y": 185.0
- },
- {
- "x": 275.0,
- "y": 215.0
- },
- {
- "x": 20.0,
- "y": 215.0
- },
- {
- "x": 20.0,
- "y": 825.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 40,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 40,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 41,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 41,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 45.0,
- "y": 345.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B0"
- },
- "path": [
- {
- "x": 50.0,
- "y": 355.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 55.0,
- "y": 365.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 36,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 37,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 42,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 42,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 42,
- "pinName": ""
- },
- "pin2": {
- "compId": 38,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 39,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A0"
- },
- "path": [
- {
- "x": 40.0,
- "y": 785.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 45.0,
- "y": 795.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B0"
- },
- "path": [
- {
- "x": 50.0,
- "y": 805.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 43,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 43,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 55.0,
- "y": 815.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 40,
- "pinName": ""
- },
- "path": [
- {
- "x": 40.0,
- "y": 250.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 41,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 43,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D1"
- },
- "path": [
- {
- "x": 60.0,
- "y": 385.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D2"
- },
- "path": [
- {
- "x": 65.0,
- "y": 395.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D3"
- },
- "path": [
- {
- "x": 70.0,
- "y": 405.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D4"
- },
- "path": [
- {
- "x": 75.0,
- "y": 415.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 24,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 25,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 26,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 27,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 30,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 31,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": [
- {
- "x": 60.0,
- "y": 950.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": [
- {
- "x": 65.0,
- "y": 1050.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 30,
- "pinName": ""
- },
- "path": [
- {
- "x": 70.0,
- "y": 1150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 31,
- "pinName": ""
- },
- "path": [
- {
- "x": 75.0,
- "y": 1250.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y00"
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 135.0,
- "y": 50.0
- },
- {
- "x": 135.0,
- "y": 370.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y01"
- },
- "pin2": {
- "compId": 13,
- "pinName": "B"
- },
- "path": [
- {
- "x": 130.0,
- "y": 60.0
- },
- {
- "x": 130.0,
- "y": 520.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y10"
- },
- "pin2": {
- "compId": 14,
- "pinName": "B"
- },
- "path": [
- {
- "x": 125.0,
- "y": 70.0
- },
- {
- "x": 125.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y11"
- },
- "pin2": {
- "compId": 15,
- "pinName": "B"
- },
- "path": [
- {
- "x": 120.0,
- "y": 80.0
- },
- {
- "x": 120.0,
- "y": 820.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 230.0,
- "y": 420.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 225.0,
- "y": 570.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 220.0,
- "y": 720.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": [
- {
- "x": 215.0,
- "y": 870.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QB1"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 375.0
- },
- {
- "x": 140.0,
- "y": 380.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QB2"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 385.0
- },
- {
- "x": 140.0,
- "y": 390.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QB3"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 395.0
- },
- {
- "x": 140.0,
- "y": 400.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QB4"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 405.0
- },
- {
- "x": 140.0,
- "y": 410.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QB1"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 525.0
- },
- {
- "x": 140.0,
- "y": 530.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QB2"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 535.0
- },
- {
- "x": 140.0,
- "y": 540.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QB3"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 545.0
- },
- {
- "x": 140.0,
- "y": 550.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QB4"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 555.0
- },
- {
- "x": 140.0,
- "y": 560.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QB1"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 675.0
- },
- {
- "x": 140.0,
- "y": 680.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QB2"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 685.0
- },
- {
- "x": 140.0,
- "y": 690.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QB3"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 695.0
- },
- {
- "x": 140.0,
- "y": 700.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QB4"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 705.0
- },
- {
- "x": 140.0,
- "y": 710.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QB1"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 825.0
- },
- {
- "x": 140.0,
- "y": 830.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QB2"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 835.0
- },
- {
- "x": 140.0,
- "y": 840.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QB3"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 845.0
- },
- {
- "x": 140.0,
- "y": 850.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QB4"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 855.0
- },
- {
- "x": 140.0,
- "y": 860.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QA1"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 335.0
- },
- {
- "x": 140.0,
- "y": 330.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QA2"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 345.0
- },
- {
- "x": 140.0,
- "y": 340.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QA3"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 355.0
- },
- {
- "x": 140.0,
- "y": 350.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QA4"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 365.0
- },
- {
- "x": 140.0,
- "y": 360.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QA1"
- },
- "pin2": {
- "compId": 13,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 485.0
- },
- {
- "x": 140.0,
- "y": 480.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QA2"
- },
- "pin2": {
- "compId": 13,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 495.0
- },
- {
- "x": 140.0,
- "y": 490.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QA3"
- },
- "pin2": {
- "compId": 13,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 505.0
- },
- {
- "x": 140.0,
- "y": 500.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QA4"
- },
- "pin2": {
- "compId": 13,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 515.0
- },
- {
- "x": 140.0,
- "y": 510.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QA1"
- },
- "pin2": {
- "compId": 14,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 635.0
- },
- {
- "x": 140.0,
- "y": 630.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QA2"
- },
- "pin2": {
- "compId": 14,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 645.0
- },
- {
- "x": 140.0,
- "y": 640.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QA3"
- },
- "pin2": {
- "compId": 14,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 655.0
- },
- {
- "x": 140.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QA4"
- },
- "pin2": {
- "compId": 14,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 665.0
- },
- {
- "x": 140.0,
- "y": 660.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QA1"
- },
- "pin2": {
- "compId": 15,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 785.0
- },
- {
- "x": 140.0,
- "y": 780.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QA2"
- },
- "pin2": {
- "compId": 15,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 795.0
- },
- {
- "x": 140.0,
- "y": 790.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QA3"
- },
- "pin2": {
- "compId": 15,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 805.0
- },
- {
- "x": 140.0,
- "y": 800.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QA4"
- },
- "pin2": {
- "compId": 15,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 815.0
- },
- {
- "x": 140.0,
- "y": 810.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 305.0,
- "y": 380.0
- },
- {
- "x": 305.0,
- "y": 445.0
- },
- {
- "x": 245.0,
- "y": 445.0
- },
- {
- "x": 245.0,
- "y": 490.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 300.0,
- "y": 390.0
- },
- {
- "x": 300.0,
- "y": 440.0
- },
- {
- "x": 240.0,
- "y": 440.0
- },
- {
- "x": 240.0,
- "y": 500.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 295.0,
- "y": 400.0
- },
- {
- "x": 295.0,
- "y": 435.0
- },
- {
- "x": 235.0,
- "y": 435.0
- },
- {
- "x": 235.0,
- "y": 510.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 290.0,
- "y": 410.0
- },
- {
- "x": 290.0,
- "y": 430.0
- },
- {
- "x": 230.0,
- "y": 430.0
- },
- {
- "x": 230.0,
- "y": 520.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 305.0,
- "y": 490.0
- },
- {
- "x": 305.0,
- "y": 595.0
- },
- {
- "x": 245.0,
- "y": 595.0
- },
- {
- "x": 245.0,
- "y": 640.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 300.0,
- "y": 500.0
- },
- {
- "x": 300.0,
- "y": 590.0
- },
- {
- "x": 240.0,
- "y": 590.0
- },
- {
- "x": 240.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 295.0,
- "y": 510.0
- },
- {
- "x": 295.0,
- "y": 585.0
- },
- {
- "x": 235.0,
- "y": 585.0
- },
- {
- "x": 235.0,
- "y": 660.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 290.0,
- "y": 520.0
- },
- {
- "x": 290.0,
- "y": 580.0
- },
- {
- "x": 230.0,
- "y": 580.0
- },
- {
- "x": 230.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 305.0,
- "y": 640.0
- },
- {
- "x": 305.0,
- "y": 745.0
- },
- {
- "x": 245.0,
- "y": 745.0
- },
- {
- "x": 245.0,
- "y": 790.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 300.0,
- "y": 650.0
- },
- {
- "x": 300.0,
- "y": 740.0
- },
- {
- "x": 240.0,
- "y": 740.0
- },
- {
- "x": 240.0,
- "y": 800.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 295.0,
- "y": 660.0
- },
- {
- "x": 295.0,
- "y": 735.0
- },
- {
- "x": 235.0,
- "y": 735.0
- },
- {
- "x": 235.0,
- "y": 810.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 290.0,
- "y": 670.0
- },
- {
- "x": 290.0,
- "y": 730.0
- },
- {
- "x": 230.0,
- "y": 730.0
- },
- {
- "x": 230.0,
- "y": 820.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB1"
- },
- "path": [
- {
- "x": 330.0,
- "y": 790.0
- },
- {
- "x": 330.0,
- "y": 450.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB2"
- },
- "path": [
- {
- "x": 335.0,
- "y": 800.0
- },
- {
- "x": 335.0,
- "y": 550.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB3"
- },
- "path": [
- {
- "x": 340.0,
- "y": 810.0
- },
- {
- "x": 340.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB4"
- },
- "path": [
- {
- "x": 345.0,
- "y": 820.0
- },
- {
- "x": 345.0,
- "y": 750.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 210.0,
- "y": 330.0
- },
- {
- "x": 210.0,
- "y": 430.0
- },
- {
- "x": 150.0,
- "y": 430.0
- },
- {
- "x": 150.0,
- "y": 440.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 205.0,
- "y": 340.0
- },
- {
- "x": 205.0,
- "y": 425.0
- },
- {
- "x": 145.0,
- "y": 425.0
- },
- {
- "x": 145.0,
- "y": 450.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 200.0,
- "y": 350.0
- },
- {
- "x": 200.0,
- "y": 420.0
- },
- {
- "x": 140.0,
- "y": 420.0
- },
- {
- "x": 140.0,
- "y": 460.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 195.0,
- "y": 360.0
- },
- {
- "x": 195.0,
- "y": 415.0
- },
- {
- "x": 135.0,
- "y": 415.0
- },
- {
- "x": 135.0,
- "y": 470.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 210.0,
- "y": 440.0
- },
- {
- "x": 210.0,
- "y": 580.0
- },
- {
- "x": 150.0,
- "y": 580.0
- },
- {
- "x": 150.0,
- "y": 590.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 205.0,
- "y": 450.0
- },
- {
- "x": 205.0,
- "y": 575.0
- },
- {
- "x": 145.0,
- "y": 575.0
- },
- {
- "x": 145.0,
- "y": 600.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 200.0,
- "y": 460.0
- },
- {
- "x": 200.0,
- "y": 570.0
- },
- {
- "x": 140.0,
- "y": 570.0
- },
- {
- "x": 140.0,
- "y": 610.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 195.0,
- "y": 470.0
- },
- {
- "x": 195.0,
- "y": 565.0
- },
- {
- "x": 135.0,
- "y": 565.0
- },
- {
- "x": 135.0,
- "y": 620.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 210.0,
- "y": 590.0
- },
- {
- "x": 210.0,
- "y": 730.0
- },
- {
- "x": 150.0,
- "y": 730.0
- },
- {
- "x": 150.0,
- "y": 740.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 205.0,
- "y": 600.0
- },
- {
- "x": 205.0,
- "y": 725.0
- },
- {
- "x": 145.0,
- "y": 725.0
- },
- {
- "x": 145.0,
- "y": 750.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 200.0,
- "y": 610.0
- },
- {
- "x": 200.0,
- "y": 720.0
- },
- {
- "x": 140.0,
- "y": 720.0
- },
- {
- "x": 140.0,
- "y": 760.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 195.0,
- "y": 620.0
- },
- {
- "x": 195.0,
- "y": 715.0
- },
- {
- "x": 135.0,
- "y": 715.0
- },
- {
- "x": 135.0,
- "y": 770.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA1"
- },
- "path": [
- {
- "x": 210.0,
- "y": 740.0
- },
- {
- "x": 210.0,
- "y": 880.0
- },
- {
- "x": 310.0,
- "y": 880.0
- },
- {
- "x": 310.0,
- "y": 50.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA2"
- },
- "path": [
- {
- "x": 205.0,
- "y": 750.0
- },
- {
- "x": 205.0,
- "y": 885.0
- },
- {
- "x": 315.0,
- "y": 885.0
- },
- {
- "x": 315.0,
- "y": 150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA3"
- },
- "path": [
- {
- "x": 200.0,
- "y": 760.0
- },
- {
- "x": 200.0,
- "y": 890.0
- },
- {
- "x": 320.0,
- "y": 890.0
- },
- {
- "x": 320.0,
- "y": 250.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA4"
- },
- "path": [
- {
- "x": 195.0,
- "y": 770.0
- },
- {
- "x": 195.0,
- "y": 895.0
- },
- {
- "x": 325.0,
- "y": 895.0
- },
- {
- "x": 325.0,
- "y": 350.0
- }
- ]
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIram4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 100.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "SA",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "SB",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "B4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 20.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 52.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 102.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 152.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 77.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 127.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 177.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 52.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 77.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 16.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 66.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 116.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 41.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 91.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 141.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 62.5
- },
- {
- "x": 15.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 17.5,
- "y": 87.5
- },
- {
- "x": 17.5,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 17.5,
- "y": 112.5
- },
- {
- "x": 17.5,
- "y": 107.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 17.5,
- "y": 137.5
- },
- {
- "x": 17.5,
- "y": 157.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": [
- {
- "x": 10.0,
- "y": 162.5
- },
- {
- "x": 10.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 12.5,
- "y": 187.5
- },
- {
- "x": 12.5,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 212.5
- },
- {
- "x": 15.0,
- "y": 132.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B4"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": [
- {
- "x": 10.0,
- "y": 237.5
- },
- {
- "x": 10.0,
- "y": 182.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "SA"
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "SB"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 167.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 192.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- },
- "path": [
- {
- "x": 42.5,
- "y": 12.5
- },
- {
- "x": 42.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 45.0,
- "y": 37.5
- },
- {
- "x": 45.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A"
- },
- "path": [
- {
- "x": 47.5,
- "y": 62.5
- },
- {
- "x": 47.5,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 50.0,
- "y": 87.5
- },
- {
- "x": 50.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A"
- },
- "path": [
- {
- "x": 52.5,
- "y": 112.5
- },
- {
- "x": 52.5,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": [
- {
- "x": 55.0,
- "y": 137.5
- },
- {
- "x": 55.0,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A"
- },
- "path": [
- {
- "x": 57.5,
- "y": 162.5
- },
- {
- "x": 57.5,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 60.0,
- "y": 187.5
- },
- {
- "x": 60.0,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIsel2_4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 150.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "SA",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 115.0
- },
- "name": "C1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "SB",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 125.0
- },
- "name": "C2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "SC",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 135.0
- },
- "name": "C3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 145.0
- },
- "name": "C4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 105.0
- },
- "name": "B4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.2,
- "subComps": [
- {
- "pos": {
- "x": 35.0,
- "y": 250.0
- },
- "id": "GUIsel2_4"
- },
- {
- "pos": {
- "x": 75.0,
- "y": 250.0
- },
- "id": "GUInot4"
- },
- {
- "pos": {
- "x": 50.0,
- "y": 570.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 620.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 670.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 720.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 152.5,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 152.5,
- "y": 65.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 152.5,
- "y": 115.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 152.5,
- "y": 165.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 584.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 634.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 684.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "SA"
- },
- "pin2": {
- "compId": 1,
- "pinName": "SA"
- },
- "path": [
- {
- "x": 25.0,
- "y": 25.0
- },
- {
- "x": 25.0,
- "y": 255.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "SB"
- },
- "pin2": {
- "compId": 1,
- "pinName": "SB"
- },
- "path": [
- {
- "x": 20.0,
- "y": 75.0
- },
- {
- "x": 20.0,
- "y": 265.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 15.0,
- "y": 175.0
- },
- {
- "x": 15.0,
- "y": 275.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 10.0,
- "y": 225.0
- },
- {
- "x": 10.0,
- "y": 285.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 5.0,
- "y": 275.0
- },
- {
- "x": 5.0,
- "y": 295.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 325.0
- },
- {
- "x": 5.0,
- "y": 305.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 375.0
- },
- {
- "x": 10.0,
- "y": 315.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 15.0,
- "y": 425.0
- },
- {
- "x": 15.0,
- "y": 325.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 20.0,
- "y": 475.0
- },
- {
- "x": 20.0,
- "y": 335.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B4"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 25.0,
- "y": 525.0
- },
- {
- "x": 25.0,
- "y": 345.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "SC"
- },
- "pin2": {
- "compId": 11,
- "pinName": ""
- },
- "path": [
- {
- "x": 30.0,
- "y": 125.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": ""
- },
- "path": [
- {
- "x": 30.0,
- "y": 125.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": [
- {
- "x": 30.0,
- "y": 125.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 30.0,
- "y": 735.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C1"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C2"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C3"
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C4"
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 115.0,
- "y": 255.0
- },
- {
- "x": 115.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": [
- {
- "x": 120.0,
- "y": 265.0
- },
- {
- "x": 120.0,
- "y": 70.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- },
- "path": [
- {
- "x": 125.0,
- "y": 275.0
- },
- {
- "x": 125.0,
- "y": 120.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A"
- },
- "path": [
- {
- "x": 130.0,
- "y": 285.0
- },
- {
- "x": 130.0,
- "y": 170.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 135.0,
- "y": 580.0
- },
- {
- "x": 135.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 140.0,
- "y": 630.0
- },
- {
- "x": 140.0,
- "y": 80.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 145.0,
- "y": 680.0
- },
- {
- "x": 145.0,
- "y": 130.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 150.0,
- "y": 730.0
- },
- {
- "x": 150.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIsel3_4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 7.5,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 35.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 35.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 62.5,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 30.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 30.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIxor",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 270.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 85.0
- },
- "name": "ORAMn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 265.0
- },
- "name": "IQn+3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "I0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 255.0
- },
- "name": "IQn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "I1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "I2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "I3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 65.0
- },
- "name": "OVR",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "I4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 105.0
- },
- "name": "Cn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 115.0
- },
- "name": "OQn+3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "I5",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I6",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 105.0
- },
- "name": "OQn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I7",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I8",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 155.0
- },
- "name": "A0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 165.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 175.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 185.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 235.0
- },
- "name": "IRAMn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "Cn+4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 95.0
- },
- "name": "ORAMn+3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "F\u003d0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 115.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 245.0
- },
- "name": "IRAMn+3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 75.0
- },
- "name": "F3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 125.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 195.0
- },
- "name": "B0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 135.0
- },
- "name": "D3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 205.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 145.0
- },
- "name": "D4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 215.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 225.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.1,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 45.0
- },
- "id": "GUIAm2901DestDecode"
- },
- {
- "pos": {
- "x": 275.0,
- "y": 135.0
- },
- "id": "GUImux1_4"
- },
- {
- "pos": {
- "x": 190.0,
- "y": 65.0
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 160.0,
- "y": 75.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 240.0,
- "y": 2110.0
- },
- "id": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode"
- },
- {
- "pos": {
- "x": 275.0,
- "y": 445.0
- },
- "id": "GUIor4"
- },
- {
- "pos": {
- "x": 320.0,
- "y": 440.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 95.0,
- "y": 2220.0
- },
- "id": "GUIram4"
- },
- {
- "pos": {
- "x": 160.0,
- "y": 2220.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 160.0,
- "y": 2275.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 2310.0
- },
- "id": "GUIsel3_4"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 2510.0
- },
- "id": "GUIsel3_4"
- },
- {
- "pos": {
- "x": 90.0,
- "y": 2490.0
- },
- "id": "GUIAm2901QReg"
- },
- {
- "pos": {
- "x": 154.0,
- "y": 949.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 154.0,
- "y": 89.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 154.0,
- "y": 2264.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 154.0,
- "y": 2319.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 2314.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 2324.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 2334.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 219.0,
- "y": 2224.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 224.0,
- "y": 2234.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 229.0,
- "y": 2244.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 234.0,
- "y": 2254.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 129.0,
- "y": 2494.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 134.0,
- "y": 2504.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 139.0,
- "y": 2514.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 144.0,
- "y": 2524.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 219.0,
- "y": 2494.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 234.0,
- "y": 2524.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 2624.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 2634.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 279.0,
- "y": 2114.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 294.0,
- "y": 2144.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 329.0,
- "y": 949.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 254.0,
- "y": 2089.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 259.0,
- "y": 2094.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 264.0,
- "y": 2099.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 269.0,
- "y": 2104.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 254.0,
- "y": 449.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 259.0,
- "y": 459.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 264.0,
- "y": 469.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 269.0,
- "y": 479.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 2354.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 2364.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 19.0,
- "y": 2374.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 2394.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 19.0,
- "y": 2404.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 2414.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 2384.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 2424.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 19.0,
- "y": 2434.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 2444.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 314.0,
- "y": 449.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I8"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I8"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I7"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I7"
- },
- "path": [
- {
- "x": 5.0,
- "y": 150.0
- },
- {
- "x": 5.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I6"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I6"
- },
- "path": [
- {
- "x": 10.0,
- "y": 250.0
- },
- {
- "x": 10.0,
- "y": 70.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I5"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I5"
- },
- "path": [
- {
- "x": 130.0,
- "y": 350.0
- },
- {
- "x": 130.0,
- "y": 2115.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I4"
- },
- "path": [
- {
- "x": 125.0,
- "y": 450.0
- },
- {
- "x": 125.0,
- "y": 2125.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I3"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I3"
- },
- "path": [
- {
- "x": 120.0,
- "y": 550.0
- },
- {
- "x": 120.0,
- "y": 2135.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I2"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I2"
- },
- "path": [
- {
- "x": 115.0,
- "y": 650.0
- },
- {
- "x": 115.0,
- "y": 2145.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 110.0,
- "y": 750.0
- },
- {
- "x": 110.0,
- "y": 2155.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 105.0,
- "y": 850.0
- },
- {
- "x": 105.0,
- "y": 2165.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 155.0,
- "y": 80.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "C"
- },
- "path": [
- {
- "x": 155.0,
- "y": 2485.0
- },
- {
- "x": 80.0,
- "y": 2485.0
- },
- {
- "x": 80.0,
- "y": 2495.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "LSH"
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": [
- {
- "x": 55.0,
- "y": 90.0
- },
- {
- "x": 55.0,
- "y": 125.0
- },
- {
- "x": 40.0,
- "y": 125.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "NSH"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": [
- {
- "x": 60.0,
- "y": 50.0
- },
- {
- "x": 60.0,
- "y": 120.0
- },
- {
- "x": 35.0,
- "y": 120.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "RSH"
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": [
- {
- "x": 65.0,
- "y": 60.0
- },
- {
- "x": 65.0,
- "y": 115.0
- },
- {
- "x": 30.0,
- "y": 115.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "SA"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "SB"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "SC"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "SA"
- },
- "path": [
- {
- "x": 40.0,
- "y": 2515.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "SB"
- },
- "path": [
- {
- "x": 35.0,
- "y": 2525.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "SC"
- },
- "path": [
- {
- "x": 30.0,
- "y": 2535.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A0"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A0"
- },
- "path": [
- {
- "x": 80.0,
- "y": 1550.0
- },
- {
- "x": 80.0,
- "y": 2225.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 75.0,
- "y": 1650.0
- },
- {
- "x": 75.0,
- "y": 2235.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 70.0,
- "y": 1750.0
- },
- {
- "x": 70.0,
- "y": 2245.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 65.0,
- "y": 1850.0
- },
- {
- "x": 65.0,
- "y": 2255.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B0"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B0"
- },
- "path": [
- {
- "x": 60.0,
- "y": 1950.0
- },
- {
- "x": 60.0,
- "y": 2265.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 55.0,
- "y": 2050.0
- },
- {
- "x": 55.0,
- "y": 2275.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 50.0,
- "y": 2150.0
- },
- {
- "x": 50.0,
- "y": 2285.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 45.0,
- "y": 2250.0
- },
- {
- "x": 45.0,
- "y": 2295.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QA1"
- },
- "pin2": {
- "compId": 9,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QA2"
- },
- "pin2": {
- "compId": 9,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QA3"
- },
- "pin2": {
- "compId": 9,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QA4"
- },
- "pin2": {
- "compId": 9,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QB1"
- },
- "pin2": {
- "compId": 10,
- "pinName": "D1"
- },
- "path": [
- {
- "x": 150.0,
- "y": 2265.0
- },
- {
- "x": 150.0,
- "y": 2280.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QB2"
- },
- "pin2": {
- "compId": 10,
- "pinName": "D2"
- },
- "path": [
- {
- "x": 145.0,
- "y": 2275.0
- },
- {
- "x": 145.0,
- "y": 2290.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QB3"
- },
- "pin2": {
- "compId": 10,
- "pinName": "D3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 2285.0
- },
- {
- "x": 140.0,
- "y": 2300.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QB4"
- },
- "pin2": {
- "compId": 10,
- "pinName": "D4"
- },
- "path": [
- {
- "x": 135.0,
- "y": 2295.0
- },
- {
- "x": 135.0,
- "y": 2310.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Cn"
- },
- "pin2": {
- "compId": 5,
- "pinName": "Cn"
- },
- "path": [
- {
- "x": 100.0,
- "y": 1050.0
- },
- {
- "x": 100.0,
- "y": 2175.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 5,
- "pinName": "D1"
- },
- "path": [
- {
- "x": 180.0,
- "y": 1150.0
- },
- {
- "x": 180.0,
- "y": 2185.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 5,
- "pinName": "D2"
- },
- "path": [
- {
- "x": 175.0,
- "y": 1250.0
- },
- {
- "x": 175.0,
- "y": 2195.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 5,
- "pinName": "D3"
- },
- "path": [
- {
- "x": 170.0,
- "y": 1350.0
- },
- {
- "x": 170.0,
- "y": 2205.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "D4"
- },
- "path": [
- {
- "x": 165.0,
- "y": 1450.0
- },
- {
- "x": 165.0,
- "y": 2215.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 24,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I0_1"
- },
- "path": [
- {
- "x": 220.0,
- "y": 150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I0_2"
- },
- "path": [
- {
- "x": 225.0,
- "y": 160.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I0_3"
- },
- "path": [
- {
- "x": 230.0,
- "y": 170.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I0_4"
- },
- "path": [
- {
- "x": 235.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 5,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 200.0,
- "y": 2280.0
- },
- {
- "x": 200.0,
- "y": 2265.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 5,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 205.0,
- "y": 2290.0
- },
- {
- "x": 205.0,
- "y": 2275.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 5,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 210.0,
- "y": 2300.0
- },
- {
- "x": 210.0,
- "y": 2285.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 215.0,
- "y": 2310.0
- },
- {
- "x": 215.0,
- "y": 2295.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 25,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 26,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 27,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "OQn"
- },
- "path": [
- {
- "x": 335.0,
- "y": 2495.0
- },
- {
- "x": 335.0,
- "y": 1050.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 30,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "OQn+3"
- },
- "path": [
- {
- "x": 340.0,
- "y": 2525.0
- },
- {
- "x": 340.0,
- "y": 1150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 31,
- "pinName": ""
- },
- "path": [
- {
- "x": 135.0,
- "y": 2670.0
- },
- {
- "x": 30.0,
- "y": 2670.0
- },
- {
- "x": 30.0,
- "y": 2635.0
- },
- {
- "x": 35.0,
- "y": 2635.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 32,
- "pinName": ""
- },
- "path": [
- {
- "x": 140.0,
- "y": 2675.0
- },
- {
- "x": 35.0,
- "y": 2675.0
- },
- {
- "x": 35.0,
- "y": 2640.0
- },
- {
- "x": 40.0,
- "y": 2640.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "C1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "C2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 145.0,
- "y": 2680.0
- },
- {
- "x": 40.0,
- "y": 2680.0
- },
- {
- "x": 40.0,
- "y": 2645.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "IQn+3"
- },
- "pin2": {
- "compId": 12,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 2650.0
- },
- {
- "x": 5.0,
- "y": 2655.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "IQn"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 5.0,
- "y": 2550.0
- },
- {
- "x": 5.0,
- "y": 2545.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 130.0,
- "y": 2665.0
- },
- {
- "x": 25.0,
- "y": 2665.0
- },
- {
- "x": 25.0,
- "y": 2630.0
- },
- {
- "x": 30.0,
- "y": 2630.0
- },
- {
- "x": 30.0,
- "y": 2555.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "Q1"
- },
- "path": [
- {
- "x": 220.0,
- "y": 2305.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "Q2"
- },
- "path": [
- {
- "x": 225.0,
- "y": 2505.0
- },
- {
- "x": 225.0,
- "y": 2315.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "Q3"
- },
- "path": [
- {
- "x": 230.0,
- "y": 2515.0
- },
- {
- "x": 230.0,
- "y": 2325.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "Q4"
- },
- "path": [
- {
- "x": 235.0,
- "y": 2335.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 35.0,
- "y": 2565.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 40.0,
- "y": 2575.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 13,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 13,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 13,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 13,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Cn+4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Cn+4"
- },
- "path": [
- {
- "x": 315.0,
- "y": 2155.0
- },
- {
- "x": 315.0,
- "y": 550.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "OVR"
- },
- "pin2": {
- "compId": 0,
- "pinName": "OVR"
- },
- "path": [
- {
- "x": 320.0,
- "y": 2165.0
- },
- {
- "x": 320.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "F1"
- },
- "pin2": {
- "compId": 33,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "F4"
- },
- "pin2": {
- "compId": 34,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "ORAMn"
- },
- "path": [
- {
- "x": 325.0,
- "y": 2115.0
- },
- {
- "x": 325.0,
- "y": 850.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 35,
- "pinName": ""
- },
- "path": [
- {
- "x": 330.0,
- "y": 2145.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "ORAMn+3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "F3"
- },
- "path": [
- {
- "x": 330.0,
- "y": 750.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 36,
- "pinName": ""
- },
- "path": [
- {
- "x": 280.0,
- "y": 2090.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "F2"
- },
- "pin2": {
- "compId": 37,
- "pinName": ""
- },
- "path": [
- {
- "x": 285.0,
- "y": 2125.0
- },
- {
- "x": 285.0,
- "y": 2095.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "F3"
- },
- "pin2": {
- "compId": 38,
- "pinName": ""
- },
- "path": [
- {
- "x": 290.0,
- "y": 2135.0
- },
- {
- "x": 290.0,
- "y": 2100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 39,
- "pinName": ""
- },
- "path": [
- {
- "x": 295.0,
- "y": 2105.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 40,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 41,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 42,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 43,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 40,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 41,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 42,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 43,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 40,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I1_1"
- },
- "path": [
- {
- "x": 255.0,
- "y": 190.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 41,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I1_2"
- },
- "path": [
- {
- "x": 260.0,
- "y": 200.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 42,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I1_3"
- },
- "path": [
- {
- "x": 265.0,
- "y": 210.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 43,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I1_4"
- },
- "path": [
- {
- "x": 270.0,
- "y": 220.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 44,
- "pinName": ""
- },
- "path": [
- {
- "x": 10.0,
- "y": 2090.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 45,
- "pinName": ""
- },
- "path": [
- {
- "x": 15.0,
- "y": 2095.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 46,
- "pinName": ""
- },
- "path": [
- {
- "x": 20.0,
- "y": 2100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "IRAMn"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 5.0,
- "y": 2350.0
- },
- {
- "x": 5.0,
- "y": 2345.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 44,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 45,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 46,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 45,
- "pinName": ""
- },
- "pin2": {
- "compId": 47,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 46,
- "pinName": ""
- },
- "pin2": {
- "compId": 48,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 49,
- "pinName": ""
- },
- "path": [
- {
- "x": 25.0,
- "y": 2105.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 44,
- "pinName": ""
- },
- "pin2": {
- "compId": 50,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 50,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 47,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 48,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 49,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 47,
- "pinName": ""
- },
- "pin2": {
- "compId": 51,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 48,
- "pinName": ""
- },
- "pin2": {
- "compId": 52,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 49,
- "pinName": ""
- },
- "pin2": {
- "compId": 53,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 51,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "C1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 52,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "C2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 53,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "C3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "IRAMn+3"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 2450.0
- },
- {
- "x": 5.0,
- "y": 2455.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 50,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 2585.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 51,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 15.0,
- "y": 2595.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 52,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 20.0,
- "y": 2605.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 53,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 25.0,
- "y": 2615.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 8,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 8,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 8,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 8,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "RAMWE"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 8,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 230.0,
- "y": 70.0
- },
- {
- "x": 230.0,
- "y": 105.0
- },
- {
- "x": 90.0,
- "y": 105.0
- },
- {
- "x": 90.0,
- "y": 2305.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "QWE"
- },
- "pin2": {
- "compId": 13,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 85.0,
- "y": 100.0
- },
- {
- "x": 85.0,
- "y": 2505.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "YF"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S0"
- },
- "path": [
- {
- "x": 70.0,
- "y": 80.0
- },
- {
- "x": 70.0,
- "y": 140.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": [
- {
- "x": 335.0,
- "y": 140.0
- },
- {
- "x": 335.0,
- "y": 50.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": [
- {
- "x": 335.0,
- "y": 160.0
- },
- {
- "x": 335.0,
- "y": 250.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": [
- {
- "x": 325.0,
- "y": 170.0
- },
- {
- "x": 325.0,
- "y": 350.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 54,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 54,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 315.0,
- "y": 445.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 54,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 315.0,
- "y": 455.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F\u003d0"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 60.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "SBE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "FN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "SN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I5",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "L",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "RN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "CinE",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.25,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 55.0,
- "y": 10.0
- },
- "id": "GUInand3"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 45.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 55.0,
- "y": 70.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 100.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 100.0,
- "y": 135.0
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 4.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 44.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 54.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 64.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 84.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 99.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 74.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 34.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I5"
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 45.0,
- "y": 45.0
- },
- {
- "x": 45.0,
- "y": 50.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "FN"
- },
- "path": [
- {
- "x": 5.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I4"
- },
- "pin2": {
- "compId": 11,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 10.0,
- "y": 40.0
- },
- {
- "x": 45.0,
- "y": 40.0
- },
- {
- "x": 45.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "SN"
- },
- "path": [
- {
- "x": 10.0,
- "y": 105.0
- },
- {
- "x": 135.0,
- "y": 105.0
- },
- {
- "x": 135.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I3"
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": [
- {
- "x": 50.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "RN"
- },
- "path": [
- {
- "x": 50.0,
- "y": 220.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 50.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "CinE"
- },
- "path": [
- {
- "x": 40.0,
- "y": 5.0
- },
- {
- "x": 115.0,
- "y": 5.0
- },
- {
- "x": 115.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 40.0,
- "y": 150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "L"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "SBE"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901ALUFuncDecode",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 120.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "R2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 105.0
- },
- "name": "S3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "R3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 115.0
- },
- "name": "S4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "R4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "OVR",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "Cn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "F1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I5",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "F2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "F3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "F4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "Cn+4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "S1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "R1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "S2",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.25,
- "subComps": [
- {
- "pos": {
- "x": 20.0,
- "y": 2.5
- },
- "id": "GUIAm2901ALUFuncDecode"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 80.0
- },
- "id": "GUIAm2901ALUOneBit"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 180.0
- },
- "id": "GUIAm2901ALUOneBit"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 280.0
- },
- "id": "GUIAm2901ALUOneBit"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 380.0
- },
- "id": "GUIAm2901ALUOneBit"
- },
- {
- "pos": {
- "x": 95.0,
- "y": 400.0
- },
- "id": "GUIxor"
- },
- {
- "pos": {
- "x": 24.0,
- "y": 94.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 194.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 294.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 26.5,
- "y": 104.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 26.5,
- "y": 204.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 26.5,
- "y": 304.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 124.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 224.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 324.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 144.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 244.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 344.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 154.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 254.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 354.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 36.5,
- "y": 164.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 36.5,
- "y": 264.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 36.5,
- "y": 364.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 84.0,
- "y": 374.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 84.0,
- "y": 384.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I5"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I5"
- },
- "path": [
- {
- "x": 5.0,
- "y": 20.0
- },
- {
- "x": 5.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I4"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I4"
- },
- "path": [
- {
- "x": 10.0,
- "y": 60.0
- },
- {
- "x": 10.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I3"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I3"
- },
- "path": [
- {
- "x": 15.0,
- "y": 100.0
- },
- {
- "x": 15.0,
- "y": 27.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "SBE"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": [
- {
- "x": 62.5,
- "y": 37.5
- },
- {
- "x": 62.5,
- "y": 70.0
- },
- {
- "x": 25.0,
- "y": 70.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "CoutE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "CoutE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "CoutE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "CoutE"
- },
- "path": [
- {
- "x": 25.0,
- "y": 395.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "CinE"
- },
- "pin2": {
- "compId": 10,
- "pinName": ""
- },
- "path": [
- {
- "x": 70.0,
- "y": 7.5
- },
- {
- "x": 70.0,
- "y": 77.5
- },
- {
- "x": 27.5,
- "y": 77.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "CinE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "CinE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "CinE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "CinE"
- },
- "path": [
- {
- "x": 27.5,
- "y": 405.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "RN"
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": [
- {
- "x": 57.5,
- "y": 57.5
- },
- {
- "x": 57.5,
- "y": 65.0
- },
- {
- "x": 30.0,
- "y": 65.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "RN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "RN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "RN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "RN"
- },
- "path": [
- {
- "x": 30.0,
- "y": 425.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "SN"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": [
- {
- "x": 65.0,
- "y": 27.5
- },
- {
- "x": 65.0,
- "y": 72.5
- },
- {
- "x": 32.5,
- "y": 72.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "SN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "SN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "SN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "SN"
- },
- "path": [
- {
- "x": 32.5,
- "y": 445.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "FN"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": [
- {
- "x": 60.0,
- "y": 47.5
- },
- {
- "x": 60.0,
- "y": 67.5
- },
- {
- "x": 35.0,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "FN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "FN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "FN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "FN"
- },
- "path": [
- {
- "x": 35.0,
- "y": 455.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "L"
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": [
- {
- "x": 67.5,
- "y": 17.5
- },
- {
- "x": 67.5,
- "y": 75.0
- },
- {
- "x": 37.5,
- "y": 75.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 24,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "L"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "L"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "L"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "L"
- },
- "path": [
- {
- "x": 37.5,
- "y": 465.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "R1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "R"
- },
- "path": [
- {
- "x": 10.0,
- "y": 180.0
- },
- {
- "x": 10.0,
- "y": 115.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "R2"
- },
- "pin2": {
- "compId": 3,
- "pinName": "R"
- },
- "path": [
- {
- "x": 10.0,
- "y": 220.0
- },
- {
- "x": 10.0,
- "y": 215.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "R3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "R"
- },
- "path": [
- {
- "x": 10.0,
- "y": 260.0
- },
- {
- "x": 10.0,
- "y": 315.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "R4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "R"
- },
- "path": [
- {
- "x": 20.0,
- "y": 300.0
- },
- {
- "x": 20.0,
- "y": 415.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S"
- },
- "path": [
- {
- "x": 15.0,
- "y": 340.0
- },
- {
- "x": 15.0,
- "y": 135.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S2"
- },
- "pin2": {
- "compId": 3,
- "pinName": "S"
- },
- "path": [
- {
- "x": 5.0,
- "y": 380.0
- },
- {
- "x": 5.0,
- "y": 235.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "S"
- },
- "path": [
- {
- "x": 10.0,
- "y": 420.0
- },
- {
- "x": 10.0,
- "y": 335.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "S"
- },
- "path": [
- {
- "x": 10.0,
- "y": 460.0
- },
- {
- "x": 10.0,
- "y": 435.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Cn"
- },
- "pin2": {
- "compId": 2,
- "pinName": "Cin"
- },
- "path": [
- {
- "x": 5.0,
- "y": 140.0
- },
- {
- "x": 5.0,
- "y": 85.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Cout"
- },
- "pin2": {
- "compId": 3,
- "pinName": "Cin"
- },
- "path": [
- {
- "x": 85.0,
- "y": 85.0
- },
- {
- "x": 85.0,
- "y": 175.0
- },
- {
- "x": 40.0,
- "y": 175.0
- },
- {
- "x": 40.0,
- "y": 185.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Cout"
- },
- "pin2": {
- "compId": 4,
- "pinName": "Cin"
- },
- "path": [
- {
- "x": 85.0,
- "y": 185.0
- },
- {
- "x": 85.0,
- "y": 275.0
- },
- {
- "x": 40.0,
- "y": 275.0
- },
- {
- "x": 40.0,
- "y": 285.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Cout"
- },
- "pin2": {
- "compId": 25,
- "pinName": ""
- },
- "path": [
- {
- "x": 85.0,
- "y": 285.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "Cin"
- },
- "path": [
- {
- "x": 40.0,
- "y": 375.0
- },
- {
- "x": 40.0,
- "y": 385.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Cout"
- },
- "pin2": {
- "compId": 26,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "F"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F1"
- },
- "path": [
- {
- "x": 90.0,
- "y": 95.0
- },
- {
- "x": 90.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "F"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F2"
- },
- "path": [
- {
- "x": 95.0,
- "y": 195.0
- },
- {
- "x": 95.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "F"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F3"
- },
- "path": [
- {
- "x": 100.0,
- "y": 295.0
- },
- {
- "x": 100.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "F"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F4"
- },
- "path": [
- {
- "x": 105.0,
- "y": 395.0
- },
- {
- "x": 105.0,
- "y": 140.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 90.0,
- "y": 375.0
- },
- {
- "x": 90.0,
- "y": 405.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 85.0,
- "y": 415.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "Cn+4"
- },
- "path": [
- {
- "x": 130.0,
- "y": 385.0
- },
- {
- "x": 130.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "OVR"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901ALUInclDecode",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 230.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 195.0
- },
- "name": "Q1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 205.0
- },
- "name": "Q2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 215.0
- },
- "name": "Q3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 225.0
- },
- "name": "Q4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "I0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "I1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "I2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "OVR",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "Cn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I5",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 115.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 125.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 135.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 145.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "Cn+4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "F1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "F2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "F3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "F4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "D3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 155.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 105.0
- },
- "name": "D4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 165.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 175.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 185.0
- },
- "name": "B4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.25,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 165.0
- },
- "id": "GUIAm2901SourceDecode"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 365.0
- },
- "id": "GUIsel2_4"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 575.0
- },
- "id": "GUIsel3_4"
- },
- {
- "pos": {
- "x": 60.0,
- "y": 15.0
- },
- "id": "GUIAm2901ALUInclDecode"
- },
- {
- "pos": {
- "x": 9.0,
- "y": 459.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 499.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 19.0,
- "y": 539.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 579.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I5"
- },
- "pin2": {
- "compId": 4,
- "pinName": "I5"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "I4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 60.0
- },
- {
- "x": 5.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "I3"
- },
- "path": [
- {
- "x": 15.0,
- "y": 100.0
- },
- {
- "x": 15.0,
- "y": 40.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I2"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I2"
- },
- "path": [
- {
- "x": 5.0,
- "y": 140.0
- },
- {
- "x": 5.0,
- "y": 170.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 220.0
- },
- {
- "x": 5.0,
- "y": 190.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Cn"
- },
- "pin2": {
- "compId": 4,
- "pinName": "Cn"
- },
- "path": [
- {
- "x": 10.0,
- "y": 260.0
- },
- {
- "x": 10.0,
- "y": 50.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 15.0,
- "y": 300.0
- },
- {
- "x": 15.0,
- "y": 390.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 10.0,
- "y": 340.0
- },
- {
- "x": 10.0,
- "y": 400.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 5.0,
- "y": 380.0
- },
- {
- "x": 5.0,
- "y": 410.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 430.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 15.0,
- "y": 440.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 20.0,
- "y": 450.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 25.0,
- "y": 460.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 610.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 15.0,
- "y": 620.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 20.0,
- "y": 630.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 25.0,
- "y": 640.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 5.0,
- "y": 620.0
- },
- {
- "x": 5.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 5.0,
- "y": 700.0
- },
- {
- "x": 5.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B4"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 10.0,
- "y": 740.0
- },
- {
- "x": 10.0,
- "y": 680.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 3,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 15.0,
- "y": 780.0
- },
- {
- "x": 15.0,
- "y": 690.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 3,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 20.0,
- "y": 820.0
- },
- {
- "x": 20.0,
- "y": 700.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 25.0,
- "y": 860.0
- },
- {
- "x": 25.0,
- "y": 710.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 3,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 30.0,
- "y": 900.0
- },
- {
- "x": 30.0,
- "y": 720.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "SQ"
- },
- "pin2": {
- "compId": 3,
- "pinName": "SC"
- },
- "path": [
- {
- "x": 75.0,
- "y": 170.0
- },
- {
- "x": 75.0,
- "y": 240.0
- },
- {
- "x": 30.0,
- "y": 240.0
- },
- {
- "x": 30.0,
- "y": 600.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "RA"
- },
- "pin2": {
- "compId": 2,
- "pinName": "SB"
- },
- "path": [
- {
- "x": 70.0,
- "y": 180.0
- },
- {
- "x": 70.0,
- "y": 235.0
- },
- {
- "x": 20.0,
- "y": 235.0
- },
- {
- "x": 20.0,
- "y": 380.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "SB"
- },
- "pin2": {
- "compId": 3,
- "pinName": "SB"
- },
- "path": [
- {
- "x": 65.0,
- "y": 190.0
- },
- {
- "x": 65.0,
- "y": 230.0
- },
- {
- "x": 35.0,
- "y": 230.0
- },
- {
- "x": 35.0,
- "y": 590.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "SA"
- },
- "pin2": {
- "compId": 3,
- "pinName": "SA"
- },
- "path": [
- {
- "x": 60.0,
- "y": 200.0
- },
- {
- "x": 60.0,
- "y": 225.0
- },
- {
- "x": 40.0,
- "y": 225.0
- },
- {
- "x": 40.0,
- "y": 580.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "RD"
- },
- "pin2": {
- "compId": 2,
- "pinName": "SA"
- },
- "path": [
- {
- "x": 55.0,
- "y": 210.0
- },
- {
- "x": 55.0,
- "y": 220.0
- },
- {
- "x": 25.0,
- "y": 220.0
- },
- {
- "x": 25.0,
- "y": 370.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 4,
- "pinName": "R1"
- },
- "path": [
- {
- "x": 82.5,
- "y": 370.0
- },
- {
- "x": 82.5,
- "y": 162.5
- },
- {
- "x": 20.0,
- "y": 162.5
- },
- {
- "x": 20.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 4,
- "pinName": "R2"
- },
- "path": [
- {
- "x": 85.0,
- "y": 380.0
- },
- {
- "x": 85.0,
- "y": 160.0
- },
- {
- "x": 22.5,
- "y": 160.0
- },
- {
- "x": 22.5,
- "y": 70.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "R3"
- },
- "path": [
- {
- "x": 87.5,
- "y": 390.0
- },
- {
- "x": 87.5,
- "y": 157.5
- },
- {
- "x": 25.0,
- "y": 157.5
- },
- {
- "x": 25.0,
- "y": 80.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "R4"
- },
- "path": [
- {
- "x": 90.0,
- "y": 400.0
- },
- {
- "x": 90.0,
- "y": 155.0
- },
- {
- "x": 27.5,
- "y": 155.0
- },
- {
- "x": 27.5,
- "y": 90.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 4,
- "pinName": "S1"
- },
- "path": [
- {
- "x": 92.5,
- "y": 580.0
- },
- {
- "x": 92.5,
- "y": 152.5
- },
- {
- "x": 30.0,
- "y": 152.5
- },
- {
- "x": 30.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 4,
- "pinName": "S2"
- },
- "path": [
- {
- "x": 95.0,
- "y": 590.0
- },
- {
- "x": 95.0,
- "y": 150.0
- },
- {
- "x": 32.5,
- "y": 150.0
- },
- {
- "x": 32.5,
- "y": 110.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "S3"
- },
- "path": [
- {
- "x": 97.5,
- "y": 600.0
- },
- {
- "x": 97.5,
- "y": 147.5
- },
- {
- "x": 35.0,
- "y": 147.5
- },
- {
- "x": 35.0,
- "y": 120.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "S4"
- },
- "path": [
- {
- "x": 100.0,
- "y": 610.0
- },
- {
- "x": 100.0,
- "y": 145.0
- },
- {
- "x": 37.5,
- "y": 145.0
- },
- {
- "x": 37.5,
- "y": 130.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "F1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "F2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F2"
- },
- "path": [
- {
- "x": 135.0,
- "y": 30.0
- },
- {
- "x": 135.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "F3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F3"
- },
- "path": [
- {
- "x": 130.0,
- "y": 40.0
- },
- {
- "x": 130.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "F4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F4"
- },
- "path": [
- {
- "x": 125.0,
- "y": 50.0
- },
- {
- "x": 125.0,
- "y": 140.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Cn+4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Cn+4"
- },
- "path": [
- {
- "x": 120.0,
- "y": 60.0
- },
- {
- "x": 120.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "OVR"
- },
- "pin2": {
- "compId": 0,
- "pinName": "OVR"
- },
- "path": [
- {
- "x": 115.0,
- "y": 70.0
- },
- {
- "x": 115.0,
- "y": 220.0
- }
- ]
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 90.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "R",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "S",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "F",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "FN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "Cin",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "SN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Cout",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "RN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "L",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "CinE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "CoutE",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.2,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 20.0
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 10.0,
- "y": 190.0
- },
- "id": "GUIxor"
- },
- {
- "pos": {
- "x": 10.0,
- "y": 290.0
- },
- "id": "GUIxor"
- },
- {
- "pos": {
- "x": 60.0,
- "y": 20.0
- },
- "id": "GUIfulladder"
- },
- {
- "pos": {
- "x": 60.0,
- "y": 55.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 135.0,
- "y": 20.0
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 90.0,
- "y": 70.0
- },
- "id": "GUImux1"
- },
- {
- "pos": {
- "x": 135.0,
- "y": 70.0
- },
- "id": "GUIxor"
- },
- {
- "pos": {
- "x": 49.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 54.0,
- "y": 69.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "Cin"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "CoutE"
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 75.0
- },
- {
- "x": 5.0,
- "y": 10.0
- },
- {
- "x": 130.0,
- "y": 10.0
- },
- {
- "x": 130.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "CinE"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 125.0
- },
- {
- "x": 7.5,
- "y": 35.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "R"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "RN"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "SN"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "FN"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 130.0,
- "y": 375.0
- },
- {
- "x": 130.0,
- "y": 85.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "L"
- },
- "pin2": {
- "compId": 7,
- "pinName": "S0"
- },
- "path": [
- {
- "x": 87.5,
- "y": 425.0
- },
- {
- "x": 87.5,
- "y": 75.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": ""
- },
- "path": [
- {
- "x": 50.0,
- "y": 195.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 50.0,
- "y": 35.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": ""
- },
- "path": [
- {
- "x": 55.0,
- "y": 295.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "C"
- },
- "path": [
- {
- "x": 55.0,
- "y": 45.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 100.0,
- "y": 25.0
- },
- {
- "x": 100.0,
- "y": 65.0
- },
- {
- "x": 85.0,
- "y": 65.0
- },
- {
- "x": 85.0,
- "y": 85.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Z"
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 82.5,
- "y": 65.0
- },
- {
- "x": 82.5,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Cout"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901ALUOneBit",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 60.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "LSH",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "NSH",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "RSH",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I6",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "YF",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I7",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "RAMWE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "QWE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I8",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.25,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 150.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 130.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 80.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 80.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 80.0,
- "y": 145.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 110.0,
- "y": 105.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 115.0,
- "y": 210.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 14.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 64.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 104.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 154.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 54.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 134.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 99.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 104.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 159.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 109.0,
- "y": 214.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I8"
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I7"
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 10.0,
- "y": 55.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I6"
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": [
- {
- "x": 5.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 165.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 5.0
- },
- {
- "x": 40.0,
- "y": 5.0
- },
- {
- "x": 40.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": [
- {
- "x": 40.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 40.0,
- "y": 65.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "NSH"
- },
- "path": [
- {
- "x": 45.0,
- "y": 5.0
- },
- {
- "x": 135.0,
- "y": 5.0
- },
- {
- "x": 135.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 45.0,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 10.0,
- "y": 115.0
- },
- {
- "x": 45.0,
- "y": 115.0
- },
- {
- "x": 45.0,
- "y": 105.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 24,
- "pinName": ""
- },
- "path": [
- {
- "x": 40.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 40.0,
- "y": 145.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 25,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- },
- "path": [
- {
- "x": 75.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 75.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "RAMWE"
- },
- "path": [
- {
- "x": 125.0,
- "y": 60.0
- },
- {
- "x": 125.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 26,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A"
- },
- "path": [
- {
- "x": 75.0,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 27,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "LSH"
- },
- "path": [
- {
- "x": 125.0,
- "y": 140.0
- },
- {
- "x": 125.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A"
- },
- "path": [
- {
- "x": 75.0,
- "y": 150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "RSH"
- },
- "path": [
- {
- "x": 130.0,
- "y": 20.0
- },
- {
- "x": 130.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 75.0,
- "y": 170.0
- },
- {
- "x": 105.0,
- "y": 170.0
- },
- {
- "x": 105.0,
- "y": 120.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": [
- {
- "x": 110.0,
- "y": 155.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "B"
- },
- "path": [
- {
- "x": 110.0,
- "y": 225.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "YF"
- }
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QWE"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901DestDecode",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 60.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "D4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Q1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Q2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Q3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Q4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "WE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "D3",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 5.0,
- "y": 15.0
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 50.0,
- "y": 7.5
- },
- "id": "GUIdff"
- },
- {
- "pos": {
- "x": 50.0,
- "y": 32.5
- },
- "id": "GUIdff"
- },
- {
- "pos": {
- "x": 50.0,
- "y": 57.5
- },
- "id": "GUIdff"
- },
- {
- "pos": {
- "x": 50.0,
- "y": 82.5
- },
- "id": "GUIdff"
- },
- {
- "pos": {
- "x": 41.5,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 41.5,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 41.5,
- "y": 61.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "WE"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "C"
- },
- "path": [
- {
- "x": 42.5,
- "y": 12.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "C"
- },
- "path": [
- {
- "x": 42.5,
- "y": 87.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "D"
- },
- "path": [
- {
- "x": 17.5,
- "y": 62.5
- },
- {
- "x": 17.5,
- "y": 42.5
- },
- {
- "x": 45.0,
- "y": 42.5
- },
- {
- "x": 45.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 3,
- "pinName": "D"
- },
- "path": [
- {
- "x": 22.5,
- "y": 87.5
- },
- {
- "x": 22.5,
- "y": 47.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "D"
- },
- "path": [
- {
- "x": 27.5,
- "y": 112.5
- },
- {
- "x": 27.5,
- "y": 72.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "D"
- },
- "path": [
- {
- "x": 32.5,
- "y": 137.5
- },
- {
- "x": 32.5,
- "y": 97.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901QReg",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 50.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "RD",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "SQ",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "SA",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "RA",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "SB",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.25,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 10.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 10.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 130.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 170.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 70.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 70.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 70.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 70.0,
- "y": 130.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 70.0,
- "y": 170.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 100.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 100.0,
- "y": 170.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 144.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 99.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 104.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 54.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 64.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 134.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 36.5,
- "y": 99.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 99.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 139.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 94.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 94.0,
- "y": 179.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I2"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 5.0
- },
- {
- "x": 35.0,
- "y": 5.0
- },
- {
- "x": 35.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 195.0
- },
- {
- "x": 65.0,
- "y": 195.0
- },
- {
- "x": 65.0,
- "y": 185.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 55.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 65.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0"
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 112.5
- },
- {
- "x": 32.5,
- "y": 112.5
- },
- {
- "x": 32.5,
- "y": 105.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": [
- {
- "x": 32.5,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 32.5,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 24,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 25,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": [
- {
- "x": 35.0,
- "y": 175.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 26,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 37.5,
- "y": 35.0
- },
- {
- "x": 65.0,
- "y": 35.0
- },
- {
- "x": 65.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 37.5,
- "y": 185.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 27,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A"
- },
- "path": [
- {
- "x": 65.0,
- "y": 55.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 65.0,
- "y": 65.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A"
- },
- "path": [
- {
- "x": 65.0,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": [
- {
- "x": 65.0,
- "y": 105.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A"
- },
- "path": [
- {
- "x": 65.0,
- "y": 135.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 65.0,
- "y": 145.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 13,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 30,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "A"
- },
- "path": [
- {
- "x": 95.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "B"
- },
- "path": [
- {
- "x": 95.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "RA"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "SB"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "SA"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 31,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "A"
- },
- "path": [
- {
- "x": 95.0,
- "y": 175.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "B"
- },
- "path": [
- {
- "x": 95.0,
- "y": 185.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "SQ"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "RD"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "Am2901SourceDecode",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.examples;
-
-import java.io.IOException;
-import java.util.function.Function;
-
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUI_rsLatch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand41;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIandor414;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdemux2;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdff;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdlatch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdlatch4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIfulladder;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUImux1;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUImux1_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUInand3;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUInot4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIor4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIor_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIram2;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIram4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIsel2_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIsel3_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIxor;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901ALUFuncDecode;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901ALUInclDecode;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901ALUInclSourceDecodeInclFunctionDecode;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901ALUOneBit;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901DestDecode;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901QReg;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901SourceDecode;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-public class ComponenetSerializer
-{
- public static void main(String[] args) throws IOException
- {
- // we know we only use components where this works
- Function<GUIComponent, String> getIdentifier = c -> c.getClass().getSimpleName();
-
- ViewModelModifiable model = new ViewModelModifiable();
- SubmodelComponent[] components = { new GUIAm2901(model), new GUIAm2901ALUFuncDecode(model), new GUIAm2901ALUInclDecode(model),
- new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(model), new GUIAm2901ALUOneBit(model), new GUIAm2901DestDecode(model),
- new GUIAm2901QReg(model), new GUIAm2901SourceDecode(model), new GUI_rsLatch(model), new GUIand(model), new GUIand41(model),
- new GUIandor414(model), new GUIdemux2(model), new GUIdff(model), new GUIdlatch(model), new GUIdlatch4(model),
- new GUIfulladder(model), new GUIhalfadder(model), new GUImux1(model), new GUImux1_4(model), new GUInand3(model),
- new GUInot4(model), new GUIor4(model), new GUIor_4(model), new GUIram2(model), new GUIram4(model), new GUIsel2_4(model),
- new GUIsel3_4(model), new GUIxor(model) };
-
- for (SubmodelComponent comp : components)
- {
- SubmodelComponentParams params = comp.calculateParams(getIdentifier);
- JsonHandler.writeJson(params, "components/"
- + comp.getClass().getName().substring("net.mograsim.logic.ui.model.components.mi.nandbased.".length()).replace('.', '/')
- + ".json");
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.examples;
-
-import java.io.IOException;
-
-import com.google.gson.JsonNull;
-
-import net.mograsim.logic.ui.SimpleLogicUIStandalone;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUI_rsLatch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIfulladder;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIhalfadder;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-import net.mograsim.logic.ui.serializing.SubmodelComponentDeserializer;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-public class JsonExample
-{
- public static void main(String[] args)
- {
- SimpleLogicUIStandalone.executeVisualisation(JsonExample::basicTest);
- }
-
- public static void mappingTest(ViewModelModifiable model)
- {
- IndirectGUIComponentCreator.createComponent(model, "Am2901", JsonNull.INSTANCE);
- }
-
- private static class TestComponent extends SimpleRectangularSubmodelComponent
- {
- protected TestComponent(ViewModelModifiable model)
- {
- super(model, 1, "Test");
- setSubmodelScale(.4);
- setInputPins("Input pin #0");
- SubmodelComponentDeserializer.create(submodelModifiable, "HalfAdder.json");
- }
- }
-
- @SuppressWarnings("unused") // GUIWires being created
- private static void basicTest(ViewModelModifiable viewModel)
- {
- GUI_rsLatch comp = new GUI_rsLatch(viewModel);
- comp.moveTo(30, 0);
- SubmodelComponentParams params = comp.calculateParams();
- String jsonString = JsonHandler.toJson(params);
- System.out.println(jsonString);
- SubmodelComponentParams paramsD = JsonHandler.fromJson(jsonString, SubmodelComponentParams.class);
- SubmodelComponent componentD = SubmodelComponentDeserializer.create(viewModel, paramsD);
- componentD.moveTo(30, 50);
- double h = 0;
- for (String s : comp.getInputPinNames())
- {
- GUIManualSwitch sw = new GUIManualSwitch(viewModel);
- sw.moveTo(0, h);
- new GUIWire(viewModel, sw.getOutputPin(), comp.getPin(s));
- sw = new GUIManualSwitch(viewModel);
- sw.moveTo(0, h + 50);
- new GUIWire(viewModel, sw.getOutputPin(), componentD.getPin(s));
- h += 20;
- }
- h = 0;
- for (String s : comp.getOutputPinNames())
- {
- GUIBitDisplay bd = new GUIBitDisplay(viewModel);
- bd.moveTo(80, h);
- new GUIWire(viewModel, bd.getInputPin(), comp.getPin(s));
- bd = new GUIBitDisplay(viewModel);
- bd.moveTo(80, h + 50);
- new GUIWire(viewModel, bd.getInputPin(), componentD.getPin(s));
- h += 20;
- }
- }
-
- // Execute only after HalfAdder.json has been created
- public static void refJsonFromJsonTest(ViewModelModifiable model)
- {
- TestComponent t = new TestComponent(model);
- t.calculateParams().writeJson("Test.json");
- SubmodelComponent c = SubmodelComponentDeserializer.create(model, "Test.json");
- c.moveTo(0, 50);
- }
-
- public static void createHalfAdderExample(ViewModelModifiable model)
- {
- GUIhalfadder tmp = new GUIhalfadder(model);
- tmp.moveTo(1000, 50);
- SubmodelComponentParams p = tmp.calculateParams();
- try
- {
- p.writeJson("HalfAdder.json");
- p = SubmodelComponentParams.readJson("HalfAdder.json");
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
-
- SubmodelComponentDeserializer.create(model, p);
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- public static void createFromJsonExample(ViewModelModifiable model)
- {
- SimpleRectangularSubmodelComponent tmp = new GUIfulladder(model);
- SubmodelComponentParams pC = tmp.calculateParams();
- tmp.moveTo(1000, 100);
- try
- {
- pC.writeJson("FullAdder.json");
- pC = SubmodelComponentParams.readJson("FullAdder.json");
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
-
- SimpleRectangularSubmodelComponent adder = (SimpleRectangularSubmodelComponent) SubmodelComponentDeserializer.create(model,
- "FullAdder.json");
-
- GUIManualSwitch swA = new GUIManualSwitch(model);
- swA.moveTo(0, 0);
- GUIManualSwitch swB = new GUIManualSwitch(model);
- swB.moveTo(0, 25);
- GUIManualSwitch swC = new GUIManualSwitch(model);
- swC.moveTo(0, 50);
-
- adder.moveTo(30, 10);
- GUIBitDisplay bdY = new GUIBitDisplay(model);
- bdY.moveTo(90, 12.5);
- GUIBitDisplay bdZ = new GUIBitDisplay(model);
- bdZ.moveTo(90, 30);
-
- new GUIWire(model, swA.getOutputPin(), adder.getPin("A"));
- new GUIWire(model, swB.getOutputPin(), adder.getPin("B"));
- new GUIWire(model, swC.getOutputPin(), adder.getPin("C"));
-
- new GUIWire(model, adder.getPin("Y"), bdY.getInputPin());
- new GUIWire(model, adder.getPin("Z"), bdZ.getInputPin());
-
- SubmodelComponent adder2 = SubmodelComponentDeserializer.create(model, pC);
-
- swA = new GUIManualSwitch(model);
- swA.moveTo(0, 70);
- swB = new GUIManualSwitch(model);
- swB.moveTo(0, 85);
- swC = new GUIManualSwitch(model);
- swC.moveTo(0, 100);
-
- adder2.moveTo(30, 80);
- bdY = new GUIBitDisplay(model);
- bdY.moveTo(90, 70);
- bdZ = new GUIBitDisplay(model);
- bdZ.moveTo(90, 85);
-
- new GUIWire(model, swA.getOutputPin(), adder2.getPin("A"));
- new GUIWire(model, swB.getOutputPin(), adder2.getPin("B"));
- new GUIWire(model, swC.getOutputPin(), adder2.getPin("C"));
-
- new GUIWire(model, adder2.getPin("Y"), bdY.getInputPin());
- new GUIWire(model, adder2.getPin("Z"), bdZ.getInputPin());
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.examples;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.mograsim.logic.ui.SimpleLogicUIStandalone;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.SubmodelComponentDeserializer;
-
-public class SubmodelComponentTestbench
-{
- public static void main(String[] args)
- {
- SimpleLogicUIStandalone.executeVisualisation(SubmodelComponentTestbench::createTestbench);
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- public static void createTestbench(ViewModelModifiable model)
- {
- SubmodelComponent comp = SubmodelComponentDeserializer.create(model, "components/am2901/GUIAm2901.json");
-
- // guess which pins are outputs and which are inputs
- List<String> inputPinNames = new ArrayList<>();
- List<String> outputPinNames = new ArrayList<>();
- for (Pin p : comp.getPins().values())
- if (p.getRelX() == 0)
- inputPinNames.add(p.name);
- else
- outputPinNames.add(p.name);
-
- comp.moveTo(100, 0);
- for (int i = 0; i < inputPinNames.size(); i++)
- {
- GUIManualSwitch sw = new GUIManualSwitch(model);
- sw.moveTo(0, 20 * i);
- new GUIWire(model, comp.getPin(inputPinNames.get(i)), sw.getOutputPin());
- }
- for (int i = 0; i < outputPinNames.size(); i++)
- {
- GUIBitDisplay bd = new GUIBitDisplay(model);
- bd.moveTo(200, 20 * i);
- new GUIWire(model, comp.getPin(outputPinNames.get(i)), bd.getInputPin());
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUI_rsLatch extends SimpleRectangularSubmodelComponent
-{
- private GUIWire wireQ, wire_Q;
-
- public GUI_rsLatch(ViewModelModifiable model)
- {
- super(model, 1, "_rsLatch");
- setSubmodelScale(.4);
- setInputPins("_S", "_R");
- setOutputPins("Q", "_Q");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin _S = getSubmodelPin("_S");
- Pin _R = getSubmodelPin("_R");
- Pin Q = getSubmodelPin("Q");
- Pin _Q = getSubmodelPin("_Q");
-
- GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
-
- nand1.moveTo(10, 7.5);
- nand2.moveTo(40, 12.5);
- cp1.moveCenterTo(35, 17.5);
- cp2.moveCenterTo(65, 37.5);
-
- new GUIWire(submodelModifiable, _S, nand1.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, _R, nand2.getPin("B"), new Point(35, 37.5), new Point(35, 27.5));
- new GUIWire(submodelModifiable, nand1.getPin("Y"), cp1, new Point[0]);
- new GUIWire(submodelModifiable, nand2.getPin("Y"), cp2, new Point(65, 22.5));
- new GUIWire(submodelModifiable, cp1, nand2.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, cp2, nand1.getPin("B"), new Point(65, 42.5), new Point(5, 42.5), new Point(5, 22.5));
- wireQ = new GUIWire(submodelModifiable, cp1, Q, new Point(35, 17.5), new Point(35, 7.5), new Point(65, 7.5), new Point(65, 12.5));
- wire_Q = new GUIWire(submodelModifiable, cp2, _Q, new Point[0]);
-
- addAtomicHighLevelStateID("q");
- }
-
- @Override
- public void setAtomicHighLevelState(String stateID, Object newState)
- {
- switch (stateID)
- {
- case "q":
- if (wireQ != null)
- {
- // TODO force this to happen without any Timeline updates in the meantime.
- // Maybe make it a requirement of setHighLevelState that the Timeline is "halted" during a call?
- Bit newStateCasted = (Bit) newState;
- BitVector newStateVector = BitVector.of(newStateCasted);
- if (wireQ.hasLogicModelBinding())
- wireQ.forceWireValues(newStateVector);
- // We set both wires because then both outputs go to their correct state at the same time, and to avoid problems when not
- // both
- // inputs are 1
- if (wire_Q.hasLogicModelBinding())
- wire_Q.forceWireValues(newStateVector.not());
- }
- break;
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- @Override
- public Object getAtomicHighLevelState(String stateID)
- {
- switch (stateID)
- {
- case "q":
- if (wireQ.hasLogicModelBinding())
- return wireQ.getWireValues().getBit(0);
- return null;
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUI_rsLatch.class.getCanonicalName(), (m, p) -> new GUI_rsLatch(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIand extends SimpleRectangularSubmodelComponent
-{
- public GUIand(ViewModelModifiable model)
- {
- super(model, 1, "GUIand");
- setSubmodelScale(.4);
- setInputPins("A", "B");
- setOutputPins("Y");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin A = getSubmodelPin("A");
- Pin B = getSubmodelPin("B");
- Pin Y = getSubmodelPin("Y");
-
- GUINandGate nand = new GUINandGate(submodelModifiable, 1);
- GUINandGate not = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
-
- nand.moveTo(20, 15);
- not.moveTo(50, 15);
- cp1.moveCenterTo(45, 25);
-
- new GUIWire(submodelModifiable, A, nand.getPin("A"));
- new GUIWire(submodelModifiable, B, nand.getPin("B"));
- new GUIWire(submodelModifiable, nand.getPin("Y"), cp1, new Point[0]);
- new GUIWire(submodelModifiable, cp1, not.getPin("A"), new Point(45, 20));
- new GUIWire(submodelModifiable, cp1, not.getPin("B"), new Point(45, 30));
- new GUIWire(submodelModifiable, not.getPin("Y"), Y);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIand.class.getCanonicalName(), (m, p) -> new GUIand(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIand41 extends SimpleRectangularSubmodelComponent
-{
- public GUIand41(ViewModelModifiable model)
- {
- super(model, 1, "GUIand41");
- setSubmodelScale(.4);
- setInputPins("A1", "A2", "A3", "A4", "B");
- setOutputPins("Y1", "Y2", "Y3", "Y4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin A1 = getSubmodelPin("A1");
- Pin A2 = getSubmodelPin("A2");
- Pin A3 = getSubmodelPin("A3");
- Pin A4 = getSubmodelPin("A4");
- Pin B = getSubmodelPin("B");
- Pin Y1 = getSubmodelPin("Y1");
- Pin Y2 = getSubmodelPin("Y2");
- Pin Y3 = getSubmodelPin("Y3");
- Pin Y4 = getSubmodelPin("Y4");
-
- GUIand and1 = new GUIand(submodelModifiable);
- GUIand and2 = new GUIand(submodelModifiable);
- GUIand and3 = new GUIand(submodelModifiable);
- GUIand and4 = new GUIand(submodelModifiable);
-
- WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB4 = new WireCrossPoint(submodelModifiable, 1);
-
- and1.moveTo(30, 7.5);
- and2.moveTo(30, 32.5);
- and3.moveTo(30, 57.5);
- and4.moveTo(30, 82.5);
- cpB2.moveCenterTo(25, 47.5);
- cpB3.moveCenterTo(25, 72.5);
- cpB4.moveCenterTo(25, 97.5);
-
- new GUIWire(submodelModifiable, A1, and1.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, A2, and2.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, A3, and3.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, A4, and4.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, B, cpB4, new Point(25, 112.5));
- new GUIWire(submodelModifiable, cpB4, and4.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpB4, cpB3, new Point[0]);
- new GUIWire(submodelModifiable, cpB3, and3.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpB3, cpB2, new Point[0]);
- new GUIWire(submodelModifiable, cpB2, and2.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpB2, and1.getPin("B"), new Point(25, 22.5));
- new GUIWire(submodelModifiable, and1.getPin("Y"), Y1, new Point[0]);
- new GUIWire(submodelModifiable, and2.getPin("Y"), Y2, new Point[0]);
- new GUIWire(submodelModifiable, and3.getPin("Y"), Y3, new Point[0]);
- new GUIWire(submodelModifiable, and4.getPin("Y"), Y4, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIand41.class.getCanonicalName(), (m, p) -> new GUIand41(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIandor414 extends SimpleRectangularSubmodelComponent
-{
- public GUIandor414(ViewModelModifiable model)
- {
- super(model, 1, "GUIandor414");
- setSubmodelScale(.4);
- setInputPins("C1", "C2", "C3", "C4", "A1", "A2", "A3", "A4", "B");
- setOutputPins("Y1", "Y2", "Y3", "Y4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin C1 = getSubmodelPin("C1");
- Pin C2 = getSubmodelPin("C2");
- Pin C3 = getSubmodelPin("C3");
- Pin C4 = getSubmodelPin("C4");
- Pin A1 = getSubmodelPin("A1");
- Pin A2 = getSubmodelPin("A2");
- Pin A3 = getSubmodelPin("A3");
- Pin A4 = getSubmodelPin("A4");
- Pin B = getSubmodelPin("B");
- Pin Y1 = getSubmodelPin("Y1");
- Pin Y2 = getSubmodelPin("Y2");
- Pin Y3 = getSubmodelPin("Y3");
- Pin Y4 = getSubmodelPin("Y4");
-
- GUIand41 and = new GUIand41(submodelModifiable);
- GUIor_4 or = new GUIor_4(submodelModifiable);
-
- and.moveTo(15, 137.5);
- or.moveTo(35, 37.5);
-
- new GUIWire(submodelModifiable, A1, and.getPin("A1"), new Point(10, 112.5), new Point(10, 142.5));
- new GUIWire(submodelModifiable, A2, and.getPin("A2"), new Point(5, 137.5), new Point(5, 152.5));
- new GUIWire(submodelModifiable, A3, and.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, A4, and.getPin("A4"), new Point(5, 187.5), new Point(5, 172.5));
- new GUIWire(submodelModifiable, B, and.getPin("B"), new Point(10, 212.5), new Point(10, 182.5));
- new GUIWire(submodelModifiable, C1, or.getPin("A1"), new Point(10, 12.5), new Point(10, 42.5));
- new GUIWire(submodelModifiable, C2, or.getPin("A2"), new Point(5, 37.5), new Point(5, 52.5));
- new GUIWire(submodelModifiable, C3, or.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, C4, or.getPin("A4"), new Point(5, 87.5), new Point(5, 72.5));
- new GUIWire(submodelModifiable, and.getPin("Y1"), or.getPin("B1"), new Point(70, 142.5), new Point(70, 120), new Point(30, 120),
- new Point(30, 82.5));
- new GUIWire(submodelModifiable, and.getPin("Y2"), or.getPin("B2"), new Point(65, 152.5), new Point(65, 125), new Point(25, 125),
- new Point(25, 92.5));
- new GUIWire(submodelModifiable, and.getPin("Y3"), or.getPin("B3"), new Point(60, 162.5), new Point(60, 130), new Point(20, 130),
- new Point(20, 102.5));
- new GUIWire(submodelModifiable, and.getPin("Y4"), or.getPin("B4"), new Point(55, 172.5), new Point(55, 135), new Point(15, 135),
- new Point(15, 112.5));
- new GUIWire(submodelModifiable, or.getPin("Y1"), Y1, new Point(75, 42.5), new Point(75, 12.5));
- new GUIWire(submodelModifiable, or.getPin("Y2"), Y2, new Point(80, 52.5), new Point(80, 37.5));
- new GUIWire(submodelModifiable, or.getPin("Y3"), Y3, new Point[0]);
- new GUIWire(submodelModifiable, or.getPin("Y4"), Y4, new Point(80, 72.5), new Point(80, 87.5));
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIandor414.class.getCanonicalName(), (m, p) -> new GUIandor414(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIdemux2 extends SimpleRectangularSubmodelComponent
-{
- public GUIdemux2(ViewModelModifiable model)
- {
- super(model, 1, "GUIdemux2");
- setSubmodelScale(.4);
- setInputPins("S0", "S1");
- setOutputPins("Y00", "Y01", "Y10", "Y11");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin S0 = getSubmodelPin("S0");
- Pin S1 = getSubmodelPin("S1");
- Pin Y00 = getSubmodelPin("Y00");
- Pin Y01 = getSubmodelPin("Y01");
- Pin Y10 = getSubmodelPin("Y10");
- Pin Y11 = getSubmodelPin("Y11");
-
- GUINandGate notS0 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notS1 = new GUINandGate(submodelModifiable, 1);
- GUIand andY00 = new GUIand(submodelModifiable);
- GUIand andY01 = new GUIand(submodelModifiable);
- GUIand andY10 = new GUIand(submodelModifiable);
- GUIand andY11 = new GUIand(submodelModifiable);
-
- WireCrossPoint cpS01 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpS02 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpS03 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpS11 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpS12 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpS13 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotS0 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotS1 = new WireCrossPoint(submodelModifiable, 1);
-
- notS0.moveTo(10, 2.5);
- notS1.moveTo(10, 27.5);
- andY00.moveTo(40, 2.5);
- andY01.moveTo(40, 27.5);
- andY10.moveTo(40, 52.5);
- andY11.moveTo(40, 77.5);
- cpS01.moveCenterTo(7.5, 12.5);
- cpS11.moveCenterTo(5, 37.5);
- cpS02.moveCenterTo(7.5, 17.5);
- cpS12.moveCenterTo(5, 42.5);
- cpS03.moveCenterTo(37.5, 62.5);
- cpS13.moveCenterTo(32.5, 67.5);
- cpNotS0.moveCenterTo(32.5, 12.5);
- cpNotS1.moveCenterTo(35, 37.5);
-
- new GUIWire(submodelModifiable, S0, cpS01, new Point[0]);
- new GUIWire(submodelModifiable, S1, cpS11, new Point[0]);
- new GUIWire(submodelModifiable, cpS01, notS0.getPin("A"), new Point(7.5, 7.5));
- new GUIWire(submodelModifiable, cpS11, notS1.getPin("A"), new Point(5, 32.5));
- new GUIWire(submodelModifiable, cpS01, cpS02, new Point[0]);
- new GUIWire(submodelModifiable, cpS11, cpS12, new Point[0]);
- new GUIWire(submodelModifiable, cpS02, notS0.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpS12, notS1.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpS02, cpS03, new Point(7.5, 62.5));
- new GUIWire(submodelModifiable, cpS12, cpS13, new Point(5, 67.5), new Point(32.5, 67.5));
- new GUIWire(submodelModifiable, notS0.getPin("Y"), cpNotS0, new Point[0]);
- new GUIWire(submodelModifiable, notS1.getPin("Y"), cpNotS1, new Point[0]);
- new GUIWire(submodelModifiable, cpNotS0, andY00.getPin("A"), new Point(32.5, 7.5));
- new GUIWire(submodelModifiable, cpNotS1, andY00.getPin("B"), new Point(35, 17.5));
- new GUIWire(submodelModifiable, cpS03, andY01.getPin("A"), new Point(37.5, 32.5));
- new GUIWire(submodelModifiable, cpNotS1, andY01.getPin("B"), new Point(35, 42.5));
- new GUIWire(submodelModifiable, cpNotS0, andY10.getPin("A"), new Point(32.5, 57.5));
- new GUIWire(submodelModifiable, cpS13, andY10.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpS03, andY11.getPin("A"), new Point(37.5, 82.5));
- new GUIWire(submodelModifiable, cpS13, andY11.getPin("B"), new Point(32.5, 92.5));
- new GUIWire(submodelModifiable, andY00.getPin("Y"), Y00);
- new GUIWire(submodelModifiable, andY01.getPin("Y"), Y01);
- new GUIWire(submodelModifiable, andY10.getPin("Y"), Y10);
- new GUIWire(submodelModifiable, andY11.getPin("Y"), Y11);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIdemux2.class.getCanonicalName(), (m, p) -> new GUIdemux2(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIdff extends SimpleRectangularSubmodelComponent
-{
- private GUI_rsLatch _rsLatch;
-
- public GUIdff(ViewModelModifiable model)
- {
- super(model, 1, "GUIdff");
- setSubmodelScale(.2);
- setInputPins("C", "D");
- setOutputPins("Q", "_Q");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin C = getSubmodelPin("C");
- Pin D = getSubmodelPin("D");
- Pin Q = getSubmodelPin("Q");
- Pin _Q = getSubmodelPin("_Q");
-
- GUI_rsLatch _rsLatch1 = new GUI_rsLatch(submodelModifiable);
- GUInand3 nand3 = new GUInand3(submodelModifiable);
- GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
- GUI_rsLatch _rsLatch2 = this._rsLatch = new GUI_rsLatch(submodelModifiable);
-
- WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
-
- _rsLatch1.moveTo(40, 10);
- nand3.moveTo(40, 40);
- nand2.moveTo(120, 60);
- _rsLatch2.moveTo(120, 30);
- cp1.moveCenterTo(10, 25);
- cp2.moveCenterTo(20, 65);
- cp3.moveCenterTo(100, 35);
- cp4.moveCenterTo(100, 45);
-
- new GUIWire(submodelModifiable, C, cp1, new Point[0]);
- new GUIWire(submodelModifiable, cp1, _rsLatch1.getPin("_R"), new Point[0]);
- new GUIWire(submodelModifiable, cp1, nand3.getPin("B"), new Point(10, 55));
- new GUIWire(submodelModifiable, D, nand2.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, nand2.getPin("Y"), cp2, new Point(145, 70), new Point(145, 85), new Point(20, 85));
- new GUIWire(submodelModifiable, cp2, _rsLatch1.getPin("_S"), new Point(20, 15));
- new GUIWire(submodelModifiable, cp2, nand3.getPin("C"), new Point[0]);
- new GUIWire(submodelModifiable, _rsLatch1.getPin("_Q"), cp3, new Point(100, 25));
- new GUIWire(submodelModifiable, cp3, nand3.getPin("A"), new Point(30, 35), new Point(30, 45));
- new GUIWire(submodelModifiable, cp3, _rsLatch2.getPin("_S"), new Point[0]);
- new GUIWire(submodelModifiable, nand3.getPin("Y"), cp4, new Point[0]);
- new GUIWire(submodelModifiable, cp4, _rsLatch2.getPin("_R"), new Point[0]);
- new GUIWire(submodelModifiable, cp4, nand2.getPin("A"), new Point(100, 65));
- new GUIWire(submodelModifiable, _rsLatch2.getPin("Q"), Q);
- new GUIWire(submodelModifiable, _rsLatch2.getPin("_Q"), _Q);
-
- addAtomicHighLevelStateID("q");
- }
-
- @Override
- public void setAtomicHighLevelState(String stateID, Object newState)
- {
- switch (stateID)
- {
- case "q":
- _rsLatch.setHighLevelState("q", newState);
- break;
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- @Override
- public Object getAtomicHighLevelState(String stateID)
- {
- switch (stateID)
- {
- case "q":
- return _rsLatch.getHighLevelState("q");
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIdff.class.getCanonicalName(), (m, p) -> new GUIdff(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIdlatch extends SimpleRectangularSubmodelComponent
-{
- private GUI_rsLatch _rsLatch;
-
- public GUIdlatch(ViewModelModifiable model)
- {
- super(model, 1, "GUIdlatch");
- setSubmodelScale(.4);
- setInputPins("D", "E");
- setOutputPins("Q", "_Q");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin D = getSubmodelPin("D");
- Pin E = getSubmodelPin("E");
- Pin Q = getSubmodelPin("Q");
- Pin _Q = getSubmodelPin("_Q");
-
- GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
- _rsLatch = new GUI_rsLatch(submodelModifiable);
-
- WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
-
- nand1.moveTo(10, 2.5);
- nand2.moveTo(15, 27.5);
- _rsLatch.moveTo(45, 7.5);
- cp1.moveCenterTo(5, 37.5);
- cp2.moveCenterTo(35, 12.5);
-
- new GUIWire(submodelModifiable, D, nand1.getPin("A"));
- new GUIWire(submodelModifiable, E, cp1, new Point[0]);
- new GUIWire(submodelModifiable, cp1, nand1.getPin("B"), new Point(5, 17.5));
- new GUIWire(submodelModifiable, cp1, nand2.getPin("B"), new Point(5, 42.5));
- new GUIWire(submodelModifiable, nand1.getPin("Y"), cp2, new Point[0]);
- new GUIWire(submodelModifiable, cp2, nand2.getPin("A"), new Point(35, 25), new Point(10, 25), new Point(10, 32.5));
- new GUIWire(submodelModifiable, cp2, _rsLatch.getPin("_S"), new Point[0]);
- new GUIWire(submodelModifiable, nand2.getPin("Y"), _rsLatch.getPin("_R"), new Point(40, 37.5), new Point(40, 22.5));
- new GUIWire(submodelModifiable, _rsLatch.getPin("Q"), Q, new Point[0]);
- new GUIWire(submodelModifiable, _rsLatch.getPin("_Q"), _Q);
-
- addAtomicHighLevelStateID("q");
- }
-
- @Override
- public void setAtomicHighLevelState(String stateID, Object newState)
- {
- switch (stateID)
- {
- case "q":
- _rsLatch.setHighLevelState("q", newState);
- break;
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- @Override
- public Object getAtomicHighLevelState(String stateID)
- {
- switch (stateID)
- {
- case "q":
- return _rsLatch.getHighLevelState("q");
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIdlatch.class.getCanonicalName(), (m, p) -> new GUIdlatch(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIdlatch4 extends SimpleRectangularSubmodelComponent
-{
- private GUIdlatch dlatch1;
- private GUIdlatch dlatch2;
- private GUIdlatch dlatch3;
- private GUIdlatch dlatch4;
-
- public GUIdlatch4(ViewModelModifiable model)
- {
- super(model, 1, "GUIdlatch4");
- setSubmodelScale(.4);
- setInputPins("D1", "D2", "D3", "D4", "C");
- setOutputPins("Q1", "Q2", "Q3", "Q4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin D1 = getSubmodelPin("D1");
- Pin D2 = getSubmodelPin("D2");
- Pin D3 = getSubmodelPin("D3");
- Pin D4 = getSubmodelPin("D4");
- Pin C = getSubmodelPin("C");
- Pin Q1 = getSubmodelPin("Q1");
- Pin Q2 = getSubmodelPin("Q2");
- Pin Q3 = getSubmodelPin("Q3");
- Pin Q4 = getSubmodelPin("Q4");
-
- dlatch1 = new GUIdlatch(submodelModifiable);
- dlatch2 = new GUIdlatch(submodelModifiable);
- dlatch3 = new GUIdlatch(submodelModifiable);
- dlatch4 = new GUIdlatch(submodelModifiable);
-
- WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
-
- dlatch1.moveTo(30, 7.5);
- dlatch2.moveTo(30, 32.5);
- dlatch3.moveTo(30, 57.5);
- dlatch4.moveTo(30, 82.5);
- cp2.moveCenterTo(15, 47.5);
- cp3.moveCenterTo(15, 72.5);
- cp4.moveCenterTo(15, 97.5);
-
- new GUIWire(submodelModifiable, C, cp4, new Point(15, 112.5));
- new GUIWire(submodelModifiable, cp4, dlatch4.getPin("E"), new Point[0]);
- new GUIWire(submodelModifiable, cp4, cp3, new Point[0]);
- new GUIWire(submodelModifiable, cp3, dlatch3.getPin("E"), new Point[0]);
- new GUIWire(submodelModifiable, cp3, cp2, new Point[0]);
- new GUIWire(submodelModifiable, cp2, dlatch2.getPin("E"), new Point[0]);
- new GUIWire(submodelModifiable, cp2, dlatch1.getPin("E"), new Point(15, 22.5));
- new GUIWire(submodelModifiable, D1, dlatch1.getPin("D"), new Point[0]);
- new GUIWire(submodelModifiable, D2, dlatch2.getPin("D"), new Point[0]);
- new GUIWire(submodelModifiable, D3, dlatch3.getPin("D"), new Point[0]);
- new GUIWire(submodelModifiable, D4, dlatch4.getPin("D"), new Point[0]);
- new GUIWire(submodelModifiable, dlatch1.getPin("Q"), Q1, new Point[0]);
- new GUIWire(submodelModifiable, dlatch2.getPin("Q"), Q2, new Point[0]);
- new GUIWire(submodelModifiable, dlatch3.getPin("Q"), Q3, new Point[0]);
- new GUIWire(submodelModifiable, dlatch4.getPin("Q"), Q4, new Point[0]);
-
- addAtomicHighLevelStateID("q1");
- addAtomicHighLevelStateID("q2");
- addAtomicHighLevelStateID("q3");
- addAtomicHighLevelStateID("q4");
- addAtomicHighLevelStateID("q");
- }
-
- @Override
- public void setAtomicHighLevelState(String stateID, Object newState)
- {
- switch (stateID)
- {
- case "q1":
- dlatch1.setHighLevelState("q", newState);
- break;
- case "q2":
- dlatch2.setHighLevelState("q", newState);
- break;
- case "q3":
- dlatch3.setHighLevelState("q", newState);
- break;
- case "q4":
- dlatch4.setHighLevelState("q", newState);
- break;
- case "q":
- BitVector newStateCasted = (BitVector) newState;
- setHighLevelState("q1", newStateCasted.getBit(0));
- setHighLevelState("q2", newStateCasted.getBit(1));
- setHighLevelState("q3", newStateCasted.getBit(2));
- setHighLevelState("q4", newStateCasted.getBit(3));
- break;
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- @Override
- public Object getAtomicHighLevelState(String stateID)
- {
- switch (stateID)
- {
- case "q1":
- return dlatch1.getHighLevelState("q");
- case "q2":
- return dlatch2.getHighLevelState("q");
- case "q3":
- return dlatch3.getHighLevelState("q");
- case "q4":
- return dlatch4.getHighLevelState("q");
- case "q":
- Bit q1 = (Bit) getHighLevelState("q1");
- Bit q2 = (Bit) getHighLevelState("q2");
- Bit q3 = (Bit) getHighLevelState("q3");
- Bit q4 = (Bit) getHighLevelState("q4");
- return BitVector.of(q1, q2, q3, q4);
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIdlatch4.class.getCanonicalName(), (m, p) -> new GUIdlatch4(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIfulladder extends SimpleRectangularSubmodelComponent
-{
- public GUIfulladder(ViewModelModifiable model)
- {
- super(model, 1, "GUIfulladder");
- setSubmodelScale(.4);
- setInputPins("A", "B", "C");
- setOutputPins("Y", "Z");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin A = getSubmodelPin("A");
- Pin B = getSubmodelPin("B");
- Pin C = getSubmodelPin("C");
- Pin Y = getSubmodelPin("Y");
- Pin Z = getSubmodelPin("Z");
-
- GUIhalfadder halfBC = new GUIhalfadder(submodelModifiable);
- GUIhalfadder halfAY = new GUIhalfadder(submodelModifiable);
- GUINandGate nandZ = new GUINandGate(submodelModifiable, 1);
-
- halfAY.moveTo(45, 7.5);
- halfBC.moveTo(5, 40);
- nandZ.moveTo(57.5, 40);
-
- new GUIWire(submodelModifiable, A, halfAY.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, B, halfBC.getPin("A"));
- new GUIWire(submodelModifiable, C, halfBC.getPin("B"));
- new GUIWire(submodelModifiable, halfBC.getPin("Y"), halfAY.getPin("B"));
- new GUIWire(submodelModifiable, halfBC.getPin("_Z"), nandZ.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, halfAY.getPin("Y"), Y, new Point[0]);
- new GUIWire(submodelModifiable, halfAY.getPin("_Z"), nandZ.getPin("A"), new Point(82.5, 22.5), new Point(82.5, 35),
- new Point(52.5, 35), new Point(52.5, 45));
- new GUIWire(submodelModifiable, nandZ.getPin("Y"), Z);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIfulladder.class.getCanonicalName(), (m, p) -> new GUIfulladder(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIhalfadder extends SimpleRectangularSubmodelComponent
-{
- public GUIhalfadder(ViewModelModifiable model)
- {
- super(model, 1, "GUIhalfadder");
- setSubmodelScale(.4);
- setInputPins("A", "B");
- setOutputPins("Y", "_Z");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin A = getSubmodelPin("A");
- Pin B = getSubmodelPin("B");
- Pin Y = getSubmodelPin("Y");
- Pin _Z = getSubmodelPin("_Z");
-
- GUINandGate nand_Z = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandYA = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandYB = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cpA = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp_Z = new WireCrossPoint(submodelModifiable, 1);
-
- nand_Z.moveTo(10, 15);
- nandYA.moveTo(40, 2.5);
- nandYB.moveTo(40, 27.5);
- nandY.moveTo(65, 2.5);
- cpA.moveCenterTo(5, 12.5);
- cpB.moveCenterTo(5, 37.5);
- cp_Z.moveCenterTo(35, 25);
-
- new GUIWire(submodelModifiable, A, cpA, new Point[0]);
- new GUIWire(submodelModifiable, cpA, nandYA.getPin("A"), new Point(5, 7.5));
- new GUIWire(submodelModifiable, cpA, nand_Z.getPin("A"), new Point(5, 20));
- new GUIWire(submodelModifiable, B, cpB, new Point[0]);
- new GUIWire(submodelModifiable, cpB, nandYB.getPin("B"), new Point(5, 42.5));
- new GUIWire(submodelModifiable, cpB, nand_Z.getPin("B"), new Point(5, 30));
- new GUIWire(submodelModifiable, nand_Z.getPin("Y"), cp_Z, new Point[0]);
- new GUIWire(submodelModifiable, cp_Z, _Z, new Point(80, 25), new Point(80, 37.5));
- new GUIWire(submodelModifiable, cp_Z, nandYA.getPin("B"), new Point(35, 17.5));
- new GUIWire(submodelModifiable, cp_Z, nandYB.getPin("A"), new Point(35, 32.5));
- new GUIWire(submodelModifiable, nandYA.getPin("Y"), nandY.getPin("A"), new Point(62.5, 12.5), new Point(62.5, 7.5));
- new GUIWire(submodelModifiable, nandYB.getPin("Y"), nandY.getPin("B"), new Point(62.5, 37.5), new Point(62.5, 17.5));
- new GUIWire(submodelModifiable, nandY.getPin("Y"), Y, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIhalfadder.class.getCanonicalName(), (m, p) -> new GUIhalfadder(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUImux1 extends SimpleRectangularSubmodelComponent
-{
- public GUImux1(ViewModelModifiable model)
- {
- super(model, 1, "GUImux1");
- setSubmodelScale(.4);
- setInputPins("S0", "I0", "I1");
- setOutputPins("Y");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused")
- private void initSubmodelComponents()
- {
- Pin S0 = getSubmodelPin("S0");
- Pin I0 = getSubmodelPin("I0");
- Pin I1 = getSubmodelPin("I1");
- Pin Y = getSubmodelPin("Y");
-
- GUINandGate nandS0 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandI0 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandI1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cp0 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
-
- nandS0.moveTo(10, 7.5);
- nandI0.moveTo(35, 22.5);
- nandI1.moveTo(35, 47.5);
- nandY.moveTo(60, 30);
- cp0.moveCenterTo(5, 12.5);
- cp1.moveCenterTo(5, 22.5);
-
- new GUIWire(submodelModifiable, S0, cp0, new Point[0]);
- new GUIWire(submodelModifiable, cp0, nandS0.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, cp0, cp1, new Point[0]);
- new GUIWire(submodelModifiable, cp1, nandS0.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, nandS0.getPin("Y"), nandI0.getPin("A"));
- new GUIWire(submodelModifiable, I0, nandI0.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cp1, nandI1.getPin("A"), new Point(5, 52.5));
- new GUIWire(submodelModifiable, I1, nandI1.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, nandI0.getPin("Y"), nandY.getPin("A"));
- new GUIWire(submodelModifiable, nandI1.getPin("Y"), nandY.getPin("B"));
- new GUIWire(submodelModifiable, nandY.getPin("Y"), Y);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUImux1.class.getCanonicalName(), (m, p) -> new GUImux1(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUImux1_4 extends SimpleRectangularSubmodelComponent
-{
- public GUImux1_4(ViewModelModifiable model)
- {
- super(model, 1, "GUImux1_4");
- setSubmodelScale(.4);
- setInputPins("S0", "I0_1", "I0_2", "I0_3", "I0_4", "I1_1", "I1_2", "I1_3", "I1_4");
- setOutputPins("Y1", "Y2", "Y3", "Y4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused")
- private void initSubmodelComponents()
- {
- Pin S0 = getSubmodelPin("S0");
- Pin I0_1 = getSubmodelPin("I0_1");
- Pin I0_2 = getSubmodelPin("I0_2");
- Pin I0_3 = getSubmodelPin("I0_3");
- Pin I0_4 = getSubmodelPin("I0_4");
- Pin I1_1 = getSubmodelPin("I1_1");
- Pin I1_2 = getSubmodelPin("I1_2");
- Pin I1_3 = getSubmodelPin("I1_3");
- Pin I1_4 = getSubmodelPin("I1_4");
- Pin Y1 = getSubmodelPin("Y1");
- Pin Y2 = getSubmodelPin("Y2");
- Pin Y3 = getSubmodelPin("Y3");
- Pin Y4 = getSubmodelPin("Y4");
-
- GUImux1 mux1 = new GUImux1(submodelModifiable);
- GUImux1 mux2 = new GUImux1(submodelModifiable);
- GUImux1 mux3 = new GUImux1(submodelModifiable);
- GUImux1 mux4 = new GUImux1(submodelModifiable);
-
- WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
-
- mux1.moveTo(30, 7.5);
- mux2.moveTo(30, 42.5);
- mux3.moveTo(30, 77.5);
- mux4.moveTo(30, 112.5);
- cp1.moveCenterTo(25, 12.5);
- cp2.moveCenterTo(25, 47.5);
- cp3.moveCenterTo(25, 82.5);
-
- new GUIWire(submodelModifiable, S0, cp1, new Point[0]);
- new GUIWire(submodelModifiable, cp1, mux1.getPin("S0"), new Point[0]);
- new GUIWire(submodelModifiable, I0_1, mux1.getPin("I0"), new Point(5, 37.5), new Point(5, 22.5));
- new GUIWire(submodelModifiable, I1_1, mux1.getPin("I1"), new Point(10, 137.5), new Point(10, 32.5));
- new GUIWire(submodelModifiable, mux1.getPin("Y"), Y1, new Point[0]);
- new GUIWire(submodelModifiable, cp1, cp2, new Point[0]);
- new GUIWire(submodelModifiable, cp2, mux2.getPin("S0"), new Point[0]);
- new GUIWire(submodelModifiable, I0_2, mux2.getPin("I0"), new Point(5, 62.5), new Point(5, 57.5));
- new GUIWire(submodelModifiable, I1_2, mux2.getPin("I1"), new Point(15, 162.5), new Point(15, 67.5));
- new GUIWire(submodelModifiable, mux2.getPin("Y"), Y2);
- new GUIWire(submodelModifiable, cp2, cp3, new Point[0]);
- new GUIWire(submodelModifiable, cp3, mux3.getPin("S0"), new Point[0]);
- new GUIWire(submodelModifiable, I0_3, mux3.getPin("I0"), new Point(5, 87.5), new Point(5, 92.5));
- new GUIWire(submodelModifiable, I1_3, mux3.getPin("I1"), new Point(20, 187.5), new Point(20, 102.5));
- new GUIWire(submodelModifiable, mux3.getPin("Y"), Y3);
- new GUIWire(submodelModifiable, cp3, mux4.getPin("S0"), new Point(25, 117.5));
- new GUIWire(submodelModifiable, I0_4, mux4.getPin("I0"), new Point(5, 112.5), new Point(5, 127.5));
- new GUIWire(submodelModifiable, I1_4, mux4.getPin("I1"), new Point(25, 212.5), new Point(25, 137.5));
- new GUIWire(submodelModifiable, mux4.getPin("Y"), Y4);
-
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUImux1_4.class.getCanonicalName(), (m, p) -> new GUImux1_4(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUInand3 extends SimpleRectangularSubmodelComponent
-{
- public GUInand3(ViewModelModifiable model)
- {
- super(model, 1, "GUInand3");
- setSubmodelScale(.4);
- setInputPins("A", "B", "C");
- setOutputPins("Y");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin A = getSubmodelPin("A");
- Pin B = getSubmodelPin("B");
- Pin C = getSubmodelPin("C");
- Pin Y = getSubmodelPin("Y");
-
- GUINandGate nandAB = new GUINandGate(submodelModifiable, 1);
- GUINandGate andAB = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandABC = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cpNandAB = new WireCrossPoint(submodelModifiable, 1);
-
- nandAB.moveTo(10, 15);
- andAB.moveTo(35, 15);
- nandABC.moveTo(62.5, 2.5);
- cpNandAB.moveCenterTo(32.5, 25);
-
- new GUIWire(submodelModifiable, A, nandAB.getPin("A"));
- new GUIWire(submodelModifiable, B, nandAB.getPin("B"));
- new GUIWire(submodelModifiable, nandAB.getPin("Y"), cpNandAB, new Point[0]);
- new GUIWire(submodelModifiable, cpNandAB, andAB.getPin("A"), new Point(32.5, 20));
- new GUIWire(submodelModifiable, cpNandAB, andAB.getPin("B"), new Point(32.5, 30));
- new GUIWire(submodelModifiable, andAB.getPin("Y"), nandABC.getPin("A"), new Point(57.5, 25), new Point(57.5, 7.5));
- new GUIWire(submodelModifiable, C, nandABC.getPin("B"), new Point(60, 62.5), new Point(60, 17.5));
- new GUIWire(submodelModifiable, nandABC.getPin("Y"), Y, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUInand3.class.getCanonicalName(), (m, p) -> new GUInand3(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUInot4 extends SimpleRectangularSubmodelComponent
-{
- public GUInot4(ViewModelModifiable model)
- {
- super(model, 1, "GUInot4");
- setSubmodelScale(.4);
- setInputPins("A1", "A2", "A3", "A4");
- setOutputPins("Y1", "Y2", "Y3", "Y4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin A1 = getSubmodelPin("A1");
- Pin A2 = getSubmodelPin("A2");
- Pin A3 = getSubmodelPin("A3");
- Pin A4 = getSubmodelPin("A4");
- Pin Y1 = getSubmodelPin("Y1");
- Pin Y2 = getSubmodelPin("Y2");
- Pin Y3 = getSubmodelPin("Y3");
- Pin Y4 = getSubmodelPin("Y4");
-
- GUINandGate nand1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand3 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand4 = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cp1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cp4 = new WireCrossPoint(submodelModifiable, 1);
-
- nand1.moveTo(30, 2.5);
- nand2.moveTo(30, 27.5);
- nand3.moveTo(30, 52.5);
- nand4.moveTo(30, 77.5);
- cp1.moveCenterTo(15, 12.5);
- cp2.moveCenterTo(15, 37.5);
- cp3.moveCenterTo(15, 62.5);
- cp4.moveCenterTo(15, 87.5);
-
- new GUIWire(submodelModifiable, A1, cp1, new Point[0]);
- new GUIWire(submodelModifiable, A2, cp2, new Point[0]);
- new GUIWire(submodelModifiable, A3, cp3, new Point[0]);
- new GUIWire(submodelModifiable, A4, cp4, new Point[0]);
- new GUIWire(submodelModifiable, cp1, nand1.getPin("A"), new Point(15, 7.5));
- new GUIWire(submodelModifiable, cp2, nand2.getPin("A"), new Point(15, 32.5));
- new GUIWire(submodelModifiable, cp3, nand3.getPin("A"), new Point(15, 57.5));
- new GUIWire(submodelModifiable, cp4, nand4.getPin("A"), new Point(15, 82.5));
- new GUIWire(submodelModifiable, cp1, nand1.getPin("B"), new Point(15, 17.5));
- new GUIWire(submodelModifiable, cp2, nand2.getPin("B"), new Point(15, 42.5));
- new GUIWire(submodelModifiable, cp3, nand3.getPin("B"), new Point(15, 67.5));
- new GUIWire(submodelModifiable, cp4, nand4.getPin("B"), new Point(15, 92.5));
- new GUIWire(submodelModifiable, nand1.getPin("Y"), Y1, new Point[0]);
- new GUIWire(submodelModifiable, nand2.getPin("Y"), Y2, new Point[0]);
- new GUIWire(submodelModifiable, nand3.getPin("Y"), Y3, new Point[0]);
- new GUIWire(submodelModifiable, nand4.getPin("Y"), Y4, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUInot4.class.getCanonicalName(), (m, p) -> new GUInot4(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIor4 extends SimpleRectangularSubmodelComponent
-{
- public GUIor4(ViewModelModifiable model)
- {
- super(model, 1, "GUIor4");
- setSubmodelScale(.2);
- setInputPins("A1", "A2", "A3", "A4");
- setOutputPins("Y");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin A1 = getSubmodelPin("A1");
- Pin A2 = getSubmodelPin("A2");
- Pin A3 = getSubmodelPin("A3");
- Pin A4 = getSubmodelPin("A4");
- Pin Y = getSubmodelPin("Y");
-
- GUINandGate nandA1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandA2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandA3 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandA4 = new GUINandGate(submodelModifiable, 1);
- GUINandGate or12 = new GUINandGate(submodelModifiable, 1);
- GUINandGate or34 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nor12 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nor34 = new GUINandGate(submodelModifiable, 1);
- GUINandGate or1234 = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpOr12 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpOr34 = new WireCrossPoint(submodelModifiable, 1);
-
- nandA1.moveTo(20, 15);
- nandA2.moveTo(20, 65);
- nandA3.moveTo(20, 115);
- nandA4.moveTo(20, 165);
- or12.moveTo(50, 40);
- or34.moveTo(50, 140);
- nor12.moveTo(110, 40);
- nor34.moveTo(110, 140);
- or1234.moveTo(140, 90);
- cpA1.moveCenterTo(15, 25);
- cpA2.moveCenterTo(15, 75);
- cpA3.moveCenterTo(15, 125);
- cpA4.moveCenterTo(15, 175);
- cpOr12.moveCenterTo(105, 50);
- cpOr34.moveCenterTo(105, 150);
-
- new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
- new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
- new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
- new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
- new GUIWire(submodelModifiable, cpA1, nandA1.getPin("A"), new Point(15, 20));
- new GUIWire(submodelModifiable, cpA2, nandA2.getPin("A"), new Point(15, 70));
- new GUIWire(submodelModifiable, cpA3, nandA3.getPin("A"), new Point(15, 120));
- new GUIWire(submodelModifiable, cpA4, nandA4.getPin("A"), new Point(15, 170));
- new GUIWire(submodelModifiable, cpA1, nandA1.getPin("B"), new Point(15, 30));
- new GUIWire(submodelModifiable, cpA2, nandA2.getPin("B"), new Point(15, 80));
- new GUIWire(submodelModifiable, cpA3, nandA3.getPin("B"), new Point(15, 130));
- new GUIWire(submodelModifiable, cpA4, nandA4.getPin("B"), new Point(15, 180));
- new GUIWire(submodelModifiable, nandA1.getPin("Y"), or12.getPin("A"));
- new GUIWire(submodelModifiable, nandA2.getPin("Y"), or12.getPin("B"));
- new GUIWire(submodelModifiable, nandA3.getPin("Y"), or34.getPin("A"));
- new GUIWire(submodelModifiable, nandA4.getPin("Y"), or34.getPin("B"));
- new GUIWire(submodelModifiable, or12.getPin("Y"), cpOr12, new Point[0]);
- new GUIWire(submodelModifiable, or34.getPin("Y"), cpOr34, new Point[0]);
- new GUIWire(submodelModifiable, cpOr12, nor12.getPin("A"), new Point(105, 45));
- new GUIWire(submodelModifiable, cpOr12, nor12.getPin("B"), new Point(105, 55));
- new GUIWire(submodelModifiable, cpOr34, nor34.getPin("A"), new Point(105, 145));
- new GUIWire(submodelModifiable, cpOr34, nor34.getPin("B"), new Point(105, 155));
- new GUIWire(submodelModifiable, nor12.getPin("Y"), or1234.getPin("A"));
- new GUIWire(submodelModifiable, nor34.getPin("Y"), or1234.getPin("B"));
- new GUIWire(submodelModifiable, or1234.getPin("Y"), Y);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIor4.class.getCanonicalName(), (m, p) -> new GUIor4(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIor_4 extends SimpleRectangularSubmodelComponent
-{
- public GUIor_4(ViewModelModifiable model)
- {
- super(model, 1, "GUIor_4");
- setSubmodelScale(.4);
- setInputPins("A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4");
- setOutputPins("Y1", "Y2", "Y3", "Y4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin A1 = getSubmodelPin("A1");
- Pin A2 = getSubmodelPin("A2");
- Pin A3 = getSubmodelPin("A3");
- Pin A4 = getSubmodelPin("A4");
- Pin B1 = getSubmodelPin("B1");
- Pin B2 = getSubmodelPin("B2");
- Pin B3 = getSubmodelPin("B3");
- Pin B4 = getSubmodelPin("B4");
- Pin Y1 = getSubmodelPin("Y1");
- Pin Y2 = getSubmodelPin("Y2");
- Pin Y3 = getSubmodelPin("Y3");
- Pin Y4 = getSubmodelPin("Y4");
-
- GUINandGate notA1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notA2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notA3 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notA4 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notB1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notB2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notB3 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notB4 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB4 = new WireCrossPoint(submodelModifiable, 1);
-
- notA1.moveTo(15, 2.5);
- notA2.moveTo(15, 27.5);
- notA3.moveTo(15, 52.5);
- notA4.moveTo(15, 77.5);
- notB1.moveTo(15, 102.5);
- notB2.moveTo(15, 127.5);
- notB3.moveTo(15, 152.5);
- notB4.moveTo(15, 177.5);
- nandY1.moveTo(65, 2.5);
- nandY2.moveTo(65, 27.5);
- nandY3.moveTo(65, 52.5);
- nandY4.moveTo(65, 77.5);
- cpA1.moveCenterTo(7.5, 12.5);
- cpA2.moveCenterTo(7.5, 37.5);
- cpA3.moveCenterTo(7.5, 62.5);
- cpA4.moveCenterTo(7.5, 87.5);
- cpB1.moveCenterTo(7.5, 112.5);
- cpB2.moveCenterTo(7.5, 137.5);
- cpB3.moveCenterTo(7.5, 162.5);
- cpB4.moveCenterTo(7.5, 187.5);
-
- new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
- new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
- new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
- new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
- new GUIWire(submodelModifiable, B1, cpB1, new Point[0]);
- new GUIWire(submodelModifiable, B2, cpB2, new Point[0]);
- new GUIWire(submodelModifiable, B3, cpB3, new Point[0]);
- new GUIWire(submodelModifiable, B4, cpB4, new Point[0]);
- new GUIWire(submodelModifiable, cpA1, notA1.getPin("A"), new Point(7.5, 7.5));
- new GUIWire(submodelModifiable, cpA1, notA1.getPin("B"), new Point(7.5, 17.5));
- new GUIWire(submodelModifiable, cpA2, notA2.getPin("A"), new Point(7.5, 32.5));
- new GUIWire(submodelModifiable, cpA2, notA2.getPin("B"), new Point(7.5, 42.5));
- new GUIWire(submodelModifiable, cpA3, notA3.getPin("A"), new Point(7.5, 57.5));
- new GUIWire(submodelModifiable, cpA3, notA3.getPin("B"), new Point(7.5, 67.5));
- new GUIWire(submodelModifiable, cpA4, notA4.getPin("A"), new Point(7.5, 82.5));
- new GUIWire(submodelModifiable, cpA4, notA4.getPin("B"), new Point(7.5, 92.5));
- new GUIWire(submodelModifiable, cpB1, notB1.getPin("A"), new Point(7.5, 107.5));
- new GUIWire(submodelModifiable, cpB1, notB1.getPin("B"), new Point(7.5, 117.5));
- new GUIWire(submodelModifiable, cpB2, notB2.getPin("A"), new Point(7.5, 132.5));
- new GUIWire(submodelModifiable, cpB2, notB2.getPin("B"), new Point(7.5, 142.5));
- new GUIWire(submodelModifiable, cpB3, notB3.getPin("A"), new Point(7.5, 157.5));
- new GUIWire(submodelModifiable, cpB3, notB3.getPin("B"), new Point(7.5, 167.5));
- new GUIWire(submodelModifiable, cpB4, notB4.getPin("A"), new Point(7.5, 182.5));
- new GUIWire(submodelModifiable, cpB4, notB4.getPin("B"), new Point(7.5, 192.5));
- new GUIWire(submodelModifiable, notA1.getPin("Y"), nandY1.getPin("A"), new Point(40, 12.5), new Point(40, 7.5));
- new GUIWire(submodelModifiable, notB1.getPin("Y"), nandY1.getPin("B"), new Point(45, 112.5), new Point(45, 17.5));
- new GUIWire(submodelModifiable, notA2.getPin("Y"), nandY2.getPin("A"), new Point(40, 37.5), new Point(40, 32.5));
- new GUIWire(submodelModifiable, notB2.getPin("Y"), nandY2.getPin("B"), new Point(50, 137.5), new Point(50, 42.5));
- new GUIWire(submodelModifiable, notA3.getPin("Y"), nandY3.getPin("A"), new Point(40, 62.5), new Point(40, 57.5));
- new GUIWire(submodelModifiable, notB3.getPin("Y"), nandY3.getPin("B"), new Point(55, 162.5), new Point(55, 67.5));
- new GUIWire(submodelModifiable, notA4.getPin("Y"), nandY4.getPin("A"), new Point(40, 87.5), new Point(40, 82.5));
- new GUIWire(submodelModifiable, notB4.getPin("Y"), nandY4.getPin("B"), new Point(60, 187.5), new Point(60, 92.5));
- new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
- new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
- new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
- new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIor_4.class.getCanonicalName(), (m, p) -> new GUIor_4(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIram2 extends SimpleRectangularSubmodelComponent
-{
- private GUIdlatch4 cell00;
- private GUIdlatch4 cell01;
- private GUIdlatch4 cell10;
- private GUIdlatch4 cell11;
-
- public GUIram2(ViewModelModifiable model)
- {
- super(model, 1, "GUIram2");
- setSubmodelScale(.1);
- setInputPins("A0", "A1", "B0", "B1", "WE", "D1", "D2", "D3", "D4");
- setOutputPins("QA1", "QA2", "QA3", "QA4", "QB1", "QB2", "QB3", "QB4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- //@formatter:off
- Pin A0 = getSubmodelPin("A0");
- Pin A1 = getSubmodelPin("A1");
- Pin B0 = getSubmodelPin("B0");
- Pin B1 = getSubmodelPin("B1");
- Pin WE = getSubmodelPin("WE");
- Pin D1 = getSubmodelPin("D1");
- Pin D2 = getSubmodelPin("D2");
- Pin D3 = getSubmodelPin("D3");
- Pin D4 = getSubmodelPin("D4");
- Pin QA1 = getSubmodelPin("QA1");
- Pin QA2 = getSubmodelPin("QA2");
- Pin QA3 = getSubmodelPin("QA3");
- Pin QA4 = getSubmodelPin("QA4");
- Pin QB1 = getSubmodelPin("QB1");
- Pin QB2 = getSubmodelPin("QB2");
- Pin QB3 = getSubmodelPin("QB3");
- Pin QB4 = getSubmodelPin("QB4");
-
- GUIdemux2 demuxA = new GUIdemux2 (submodelModifiable);
- GUIdemux2 demuxB = new GUIdemux2 (submodelModifiable);
- GUIand41 weAndB = new GUIand41 (submodelModifiable);
- cell00 = new GUIdlatch4 (submodelModifiable);
- cell01 = new GUIdlatch4 (submodelModifiable);
- cell10 = new GUIdlatch4 (submodelModifiable);
- cell11 = new GUIdlatch4 (submodelModifiable);
- GUIand41 andA00 = new GUIand41 (submodelModifiable);
- GUIandor414 andorA01 = new GUIandor414(submodelModifiable);
- GUIandor414 andorA10 = new GUIandor414(submodelModifiable);
- GUIandor414 andorA11 = new GUIandor414(submodelModifiable);
- GUIand41 andB00 = new GUIand41 (submodelModifiable);
- GUIandor414 andorB01 = new GUIandor414(submodelModifiable);
- GUIandor414 andorB10 = new GUIandor414(submodelModifiable);
- GUIandor414 andorB11 = new GUIandor414(submodelModifiable);
-
- WireCrossPoint cpB00 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB01 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB10 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB11 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD1in = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD2in = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD3in = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD4in = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD101 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD201 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD301 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD401 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD110 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD210 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD310 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD410 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ100 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ200 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ300 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ400 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ101 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ201 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ301 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ401 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ110 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ210 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ310 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ410 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ111 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ211 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ311 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ411 = new WireCrossPoint(submodelModifiable, 1);
-
- demuxA .moveTo( 55, 45);
- demuxB .moveTo( 55, 150);
- weAndB .moveTo(130, 150);
- cell00 .moveTo( 55, 325);
- cell01 .moveTo( 55, 475);
- cell10 .moveTo( 55, 625);
- cell11 .moveTo( 55, 775);
- andA00 .moveTo(235, 375);
- andorA01.moveTo(235, 485);
- andorA10.moveTo(235, 635);
- andorA11.moveTo(235, 785);
- andB00 .moveTo(135, 325);
- andorB01.moveTo(135, 435);
- andorB10.moveTo(135, 585);
- andorB11.moveTo(135, 735);
- cpB00 .moveCenterTo(110, 155);
- cpB01 .moveCenterTo(105, 165);
- cpB10 .moveCenterTo(100, 175);
- cpB11 .moveCenterTo( 95, 185);
- cpD1in.moveCenterTo( 35, 550);
- cpD2in.moveCenterTo( 40, 650);
- cpD3in.moveCenterTo( 45, 750);
- cpD4in.moveCenterTo( 50, 810);
- cpD101.moveCenterTo( 35, 480);
- cpD201.moveCenterTo( 40, 490);
- cpD301.moveCenterTo( 45, 500);
- cpD401.moveCenterTo( 50, 510);
- cpD110.moveCenterTo( 35, 630);
- cpD210.moveCenterTo( 40, 640);
- cpD310.moveCenterTo( 45, 650);
- cpD410.moveCenterTo( 50, 660);
- cpQ100.moveCenterTo(130, 330);
- cpQ200.moveCenterTo(125, 340);
- cpQ300.moveCenterTo(120, 350);
- cpQ400.moveCenterTo(115, 360);
- cpQ101.moveCenterTo(130, 480);
- cpQ201.moveCenterTo(125, 490);
- cpQ301.moveCenterTo(120, 500);
- cpQ401.moveCenterTo(115, 510);
- cpQ110.moveCenterTo(130, 630);
- cpQ210.moveCenterTo(125, 640);
- cpQ310.moveCenterTo(120, 650);
- cpQ410.moveCenterTo(115, 660);
- cpQ111.moveCenterTo(130, 780);
- cpQ211.moveCenterTo(125, 790);
- cpQ311.moveCenterTo(120, 800);
- cpQ411.moveCenterTo(115, 810);
-
- new GUIWire(submodelModifiable, A0, demuxA.getPin("S0"), new Point[0]);
- new GUIWire(submodelModifiable, A1, demuxA.getPin("S1"), new Point(10, 150), new Point(10, 60));
- new GUIWire(submodelModifiable, B0, demuxB.getPin("S0"), new Point( 5, 250), new Point( 5, 155));
- new GUIWire(submodelModifiable, B1, demuxB.getPin("S1"), new Point(10, 350), new Point(10, 165));
- new GUIWire(submodelModifiable, demuxB.getPin("Y00"), cpB00, new Point[0]);
- new GUIWire(submodelModifiable, demuxB.getPin("Y01"), cpB01, new Point[0]);
- new GUIWire(submodelModifiable, demuxB.getPin("Y10"), cpB10, new Point[0]);
- new GUIWire(submodelModifiable, demuxB.getPin("Y11"), cpB11, new Point[0]);
- new GUIWire(submodelModifiable, cpB00, weAndB.getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, cpB01, weAndB.getPin("A2"), new Point[0]);
- new GUIWire(submodelModifiable, cpB10, weAndB.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, cpB11, weAndB.getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, WE, weAndB.getPin("B"), new Point(5, 450), new Point(5, 300), new Point(125, 300), new Point(125, 195));
- new GUIWire(submodelModifiable, weAndB.getPin("Y1"), cell00.getPin("C"), new Point(185, 155), new Point(185, 250), new Point(30, 250), new Point(30, 370));
- new GUIWire(submodelModifiable, weAndB.getPin("Y2"), cell01.getPin("C"), new Point(180, 165), new Point(180, 245), new Point(25, 245), new Point(25, 520));
- new GUIWire(submodelModifiable, weAndB.getPin("Y3"), cell10.getPin("C"), new Point(175, 175), new Point(175, 240), new Point(20, 240), new Point(20, 670));
- new GUIWire(submodelModifiable, weAndB.getPin("Y4"), cell11.getPin("C"), new Point(170, 185), new Point(170, 235), new Point(15, 235), new Point(15, 820));
- new GUIWire(submodelModifiable, D1, cpD1in , new Point[0]);
- new GUIWire(submodelModifiable, D2, cpD2in , new Point[0]);
- new GUIWire(submodelModifiable, D3, cpD3in , new Point[0]);
- new GUIWire(submodelModifiable, D4, cpD4in , new Point(50, 850));
- new GUIWire(submodelModifiable, cpD101, cell00.getPin("D1"), new Point(35, 330));
- new GUIWire(submodelModifiable, cpD201, cell00.getPin("D2"), new Point(40, 340));
- new GUIWire(submodelModifiable, cpD301, cell00.getPin("D3"), new Point(45, 350));
- new GUIWire(submodelModifiable, cpD401, cell00.getPin("D4"), new Point(50, 360));
- new GUIWire(submodelModifiable, cpD101, cell01.getPin("D1"), new Point[0]);
- new GUIWire(submodelModifiable, cpD201, cell01.getPin("D2"), new Point[0]);
- new GUIWire(submodelModifiable, cpD301, cell01.getPin("D3"), new Point[0]);
- new GUIWire(submodelModifiable, cpD401, cell01.getPin("D4"), new Point[0]);
- new GUIWire(submodelModifiable, cpD101, cpD1in , new Point[0]);
- new GUIWire(submodelModifiable, cpD1in, cpD110 , new Point[0]);
- new GUIWire(submodelModifiable, cpD201, cpD210 , new Point[0]);
- new GUIWire(submodelModifiable, cpD301, cpD310 , new Point[0]);
- new GUIWire(submodelModifiable, cpD401, cpD410 , new Point[0]);
- new GUIWire(submodelModifiable, cpD110, cell10.getPin("D1"), new Point[0]);
- new GUIWire(submodelModifiable, cpD210, cell10.getPin("D2"), new Point[0]);
- new GUIWire(submodelModifiable, cpD310, cell10.getPin("D3"), new Point[0]);
- new GUIWire(submodelModifiable, cpD410, cell10.getPin("D4"), new Point[0]);
- new GUIWire(submodelModifiable, cpD210, cpD2in , new Point[0]);
- new GUIWire(submodelModifiable, cpD310, cpD3in , new Point[0]);
- new GUIWire(submodelModifiable, cpD410, cpD4in , new Point[0]);
- new GUIWire(submodelModifiable, cpD110, cell11.getPin("D1"), new Point(35, 780));
- new GUIWire(submodelModifiable, cpD2in, cell11.getPin("D2"), new Point(40, 790));
- new GUIWire(submodelModifiable, cpD3in, cell11.getPin("D3"), new Point(45, 800));
- new GUIWire(submodelModifiable, cpD4in, cell11.getPin("D4"), new Point[0]);
- new GUIWire(submodelModifiable, cell00.getPin("Q1"), cpQ100, new Point[0]);
- new GUIWire(submodelModifiable, cell00.getPin("Q2"), cpQ200, new Point[0]);
- new GUIWire(submodelModifiable, cell00.getPin("Q3"), cpQ300, new Point[0]);
- new GUIWire(submodelModifiable, cell00.getPin("Q4"), cpQ400, new Point[0]);
- new GUIWire(submodelModifiable, cell01.getPin("Q1"), cpQ101, new Point[0]);
- new GUIWire(submodelModifiable, cell01.getPin("Q2"), cpQ201, new Point[0]);
- new GUIWire(submodelModifiable, cell01.getPin("Q3"), cpQ301, new Point[0]);
- new GUIWire(submodelModifiable, cell01.getPin("Q4"), cpQ401, new Point[0]);
- new GUIWire(submodelModifiable, cell10.getPin("Q1"), cpQ110, new Point[0]);
- new GUIWire(submodelModifiable, cell10.getPin("Q2"), cpQ210, new Point[0]);
- new GUIWire(submodelModifiable, cell10.getPin("Q3"), cpQ310, new Point[0]);
- new GUIWire(submodelModifiable, cell10.getPin("Q4"), cpQ410, new Point[0]);
- new GUIWire(submodelModifiable, cell11.getPin("Q1"), cpQ111, new Point[0]);
- new GUIWire(submodelModifiable, cell11.getPin("Q2"), cpQ211, new Point[0]);
- new GUIWire(submodelModifiable, cell11.getPin("Q3"), cpQ311, new Point[0]);
- new GUIWire(submodelModifiable, cell11.getPin("Q4"), cpQ411, new Point[0]);
- new GUIWire(submodelModifiable, demuxA.getPin("Y00"), andA00 .getPin("B"), new Point(210, 50), new Point(210, 420));
- new GUIWire(submodelModifiable, demuxA.getPin("Y01"), andorA01.getPin("B"), new Point(205, 60), new Point(205, 570));
- new GUIWire(submodelModifiable, demuxA.getPin("Y10"), andorA10.getPin("B"), new Point(200, 70), new Point(200, 720));
- new GUIWire(submodelModifiable, demuxA.getPin("Y11"), andorA11.getPin("B"), new Point(195, 80), new Point(195, 870));
- new GUIWire(submodelModifiable, cpB00 , andB00 .getPin("B"), new Point(110, 370));
- new GUIWire(submodelModifiable, cpB01 , andorB01.getPin("B"), new Point(105, 520));
- new GUIWire(submodelModifiable, cpB10 , andorB10.getPin("B"), new Point(100, 670));
- new GUIWire(submodelModifiable, cpB11 , andorB11.getPin("B"), new Point(95, 820));
- new GUIWire(submodelModifiable, cpQ100, andA00 .getPin("A1"), new Point(130, 380));
- new GUIWire(submodelModifiable, cpQ200, andA00 .getPin("A2"), new Point(125, 390));
- new GUIWire(submodelModifiable, cpQ300, andA00 .getPin("A3"), new Point(120, 400));
- new GUIWire(submodelModifiable, cpQ400, andA00 .getPin("A4"), new Point(115, 410));
- new GUIWire(submodelModifiable, cpQ101, andorA01.getPin("A1"), new Point(130, 530));
- new GUIWire(submodelModifiable, cpQ201, andorA01.getPin("A2"), new Point(125, 540));
- new GUIWire(submodelModifiable, cpQ301, andorA01.getPin("A3"), new Point(120, 550));
- new GUIWire(submodelModifiable, cpQ401, andorA01.getPin("A4"), new Point(115, 560));
- new GUIWire(submodelModifiable, cpQ110, andorA10.getPin("A1"), new Point(130, 680));
- new GUIWire(submodelModifiable, cpQ210, andorA10.getPin("A2"), new Point(125, 690));
- new GUIWire(submodelModifiable, cpQ310, andorA10.getPin("A3"), new Point(120, 700));
- new GUIWire(submodelModifiable, cpQ410, andorA10.getPin("A4"), new Point(115, 710));
- new GUIWire(submodelModifiable, cpQ111, andorA11.getPin("A1"), new Point(130, 830));
- new GUIWire(submodelModifiable, cpQ211, andorA11.getPin("A2"), new Point(125, 840));
- new GUIWire(submodelModifiable, cpQ311, andorA11.getPin("A3"), new Point(120, 850));
- new GUIWire(submodelModifiable, cpQ411, andorA11.getPin("A4"), new Point(115, 860));
- new GUIWire(submodelModifiable, cpQ100, andB00 .getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ200, andB00 .getPin("A2"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ300, andB00 .getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ400, andB00 .getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ101, andorB01.getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ201, andorB01.getPin("A2"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ301, andorB01.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ401, andorB01.getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ110, andorB10.getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ210, andorB10.getPin("A2"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ310, andorB10.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ410, andorB10.getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ111, andorB11.getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ211, andorB11.getPin("A2"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ311, andorB11.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ411, andorB11.getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, andA00 .getPin("Y1"), andorA01.getPin("C1"), new Point(290, 380), new Point(290, 445), new Point(230, 445), new Point(230, 490));
- new GUIWire(submodelModifiable, andA00 .getPin("Y2"), andorA01.getPin("C2"), new Point(285, 390), new Point(285, 440), new Point(225, 440), new Point(225, 500));
- new GUIWire(submodelModifiable, andA00 .getPin("Y3"), andorA01.getPin("C3"), new Point(280, 400), new Point(280, 435), new Point(220, 435), new Point(220, 510));
- new GUIWire(submodelModifiable, andA00 .getPin("Y4"), andorA01.getPin("C4"), new Point(275, 410), new Point(275, 430), new Point(215, 430), new Point(215, 520));
- new GUIWire(submodelModifiable, andorA01.getPin("Y1"), andorA10.getPin("C1"), new Point(290, 490), new Point(290, 595), new Point(230, 595), new Point(230, 640));
- new GUIWire(submodelModifiable, andorA01.getPin("Y2"), andorA10.getPin("C2"), new Point(285, 500), new Point(285, 590), new Point(225, 590), new Point(225, 650));
- new GUIWire(submodelModifiable, andorA01.getPin("Y3"), andorA10.getPin("C3"), new Point(280, 510), new Point(280, 585), new Point(220, 585), new Point(220, 660));
- new GUIWire(submodelModifiable, andorA01.getPin("Y4"), andorA10.getPin("C4"), new Point(275, 520), new Point(275, 580), new Point(215, 580), new Point(215, 670));
- new GUIWire(submodelModifiable, andorA10.getPin("Y1"), andorA11.getPin("C1"), new Point(290, 640), new Point(290, 745), new Point(230, 745), new Point(230, 790));
- new GUIWire(submodelModifiable, andorA10.getPin("Y2"), andorA11.getPin("C2"), new Point(285, 650), new Point(285, 740), new Point(225, 740), new Point(225, 800));
- new GUIWire(submodelModifiable, andorA10.getPin("Y3"), andorA11.getPin("C3"), new Point(280, 660), new Point(280, 735), new Point(220, 735), new Point(220, 810));
- new GUIWire(submodelModifiable, andorA10.getPin("Y4"), andorA11.getPin("C4"), new Point(275, 670), new Point(275, 730), new Point(215, 730), new Point(215, 820));
- new GUIWire(submodelModifiable, andorA11.getPin("Y1"), QA1 , new Point(300, 790), new Point(300, 50));
- new GUIWire(submodelModifiable, andorA11.getPin("Y2"), QA2 , new Point(305, 800), new Point(305, 150));
- new GUIWire(submodelModifiable, andorA11.getPin("Y3"), QA3 , new Point(310, 810), new Point(310, 250));
- new GUIWire(submodelModifiable, andorA11.getPin("Y4"), QA4 , new Point(315, 820), new Point(315, 350));
- new GUIWire(submodelModifiable, andB00 .getPin("Y1"), andorB01.getPin("C1"), new Point(190, 330), new Point(190, 430), new Point(130, 430), new Point(130, 440));
- new GUIWire(submodelModifiable, andB00 .getPin("Y2"), andorB01.getPin("C2"), new Point(185, 340), new Point(185, 425), new Point(125, 425), new Point(125, 450));
- new GUIWire(submodelModifiable, andB00 .getPin("Y3"), andorB01.getPin("C3"), new Point(180, 350), new Point(180, 420), new Point(120, 420), new Point(120, 460));
- new GUIWire(submodelModifiable, andB00 .getPin("Y4"), andorB01.getPin("C4"), new Point(175, 360), new Point(175, 415), new Point(115, 415), new Point(115, 470));
- new GUIWire(submodelModifiable, andorB01.getPin("Y1"), andorB10.getPin("C1"), new Point(190, 440), new Point(190, 580), new Point(130, 580), new Point(130, 590));
- new GUIWire(submodelModifiable, andorB01.getPin("Y2"), andorB10.getPin("C2"), new Point(185, 450), new Point(185, 575), new Point(125, 575), new Point(125, 600));
- new GUIWire(submodelModifiable, andorB01.getPin("Y3"), andorB10.getPin("C3"), new Point(180, 460), new Point(180, 570), new Point(120, 570), new Point(120, 610));
- new GUIWire(submodelModifiable, andorB01.getPin("Y4"), andorB10.getPin("C4"), new Point(175, 470), new Point(175, 565), new Point(115, 565), new Point(115, 620));
- new GUIWire(submodelModifiable, andorB10.getPin("Y1"), andorB11.getPin("C1"), new Point(190, 590), new Point(190, 730), new Point(130, 730), new Point(130, 740));
- new GUIWire(submodelModifiable, andorB10.getPin("Y2"), andorB11.getPin("C2"), new Point(185, 600), new Point(185, 725), new Point(125, 725), new Point(125, 750));
- new GUIWire(submodelModifiable, andorB10.getPin("Y3"), andorB11.getPin("C3"), new Point(180, 610), new Point(180, 720), new Point(120, 720), new Point(120, 760));
- new GUIWire(submodelModifiable, andorB10.getPin("Y4"), andorB11.getPin("C4"), new Point(175, 620), new Point(175, 715), new Point(115, 715), new Point(115, 770));
- new GUIWire(submodelModifiable, andorB11.getPin("Y1"), QB1 , new Point(190, 740), new Point(190, 880), new Point(325, 880), new Point(325, 450));
- new GUIWire(submodelModifiable, andorB11.getPin("Y2"), QB2 , new Point(185, 750), new Point(185, 885), new Point(330, 885), new Point(330, 550));
- new GUIWire(submodelModifiable, andorB11.getPin("Y3"), QB3 , new Point(180, 760), new Point(180, 890), new Point(335, 890), new Point(335, 650));
- new GUIWire(submodelModifiable, andorB11.getPin("Y4"), QB4 , new Point(175, 770), new Point(175, 895), new Point(340, 895), new Point(340, 750));
- //@formatter:on
-
- addHighLevelStateSubcomponentID("c00", cell00);
- addHighLevelStateSubcomponentID("c01", cell01);
- addHighLevelStateSubcomponentID("c10", cell10);
- addHighLevelStateSubcomponentID("c11", cell11);
- addAtomicHighLevelStateID("q");
- }
-
- @Override
- public void setAtomicHighLevelState(String stateID, Object newState)
- {
- switch (stateID)
- {
- case "q":
- BitVector newStateCasted = (BitVector) newState;
- setHighLevelState("c00.q", newStateCasted.subVector(0, 4));
- setHighLevelState("c01.q", newStateCasted.subVector(4, 8));
- setHighLevelState("c10.q", newStateCasted.subVector(8, 12));
- setHighLevelState("c11.q", newStateCasted.subVector(12, 16));
- break;
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- @Override
- public Object getAtomicHighLevelState(String stateID)
- {
- switch (stateID)
- {
- case "q":
- BitVector q00 = (BitVector) getHighLevelState("c00.q");
- BitVector q01 = (BitVector) getHighLevelState("c01.q");
- BitVector q10 = (BitVector) getHighLevelState("c10.q");
- BitVector q11 = (BitVector) getHighLevelState("c11.q");
- return q00.concat(q01).concat(q10).concat(q11);
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIram2.class.getCanonicalName(), (m, p) -> new GUIram2(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIram4 extends SimpleRectangularSubmodelComponent
-{
- public GUIram4(ViewModelModifiable model)
- {
- super(model, 1, "GUIram4");
- setSubmodelScale(.1);
- setInputPins("A0", "A1", "A2", "A3", "B0", "B1", "B2", "B3", "WE", "D1", "D2", "D3", "D4");
- setOutputPins("QA1", "QA2", "QA3", "QA4", "QB1", "QB2", "QB3", "QB4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- //@formatter:off
- Pin A0 = getSubmodelPin("A0");
- Pin A1 = getSubmodelPin("A1");
- Pin A2 = getSubmodelPin("A2");
- Pin A3 = getSubmodelPin("A3");
- Pin B0 = getSubmodelPin("B0");
- Pin B1 = getSubmodelPin("B1");
- Pin B2 = getSubmodelPin("B2");
- Pin B3 = getSubmodelPin("B3");
- Pin WE = getSubmodelPin("WE");
- Pin D1 = getSubmodelPin("D1");
- Pin D2 = getSubmodelPin("D2");
- Pin D3 = getSubmodelPin("D3");
- Pin D4 = getSubmodelPin("D4");
- Pin QA1 =getSubmodelPin("QA1");
- Pin QA2 =getSubmodelPin("QA2");
- Pin QA3 =getSubmodelPin("QA3");
- Pin QA4 =getSubmodelPin("QA4");
- Pin QB1 =getSubmodelPin("QB1");
- Pin QB2 =getSubmodelPin("QB2");
- Pin QB3 =getSubmodelPin("QB3");
- Pin QB4 =getSubmodelPin("QB4");
-
- GUIdemux2 demuxA = new GUIdemux2 (submodelModifiable);
- GUIdemux2 demuxB = new GUIdemux2 (submodelModifiable);
- GUIand41 weAndB = new GUIand41 (submodelModifiable);
- GUIram2 cell00 = new GUIram2 (submodelModifiable);
- GUIram2 cell01 = new GUIram2 (submodelModifiable);
- GUIram2 cell10 = new GUIram2 (submodelModifiable);
- GUIram2 cell11 = new GUIram2 (submodelModifiable);
- GUIand41 andB00 = new GUIand41 (submodelModifiable);
- GUIandor414 andorB01 = new GUIandor414(submodelModifiable);
- GUIandor414 andorB10 = new GUIandor414(submodelModifiable);
- GUIandor414 andorB11 = new GUIandor414(submodelModifiable);
- GUIand41 andA00 = new GUIand41 (submodelModifiable);
- GUIandor414 andorA01 = new GUIandor414(submodelModifiable);
- GUIandor414 andorA10 = new GUIandor414(submodelModifiable);
- GUIandor414 andorA11 = new GUIandor414(submodelModifiable);
-
- WireCrossPoint cpB00 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB01 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB10 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB11 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_101 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_201 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_301 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_401 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_110 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_210 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_310 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_410 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_111 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_211 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_311 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpD_411 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB101 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB201 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB301 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB401 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB110 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB210 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB310 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB410 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB1in = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB2in = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB3in = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB4in = new WireCrossPoint(submodelModifiable, 1);
-
- demuxA .moveTo( 55, 45);
- demuxB .moveTo( 55, 150);
- weAndB .moveTo(235, 150);
- cell00 .moveTo( 80, 330);
- cell01 .moveTo( 80, 480);
- cell10 .moveTo( 80, 630);
- cell11 .moveTo( 80, 780);
- andB00 .moveTo(250, 375);
- andorB01.moveTo(250, 485);
- andorB10.moveTo(250, 635);
- andorB11.moveTo(250, 785);
- andA00 .moveTo(155, 325);
- andorA01.moveTo(155, 435);
- andorA10.moveTo(155, 585);
- andorA11.moveTo(155, 735);
- cpB00 .moveCenterTo(230, 155);
- cpB01 .moveCenterTo(225, 165);
- cpB10 .moveCenterTo(220, 175);
- cpB11 .moveCenterTo(215, 185);
- cpD_101.moveCenterTo( 60, 535);
- cpD_201.moveCenterTo( 65, 545);
- cpD_301.moveCenterTo( 70, 555);
- cpD_401.moveCenterTo( 75, 565);
- cpD_110.moveCenterTo( 60, 685);
- cpD_210.moveCenterTo( 65, 695);
- cpD_310.moveCenterTo( 70, 705);
- cpD_410.moveCenterTo( 75, 715);
- cpD_111.moveCenterTo( 60, 835);
- cpD_211.moveCenterTo( 65, 845);
- cpD_311.moveCenterTo( 70, 855);
- cpD_411.moveCenterTo( 75, 865);
- cpAB101.moveCenterTo( 40, 485);
- cpAB201.moveCenterTo( 45, 495);
- cpAB301.moveCenterTo( 50, 505);
- cpAB401.moveCenterTo( 55, 515);
- cpAB110.moveCenterTo( 40, 635);
- cpAB210.moveCenterTo( 45, 645);
- cpAB310.moveCenterTo( 50, 655);
- cpAB410.moveCenterTo( 55, 665);
- cpAB1in.moveCenterTo( 40, 335);
- cpAB2in.moveCenterTo( 45, 350);
- cpAB3in.moveCenterTo( 50, 650);
- cpAB4in.moveCenterTo( 55, 750);
-
- new GUIWire(submodelModifiable, A0, demuxA.getPin("S0"), new Point[0]);
- new GUIWire(submodelModifiable, A1, demuxA.getPin("S1"), new Point(10, 150), new Point(10, 60));
- new GUIWire(submodelModifiable, B0, demuxB.getPin("S0"), new Point( 5, 450), new Point( 5, 155));
- new GUIWire(submodelModifiable, B1, demuxB.getPin("S1"), new Point(10, 550), new Point(10, 165));
- new GUIWire(submodelModifiable, demuxB.getPin("Y00"), cpB00, new Point[0]);
- new GUIWire(submodelModifiable, demuxB.getPin("Y01"), cpB01, new Point[0]);
- new GUIWire(submodelModifiable, demuxB.getPin("Y10"), cpB10, new Point[0]);
- new GUIWire(submodelModifiable, demuxB.getPin("Y11"), cpB11, new Point[0]);
- new GUIWire(submodelModifiable, cpB00, weAndB.getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, cpB01, weAndB.getPin("A2"), new Point[0]);
- new GUIWire(submodelModifiable, cpB10, weAndB.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, cpB11, weAndB.getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, WE, weAndB.getPin("B"), new Point(15, 850), new Point(15, 195));
- new GUIWire(submodelModifiable, weAndB.getPin("Y1"), cell00.getPin("WE"), new Point(290, 155), new Point(290, 230), new Point(35, 230), new Point(35, 375));
- new GUIWire(submodelModifiable, weAndB.getPin("Y2"), cell01.getPin("WE"), new Point(285, 165), new Point(285, 225), new Point(30, 225), new Point(30, 525));
- new GUIWire(submodelModifiable, weAndB.getPin("Y3"), cell10.getPin("WE"), new Point(280, 175), new Point(280, 220), new Point(25, 220), new Point(25, 675));
- new GUIWire(submodelModifiable, weAndB.getPin("Y4"), cell11.getPin("WE"), new Point(275, 185), new Point(275, 215), new Point(20, 215), new Point(20, 825));
- new GUIWire(submodelModifiable, cpAB101, cpAB1in , new Point[0]);
- new GUIWire(submodelModifiable, cpAB1in, cell00.getPin("A0"), new Point[0]);
- new GUIWire(submodelModifiable, cpAB201, cpAB2in , new Point[0]);
- new GUIWire(submodelModifiable, cpAB2in, cell00.getPin("A1"), new Point(45, 345));
- new GUIWire(submodelModifiable, cpAB301, cell00.getPin("B0"), new Point(50, 355));
- new GUIWire(submodelModifiable, cpAB401, cell00.getPin("B1"), new Point(55, 365));
- new GUIWire(submodelModifiable, cpAB101, cell01.getPin("A0"), new Point[0]);
- new GUIWire(submodelModifiable, cpAB201, cell01.getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, cpAB301, cell01.getPin("B0"), new Point[0]);
- new GUIWire(submodelModifiable, cpAB401, cell01.getPin("B1"), new Point[0]);
- new GUIWire(submodelModifiable, cpAB101, cpAB110 , new Point[0]);
- new GUIWire(submodelModifiable, cpAB201, cpAB210 , new Point[0]);
- new GUIWire(submodelModifiable, cpAB301, cpAB3in , new Point[0]);
- new GUIWire(submodelModifiable, B2 , cpAB3in , new Point[0]);
- new GUIWire(submodelModifiable, cpAB3in, cpAB310 , new Point[0]);
- new GUIWire(submodelModifiable, cpAB401, cpAB410 , new Point[0]);
- new GUIWire(submodelModifiable, cpAB110, cell10.getPin("A0"), new Point[0]);
- new GUIWire(submodelModifiable, cpAB210, cell10.getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, cpAB310, cell10.getPin("B0"), new Point[0]);
- new GUIWire(submodelModifiable, cpAB410, cell10.getPin("B1"), new Point[0]);
- new GUIWire(submodelModifiable, cpAB110, cell11.getPin("A0"), new Point(40, 785));
- new GUIWire(submodelModifiable, cpAB210, cell11.getPin("A1"), new Point(45, 795));
- new GUIWire(submodelModifiable, cpAB310, cell11.getPin("B0"), new Point(50, 805));
- new GUIWire(submodelModifiable, cpAB410, cpAB4in , new Point[0]);
- new GUIWire(submodelModifiable, cpAB4in, cell11.getPin("B1"), new Point(55, 815));
- new GUIWire(submodelModifiable, A2, cpAB1in , new Point(40, 250));
- new GUIWire(submodelModifiable, A3, cpAB2in , new Point[0]);
- new GUIWire(submodelModifiable, B3, cpAB4in , new Point[0]);
- new GUIWire(submodelModifiable, cpD_101, cell00.getPin("D1"), new Point(60, 385));
- new GUIWire(submodelModifiable, cpD_201, cell00.getPin("D2"), new Point(65, 395));
- new GUIWire(submodelModifiable, cpD_301, cell00.getPin("D3"), new Point(70, 405));
- new GUIWire(submodelModifiable, cpD_401, cell00.getPin("D4"), new Point(75, 415));
- new GUIWire(submodelModifiable, cpD_101, cell01.getPin("D1"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_201, cell01.getPin("D2"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_301, cell01.getPin("D3"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_401, cell01.getPin("D4"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_101, cpD_110 , new Point[0]);
- new GUIWire(submodelModifiable, cpD_201, cpD_210 , new Point[0]);
- new GUIWire(submodelModifiable, cpD_301, cpD_310 , new Point[0]);
- new GUIWire(submodelModifiable, cpD_401, cpD_410 , new Point[0]);
- new GUIWire(submodelModifiable, cpD_110, cell10.getPin("D1"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_210, cell10.getPin("D2"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_310, cell10.getPin("D3"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_410, cell10.getPin("D4"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_110, cpD_111 , new Point[0]);
- new GUIWire(submodelModifiable, cpD_210, cpD_211 , new Point[0]);
- new GUIWire(submodelModifiable, cpD_310, cpD_311 , new Point[0]);
- new GUIWire(submodelModifiable, cpD_410, cpD_411 , new Point[0]);
- new GUIWire(submodelModifiable, cpD_111, cell11.getPin("D1"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_211, cell11.getPin("D2"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_311, cell11.getPin("D3"), new Point[0]);
- new GUIWire(submodelModifiable, cpD_411, cell11.getPin("D4"), new Point[0]);
- new GUIWire(submodelModifiable, D1, cpD_111 , new Point(60, 950));
- new GUIWire(submodelModifiable, D2, cpD_211 , new Point(65, 1050));
- new GUIWire(submodelModifiable, D3, cpD_311 , new Point(70, 1150));
- new GUIWire(submodelModifiable, D4, cpD_411 , new Point(75, 1250));
- new GUIWire(submodelModifiable, demuxA.getPin("Y00"), andA00 .getPin("B"), new Point(135, 50), new Point(135, 370));
- new GUIWire(submodelModifiable, demuxA.getPin("Y01"), andorA01.getPin("B"), new Point(130, 60), new Point(130, 520));
- new GUIWire(submodelModifiable, demuxA.getPin("Y10"), andorA10.getPin("B"), new Point(125, 70), new Point(125, 670));
- new GUIWire(submodelModifiable, demuxA.getPin("Y11"), andorA11.getPin("B"), new Point(120, 80), new Point(120, 820));
- new GUIWire(submodelModifiable, cpB00, andB00 .getPin("B"), new Point(230, 420));
- new GUIWire(submodelModifiable, cpB01, andorB01.getPin("B"), new Point(225, 570));
- new GUIWire(submodelModifiable, cpB10, andorB10.getPin("B"), new Point(220, 720));
- new GUIWire(submodelModifiable, cpB11, andorB11.getPin("B"), new Point(215, 870));
- new GUIWire(submodelModifiable, cell00.getPin("QB1"), andB00 .getPin("A1"), new Point(140, 375), new Point(140, 380));
- new GUIWire(submodelModifiable, cell00.getPin("QB2"), andB00 .getPin("A2"), new Point(140, 385), new Point(140, 390));
- new GUIWire(submodelModifiable, cell00.getPin("QB3"), andB00 .getPin("A3"), new Point(140, 395), new Point(140, 400));
- new GUIWire(submodelModifiable, cell00.getPin("QB4"), andB00 .getPin("A4"), new Point(140, 405), new Point(140, 410));
- new GUIWire(submodelModifiable, cell01.getPin("QB1"), andorB01.getPin("A1"), new Point(140, 525), new Point(140, 530));
- new GUIWire(submodelModifiable, cell01.getPin("QB2"), andorB01.getPin("A2"), new Point(140, 535), new Point(140, 540));
- new GUIWire(submodelModifiable, cell01.getPin("QB3"), andorB01.getPin("A3"), new Point(140, 545), new Point(140, 550));
- new GUIWire(submodelModifiable, cell01.getPin("QB4"), andorB01.getPin("A4"), new Point(140, 555), new Point(140, 560));
- new GUIWire(submodelModifiable, cell10.getPin("QB1"), andorB10.getPin("A1"), new Point(140, 675), new Point(140, 680));
- new GUIWire(submodelModifiable, cell10.getPin("QB2"), andorB10.getPin("A2"), new Point(140, 685), new Point(140, 690));
- new GUIWire(submodelModifiable, cell10.getPin("QB3"), andorB10.getPin("A3"), new Point(140, 695), new Point(140, 700));
- new GUIWire(submodelModifiable, cell10.getPin("QB4"), andorB10.getPin("A4"), new Point(140, 705), new Point(140, 710));
- new GUIWire(submodelModifiable, cell11.getPin("QB1"), andorB11.getPin("A1"), new Point(140, 825), new Point(140, 830));
- new GUIWire(submodelModifiable, cell11.getPin("QB2"), andorB11.getPin("A2"), new Point(140, 835), new Point(140, 840));
- new GUIWire(submodelModifiable, cell11.getPin("QB3"), andorB11.getPin("A3"), new Point(140, 845), new Point(140, 850));
- new GUIWire(submodelModifiable, cell11.getPin("QB4"), andorB11.getPin("A4"), new Point(140, 855), new Point(140, 860));
- new GUIWire(submodelModifiable, cell00.getPin("QA1"), andA00 .getPin("A1"), new Point(140, 335), new Point(140, 330));
- new GUIWire(submodelModifiable, cell00.getPin("QA2"), andA00 .getPin("A2"), new Point(140, 345), new Point(140, 340));
- new GUIWire(submodelModifiable, cell00.getPin("QA3"), andA00 .getPin("A3"), new Point(140, 355), new Point(140, 350));
- new GUIWire(submodelModifiable, cell00.getPin("QA4"), andA00 .getPin("A4"), new Point(140, 365), new Point(140, 360));
- new GUIWire(submodelModifiable, cell01.getPin("QA1"), andorA01.getPin("A1"), new Point(140, 485), new Point(140, 480));
- new GUIWire(submodelModifiable, cell01.getPin("QA2"), andorA01.getPin("A2"), new Point(140, 495), new Point(140, 490));
- new GUIWire(submodelModifiable, cell01.getPin("QA3"), andorA01.getPin("A3"), new Point(140, 505), new Point(140, 500));
- new GUIWire(submodelModifiable, cell01.getPin("QA4"), andorA01.getPin("A4"), new Point(140, 515), new Point(140, 510));
- new GUIWire(submodelModifiable, cell10.getPin("QA1"), andorA10.getPin("A1"), new Point(140, 635), new Point(140, 630));
- new GUIWire(submodelModifiable, cell10.getPin("QA2"), andorA10.getPin("A2"), new Point(140, 645), new Point(140, 640));
- new GUIWire(submodelModifiable, cell10.getPin("QA3"), andorA10.getPin("A3"), new Point(140, 655), new Point(140, 650));
- new GUIWire(submodelModifiable, cell10.getPin("QA4"), andorA10.getPin("A4"), new Point(140, 665), new Point(140, 660));
- new GUIWire(submodelModifiable, cell11.getPin("QA1"), andorA11.getPin("A1"), new Point(140, 785), new Point(140, 780));
- new GUIWire(submodelModifiable, cell11.getPin("QA2"), andorA11.getPin("A2"), new Point(140, 795), new Point(140, 790));
- new GUIWire(submodelModifiable, cell11.getPin("QA3"), andorA11.getPin("A3"), new Point(140, 805), new Point(140, 800));
- new GUIWire(submodelModifiable, cell11.getPin("QA4"), andorA11.getPin("A4"), new Point(140, 815), new Point(140, 810));
- new GUIWire(submodelModifiable, andB00 .getPin("Y1"), andorB01.getPin("C1"), new Point(305, 380), new Point(305, 445), new Point(245, 445), new Point(245, 490));
- new GUIWire(submodelModifiable, andB00 .getPin("Y2"), andorB01.getPin("C2"), new Point(300, 390), new Point(300, 440), new Point(240, 440), new Point(240, 500));
- new GUIWire(submodelModifiable, andB00 .getPin("Y3"), andorB01.getPin("C3"), new Point(295, 400), new Point(295, 435), new Point(235, 435), new Point(235, 510));
- new GUIWire(submodelModifiable, andB00 .getPin("Y4"), andorB01.getPin("C4"), new Point(290, 410), new Point(290, 430), new Point(230, 430), new Point(230, 520));
- new GUIWire(submodelModifiable, andorB01.getPin("Y1"), andorB10.getPin("C1"), new Point(305, 490), new Point(305, 595), new Point(245, 595), new Point(245, 640));
- new GUIWire(submodelModifiable, andorB01.getPin("Y2"), andorB10.getPin("C2"), new Point(300, 500), new Point(300, 590), new Point(240, 590), new Point(240, 650));
- new GUIWire(submodelModifiable, andorB01.getPin("Y3"), andorB10.getPin("C3"), new Point(295, 510), new Point(295, 585), new Point(235, 585), new Point(235, 660));
- new GUIWire(submodelModifiable, andorB01.getPin("Y4"), andorB10.getPin("C4"), new Point(290, 520), new Point(290, 580), new Point(230, 580), new Point(230, 670));
- new GUIWire(submodelModifiable, andorB10.getPin("Y1"), andorB11.getPin("C1"), new Point(305, 640), new Point(305, 745), new Point(245, 745), new Point(245, 790));
- new GUIWire(submodelModifiable, andorB10.getPin("Y2"), andorB11.getPin("C2"), new Point(300, 650), new Point(300, 740), new Point(240, 740), new Point(240, 800));
- new GUIWire(submodelModifiable, andorB10.getPin("Y3"), andorB11.getPin("C3"), new Point(295, 660), new Point(295, 735), new Point(235, 735), new Point(235, 810));
- new GUIWire(submodelModifiable, andorB10.getPin("Y4"), andorB11.getPin("C4"), new Point(290, 670), new Point(290, 730), new Point(230, 730), new Point(230, 820));
- new GUIWire(submodelModifiable, andorB11.getPin("Y1"), QB1 , new Point(330, 790), new Point(330, 450));
- new GUIWire(submodelModifiable, andorB11.getPin("Y2"), QB2 , new Point(335, 800), new Point(335, 550));
- new GUIWire(submodelModifiable, andorB11.getPin("Y3"), QB3 , new Point(340, 810), new Point(340, 650));
- new GUIWire(submodelModifiable, andorB11.getPin("Y4"), QB4 , new Point(345, 820), new Point(345, 750));
- new GUIWire(submodelModifiable, andA00 .getPin("Y1"), andorA01.getPin("C1"), new Point(210, 330), new Point(210, 430), new Point(150, 430), new Point(150, 440));
- new GUIWire(submodelModifiable, andA00 .getPin("Y2"), andorA01.getPin("C2"), new Point(205, 340), new Point(205, 425), new Point(145, 425), new Point(145, 450));
- new GUIWire(submodelModifiable, andA00 .getPin("Y3"), andorA01.getPin("C3"), new Point(200, 350), new Point(200, 420), new Point(140, 420), new Point(140, 460));
- new GUIWire(submodelModifiable, andA00 .getPin("Y4"), andorA01.getPin("C4"), new Point(195, 360), new Point(195, 415), new Point(135, 415), new Point(135, 470));
- new GUIWire(submodelModifiable, andorA01.getPin("Y1"), andorA10.getPin("C1"), new Point(210, 440), new Point(210, 580), new Point(150, 580), new Point(150, 590));
- new GUIWire(submodelModifiable, andorA01.getPin("Y2"), andorA10.getPin("C2"), new Point(205, 450), new Point(205, 575), new Point(145, 575), new Point(145, 600));
- new GUIWire(submodelModifiable, andorA01.getPin("Y3"), andorA10.getPin("C3"), new Point(200, 460), new Point(200, 570), new Point(140, 570), new Point(140, 610));
- new GUIWire(submodelModifiable, andorA01.getPin("Y4"), andorA10.getPin("C4"), new Point(195, 470), new Point(195, 565), new Point(135, 565), new Point(135, 620));
- new GUIWire(submodelModifiable, andorA10.getPin("Y1"), andorA11.getPin("C1"), new Point(210, 590), new Point(210, 730), new Point(150, 730), new Point(150, 740));
- new GUIWire(submodelModifiable, andorA10.getPin("Y2"), andorA11.getPin("C2"), new Point(205, 600), new Point(205, 725), new Point(145, 725), new Point(145, 750));
- new GUIWire(submodelModifiable, andorA10.getPin("Y3"), andorA11.getPin("C3"), new Point(200, 610), new Point(200, 720), new Point(140, 720), new Point(140, 760));
- new GUIWire(submodelModifiable, andorA10.getPin("Y4"), andorA11.getPin("C4"), new Point(195, 620), new Point(195, 715), new Point(135, 715), new Point(135, 770));
- new GUIWire(submodelModifiable, andorA11.getPin("Y1"), QA1 , new Point(210, 740), new Point(210, 880), new Point(310, 880), new Point(310, 50));
- new GUIWire(submodelModifiable, andorA11.getPin("Y2"), QA2 , new Point(205, 750), new Point(205, 885), new Point(315, 885), new Point(315, 150));
- new GUIWire(submodelModifiable, andorA11.getPin("Y3"), QA3 , new Point(200, 760), new Point(200, 890), new Point(320, 890), new Point(320, 250));
- new GUIWire(submodelModifiable, andorA11.getPin("Y4"), QA4 , new Point(195, 770), new Point(195, 895), new Point(325, 895), new Point(325, 350));
- //@formatter:on
-
- addHighLevelStateSubcomponentID("c00", cell00);
- addHighLevelStateSubcomponentID("c01", cell01);
- addHighLevelStateSubcomponentID("c10", cell10);
- addHighLevelStateSubcomponentID("c11", cell11);
- addAtomicHighLevelStateID("q");
- }
-
- @Override
- public void setAtomicHighLevelState(String stateID, Object newState)
- {
- switch (stateID)
- {
- case "q":
- BitVector newStateCasted = (BitVector) newState;
- setHighLevelState("c00.q", newStateCasted.subVector(0, 16));
- setHighLevelState("c01.q", newStateCasted.subVector(16, 32));
- setHighLevelState("c10.q", newStateCasted.subVector(32, 48));
- setHighLevelState("c11.q", newStateCasted.subVector(48, 64));
- break;
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- @Override
- protected void setSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID, Object newState)
- {
- if (checkSubcomponentID(subcomponentID))
- setHighLevelState(translateDirectCellAccess(subcomponentID, subcomponentHighLevelStateID), newState);
- else
- super.setSubcomponentHighLevelState(subcomponentID, subcomponentHighLevelStateID, newState);
-
- }
-
- @Override
- public Object getAtomicHighLevelState(String stateID)
- {
- switch (stateID)
- {
- case "q":
- BitVector q00 = (BitVector) getHighLevelState("c00.q");
- BitVector q01 = (BitVector) getHighLevelState("c01.q");
- BitVector q10 = (BitVector) getHighLevelState("c10.q");
- BitVector q11 = (BitVector) getHighLevelState("c11.q");
- return q00.concat(q01).concat(q10).concat(q11);
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- @Override
- protected Object getSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID)
- {
- if (checkSubcomponentID(subcomponentID))
- return getHighLevelState(translateDirectCellAccess(subcomponentID, subcomponentHighLevelStateID));
- return super.getSubcomponentHighLevelState(subcomponentID, subcomponentHighLevelStateID);
- }
-
- private static String translateDirectCellAccess(String subcomponentID, String subcomponentHighLevelStateID)
- {
- return 'c' + subcomponentID.substring(3, 5) + "." + subcomponentID.substring(0, 3) + '.' + subcomponentHighLevelStateID;
- }
-
- private static boolean checkSubcomponentID(String subcomponentID)
- {
- if (subcomponentID.length() != 5 || subcomponentID.charAt(0) != 'c')
- return false;
- char addr3 = subcomponentID.charAt(1);
- char addr2 = subcomponentID.charAt(2);
- char addr1 = subcomponentID.charAt(3);
- char addr0 = subcomponentID.charAt(4);
- return (addr3 == '0' || addr3 == '1') || (addr2 == '0' || addr2 == '1') || (addr1 == '0' || addr1 == '1')
- || (addr0 == '0' || addr0 == '1');
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIram4.class.getCanonicalName(), (m, p) -> new GUIram4(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIsel2_4 extends SimpleRectangularSubmodelComponent
-{
- public GUIsel2_4(ViewModelModifiable model)
- {
- super(model, 1, "GUIsel2_4");
- setSubmodelScale(.4);
- setInputPins("SA", "SB", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4");
- setOutputPins("Y1", "Y2", "Y3", "Y4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin SA = getSubmodelPin("SA");
- Pin SB = getSubmodelPin("SB");
- Pin A1 = getSubmodelPin("A1");
- Pin A2 = getSubmodelPin("A2");
- Pin A3 = getSubmodelPin("A3");
- Pin A4 = getSubmodelPin("A4");
- Pin B1 = getSubmodelPin("B1");
- Pin B2 = getSubmodelPin("B2");
- Pin B3 = getSubmodelPin("B3");
- Pin B4 = getSubmodelPin("B4");
- Pin Y1 = getSubmodelPin("Y1");
- Pin Y2 = getSubmodelPin("Y2");
- Pin Y3 = getSubmodelPin("Y3");
- Pin Y4 = getSubmodelPin("Y4");
-
- GUINandGate nandA1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandA2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandA3 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandA4 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandB1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandB2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandB3 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandB4 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB3 = new WireCrossPoint(submodelModifiable, 1);
-
- nandA1.moveTo(20, 2.5);
- nandB1.moveTo(20, 27.5);
- nandA2.moveTo(20, 52.5);
- nandB2.moveTo(20, 77.5);
- nandA3.moveTo(20, 102.5);
- nandB3.moveTo(20, 127.5);
- nandA4.moveTo(20, 152.5);
- nandB4.moveTo(20, 177.5);
- nandY1.moveTo(65, 2.5);
- nandY2.moveTo(65, 27.5);
- nandY3.moveTo(65, 52.5);
- nandY4.moveTo(65, 77.5);
- cpA1.moveCenterTo(7.5, 17.5);
- cpB1.moveCenterTo(5, 42.5);
- cpA2.moveCenterTo(7.5, 67.5);
- cpB2.moveCenterTo(5, 92.5);
- cpA3.moveCenterTo(7.5, 117.5);
- cpB3.moveCenterTo(5, 142.5);
-
- new GUIWire(submodelModifiable, A1, nandA1.getPin("A"), new Point(15, 62.5), new Point(15, 7.5));
- new GUIWire(submodelModifiable, A2, nandA2.getPin("A"), new Point(17.5, 87.5), new Point(17.5, 57.5));
- new GUIWire(submodelModifiable, A3, nandA3.getPin("A"), new Point(17.5, 112.5), new Point(17.5, 107.5));
- new GUIWire(submodelModifiable, A4, nandA4.getPin("A"), new Point(17.5, 137.5), new Point(17.5, 157.5));
- new GUIWire(submodelModifiable, B1, nandB1.getPin("A"), new Point(10, 162.5), new Point(10, 32.5));
- new GUIWire(submodelModifiable, B2, nandB2.getPin("A"), new Point(12.5, 187.5), new Point(12.5, 82.5));
- new GUIWire(submodelModifiable, B3, nandB3.getPin("A"), new Point(15, 212.5), new Point(15, 132.5));
- new GUIWire(submodelModifiable, B4, nandB4.getPin("A"), new Point(10, 237.5), new Point(10, 182.5));
- new GUIWire(submodelModifiable, SA, cpA1);
- new GUIWire(submodelModifiable, SB, cpB1);
- new GUIWire(submodelModifiable, cpA1, cpA2);
- new GUIWire(submodelModifiable, cpA1, nandA1.getPin("B"));
- new GUIWire(submodelModifiable, cpA2, cpA3);
- new GUIWire(submodelModifiable, cpA2, nandA2.getPin("B"));
- new GUIWire(submodelModifiable, cpA3, nandA3.getPin("B"));
- new GUIWire(submodelModifiable, cpA3, nandA4.getPin("B"), new Point(7.5, 167.5));
- new GUIWire(submodelModifiable, cpB1, cpB2);
- new GUIWire(submodelModifiable, cpB1, nandB1.getPin("B"));
- new GUIWire(submodelModifiable, cpB2, cpB3);
- new GUIWire(submodelModifiable, cpB2, nandB2.getPin("B"));
- new GUIWire(submodelModifiable, cpB3, nandB3.getPin("B"));
- new GUIWire(submodelModifiable, cpB3, nandB4.getPin("B"), new Point(5, 192.5));
- new GUIWire(submodelModifiable, nandA1.getPin("Y"), nandY1.getPin("A"), new Point(42.5, 12.5), new Point(42.5, 7.5));
- new GUIWire(submodelModifiable, nandB1.getPin("Y"), nandY1.getPin("B"), new Point(45, 37.5), new Point(45, 17.5));
- new GUIWire(submodelModifiable, nandA2.getPin("Y"), nandY2.getPin("A"), new Point(47.5, 62.5), new Point(47.5, 32.5));
- new GUIWire(submodelModifiable, nandB2.getPin("Y"), nandY2.getPin("B"), new Point(50, 87.5), new Point(50, 42.5));
- new GUIWire(submodelModifiable, nandA3.getPin("Y"), nandY3.getPin("A"), new Point(52.5, 112.5), new Point(52.5, 57.5));
- new GUIWire(submodelModifiable, nandB3.getPin("Y"), nandY3.getPin("B"), new Point(55, 137.5), new Point(55, 67.5));
- new GUIWire(submodelModifiable, nandA4.getPin("Y"), nandY4.getPin("A"), new Point(57.5, 162.5), new Point(57.5, 82.5));
- new GUIWire(submodelModifiable, nandB4.getPin("Y"), nandY4.getPin("B"), new Point(60, 187.5), new Point(60, 92.5));
- new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
- new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
- new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
- new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIsel2_4.class.getCanonicalName(), (m, p) -> new GUIsel2_4(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIsel3_4 extends SimpleRectangularSubmodelComponent
-{
- public GUIsel3_4(ViewModelModifiable model)
- {
- super(model, 1, "GUIsel3_4");
- setSubmodelScale(.2);
- setInputPins("SA", "SB", "SC", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "C1", "C2", "C3", "C4");
- setOutputPins("Y1", "Y2", "Y3", "Y4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin SA = getSubmodelPin("SA");
- Pin SB = getSubmodelPin("SB");
- Pin SC = getSubmodelPin("SC");
- Pin A1 = getSubmodelPin("A1");
- Pin A2 = getSubmodelPin("A2");
- Pin A3 = getSubmodelPin("A3");
- Pin A4 = getSubmodelPin("A4");
- Pin B1 = getSubmodelPin("B1");
- Pin B2 = getSubmodelPin("B2");
- Pin B3 = getSubmodelPin("B3");
- Pin B4 = getSubmodelPin("B4");
- Pin C1 = getSubmodelPin("C1");
- Pin C2 = getSubmodelPin("C2");
- Pin C3 = getSubmodelPin("C3");
- Pin C4 = getSubmodelPin("C4");
- Pin Y1 = getSubmodelPin("Y1");
- Pin Y2 = getSubmodelPin("Y2");
- Pin Y3 = getSubmodelPin("Y3");
- Pin Y4 = getSubmodelPin("Y4");
-
- GUIsel2_4 sel2_4 = new GUIsel2_4(submodelModifiable);
- GUInot4 not4 = new GUInot4(submodelModifiable);
- GUINandGate nandC1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandC2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandC3 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandC4 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY3 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY4 = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cpSC1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpSC2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpSC3 = new WireCrossPoint(submodelModifiable, 1);
-
- sel2_4.moveTo(35, 250);
- not4.moveTo(75, 250);
- nandC1.moveTo(50, 570);
- nandC2.moveTo(50, 620);
- nandC3.moveTo(50, 670);
- nandC4.moveTo(50, 720);
- nandY1.moveTo(152.5, 15);
- nandY2.moveTo(152.5, 65);
- nandY3.moveTo(152.5, 115);
- nandY4.moveTo(152.5, 165);
- cpSC1.moveCenterTo(30, 585);
- cpSC2.moveCenterTo(30, 635);
- cpSC3.moveCenterTo(30, 685);
-
- new GUIWire(submodelModifiable, SA, sel2_4.getPin("SA"), new Point(25, 25), new Point(25, 255));
- new GUIWire(submodelModifiable, SB, sel2_4.getPin("SB"), new Point(20, 75), new Point(20, 265));
- new GUIWire(submodelModifiable, A1, sel2_4.getPin("A1"), new Point(15, 175), new Point(15, 275));
- new GUIWire(submodelModifiable, A2, sel2_4.getPin("A2"), new Point(10, 225), new Point(10, 285));
- new GUIWire(submodelModifiable, A3, sel2_4.getPin("A3"), new Point(5, 275), new Point(5, 295));
- new GUIWire(submodelModifiable, A4, sel2_4.getPin("A4"), new Point(5, 325), new Point(5, 305));
- new GUIWire(submodelModifiable, B1, sel2_4.getPin("B1"), new Point(10, 375), new Point(10, 315));
- new GUIWire(submodelModifiable, B2, sel2_4.getPin("B2"), new Point(15, 425), new Point(15, 325));
- new GUIWire(submodelModifiable, B3, sel2_4.getPin("B3"), new Point(20, 475), new Point(20, 335));
- new GUIWire(submodelModifiable, B4, sel2_4.getPin("B4"), new Point(25, 525), new Point(25, 345));
- new GUIWire(submodelModifiable, sel2_4.getPin("Y1"), not4.getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, sel2_4.getPin("Y2"), not4.getPin("A2"), new Point[0]);
- new GUIWire(submodelModifiable, sel2_4.getPin("Y3"), not4.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, sel2_4.getPin("Y4"), not4.getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, SC, cpSC1, new Point(30, 125));
- new GUIWire(submodelModifiable, cpSC1, nandC1.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpSC1, cpSC2, new Point(30, 125));
- new GUIWire(submodelModifiable, cpSC2, nandC2.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpSC2, cpSC3, new Point(30, 125));
- new GUIWire(submodelModifiable, cpSC3, nandC3.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpSC3, nandC4.getPin("B"), new Point(30, 735));
- new GUIWire(submodelModifiable, C1, nandC1.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, C2, nandC2.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, C3, nandC3.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, C4, nandC4.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, not4.getPin("Y1"), nandY1.getPin("A"), new Point(115, 255), new Point(115, 20));
- new GUIWire(submodelModifiable, not4.getPin("Y2"), nandY2.getPin("A"), new Point(120, 265), new Point(120, 70));
- new GUIWire(submodelModifiable, not4.getPin("Y3"), nandY3.getPin("A"), new Point(125, 275), new Point(125, 120));
- new GUIWire(submodelModifiable, not4.getPin("Y4"), nandY4.getPin("A"), new Point(130, 285), new Point(130, 170));
- new GUIWire(submodelModifiable, nandC1.getPin("Y"), nandY1.getPin("B"), new Point(135, 580), new Point(135, 30));
- new GUIWire(submodelModifiable, nandC2.getPin("Y"), nandY2.getPin("B"), new Point(140, 630), new Point(140, 80));
- new GUIWire(submodelModifiable, nandC3.getPin("Y"), nandY3.getPin("B"), new Point(145, 680), new Point(145, 130));
- new GUIWire(submodelModifiable, nandC4.getPin("Y"), nandY4.getPin("B"), new Point(150, 730), new Point(150, 180));
- new GUIWire(submodelModifiable, nandY1.getPin("Y"), Y1, new Point[0]);
- new GUIWire(submodelModifiable, nandY2.getPin("Y"), Y2, new Point[0]);
- new GUIWire(submodelModifiable, nandY3.getPin("Y"), Y3, new Point[0]);
- new GUIWire(submodelModifiable, nandY4.getPin("Y"), Y4, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIsel3_4.class.getCanonicalName(), (m, p) -> new GUIsel3_4(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIxor extends SimpleRectangularSubmodelComponent
-{
- public GUIxor(ViewModelModifiable model)
- {
- super(model, 1, "GUIxor");
- setSubmodelScale(.4);
- setInputPins("A", "B");
- setOutputPins("Y");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin A = getSubmodelPin("A");
- Pin B = getSubmodelPin("B");
- Pin Y = getSubmodelPin("Y");
-
- GUINandGate nandAB = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandYA = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandYB = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandY = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cpA = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpB = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpAB = new WireCrossPoint(submodelModifiable, 1);
-
- nandAB.moveTo(7.5, 15);
- nandYA.moveTo(35, 2.5);
- nandYB.moveTo(35, 27.5);
- nandY.moveTo(62.5, 15);
- cpA.moveCenterTo(5, 12.5);
- cpB.moveCenterTo(5, 37.5);
- cpAB.moveCenterTo(30, 25);
-
- new GUIWire(submodelModifiable, A, cpA, new Point[0]);
- new GUIWire(submodelModifiable, B, cpB, new Point[0]);
- new GUIWire(submodelModifiable, cpA, nandAB.getPin("A"), new Point(5, 20));
- new GUIWire(submodelModifiable, cpB, nandAB.getPin("B"), new Point(5, 30));
- new GUIWire(submodelModifiable, nandAB.getPin("Y"), cpAB);
- new GUIWire(submodelModifiable, cpAB, nandYA.getPin("B"), new Point(30, 17.5));
- new GUIWire(submodelModifiable, cpAB, nandYB.getPin("A"), new Point(30, 32.5));
- new GUIWire(submodelModifiable, cpA, nandYA.getPin("A"), new Point(5, 7.5));
- new GUIWire(submodelModifiable, cpB, nandYB.getPin("B"), new Point(5, 42.5));
- new GUIWire(submodelModifiable, nandYA.getPin("Y"), nandY.getPin("A"));
- new GUIWire(submodelModifiable, nandYB.getPin("Y"), nandY.getPin("B"));
- new GUIWire(submodelModifiable, nandY.getPin("Y"), Y);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIxor.class.getCanonicalName(), (m, p) -> new GUIxor(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdlatch4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUImux1_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIor4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIram4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIsel3_4;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901 extends SimpleRectangularSubmodelComponent
-{
-
- public GUIAm2901(ViewModelModifiable model)
- {
- super(model, 1, "GUIAm2901");
- setSubmodelScale(.1);
- setInputPins("I8", "I7", "I6", "I5", "I4", "I3", "I2", "I1", "I0", "C", "Cn", "D1", "D2", "D3", "D4", "A0", "A1", "A2", "A3", "B0",
- "B1", "B2", "B3", "IRAMn", "IRAMn+3", "IQn", "IQn+3");
- setOutputPins("Y1", "Y2", "Y3", "Y4", "F=0", "Cn+4", "OVR", "F3", "ORAMn", "ORAMn+3", "OQn", "OQn+3");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin I8 = getSubmodelPin("I8");
- Pin I7 = getSubmodelPin("I7");
- Pin I6 = getSubmodelPin("I6");
- Pin I5 = getSubmodelPin("I5");
- Pin I4 = getSubmodelPin("I4");
- Pin I3 = getSubmodelPin("I3");
- Pin I2 = getSubmodelPin("I2");
- Pin I1 = getSubmodelPin("I1");
- Pin I0 = getSubmodelPin("I0");
- Pin C = getSubmodelPin("C");
- Pin Cn = getSubmodelPin("Cn");
- Pin D1 = getSubmodelPin("D1");
- Pin D2 = getSubmodelPin("D2");
- Pin D3 = getSubmodelPin("D3");
- Pin D4 = getSubmodelPin("D4");
- Pin A0 = getSubmodelPin("A0");
- Pin A1 = getSubmodelPin("A1");
- Pin A2 = getSubmodelPin("A2");
- Pin A3 = getSubmodelPin("A3");
- Pin B0 = getSubmodelPin("B0");
- Pin B1 = getSubmodelPin("B1");
- Pin B2 = getSubmodelPin("B2");
- Pin B3 = getSubmodelPin("B3");
- Pin IRAMn = getSubmodelPin("IRAMn");
- Pin IRAMnplus3 = getSubmodelPin("IRAMn+3");
- Pin IQn = getSubmodelPin("IQn");
- Pin IQnplus3 = getSubmodelPin("IQn+3");
- Pin Y1 = getSubmodelPin("Y1");
- Pin Y2 = getSubmodelPin("Y2");
- Pin Y3 = getSubmodelPin("Y3");
- Pin Y4 = getSubmodelPin("Y4");
- Pin Feq0 = getSubmodelPin("F=0");
- Pin Cnplus4 = getSubmodelPin("Cn+4");
- Pin OVR = getSubmodelPin("OVR");
- Pin F3 = getSubmodelPin("F3");
- Pin ORAMn = getSubmodelPin("ORAMn");
- Pin ORAMnplus3 = getSubmodelPin("ORAMn+3");
- Pin OQn = getSubmodelPin("OQn");
- Pin OQnplus3 = getSubmodelPin("OQn+3");
-
- GUIAm2901DestDecode destDecode = new GUIAm2901DestDecode(submodelModifiable);
- GUImux1_4 Ymux = new GUImux1_4(submodelModifiable);
- GUIand ramweAnd = new GUIand(submodelModifiable);
- GUINandGate notC = new GUINandGate(submodelModifiable, 1);
- GUIAm2901ALUInclSourceDecodeInclFunctionDecode alu = new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(submodelModifiable);
- GUIor4 Fneq0 = new GUIor4(submodelModifiable);
- GUINandGate notFneq0 = new GUINandGate(submodelModifiable, 1);
- GUIram4 ram = new GUIram4(submodelModifiable);
- GUIdlatch4 QAlatch = new GUIdlatch4(submodelModifiable);
- GUIdlatch4 QBlatch = new GUIdlatch4(submodelModifiable);
- GUIsel3_4 ramDsel = new GUIsel3_4(submodelModifiable);
- GUIsel3_4 qregDsel = new GUIsel3_4(submodelModifiable);
- GUIAm2901QReg qreg = new GUIAm2901QReg(submodelModifiable);
-
- WireCrossPoint cpC1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpC2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpC3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpC4 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpLSH = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNSH = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpRSH = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQA1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQA2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQA3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQA4 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ4 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpOQn = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpOQnplus3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ2Rsh = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpQ3Rsh = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpORAMn = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpORAMnplus3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF11 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF21 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF31 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF41 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF12 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF22 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF32 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF42 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF1Lsh = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF2Lsh = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF3Lsh = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF2Rsh = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF3Rsh = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF4Rsh = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF13 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF23 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF33 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpF43 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpFneq0 = new WireCrossPoint(submodelModifiable, 1);
-
- destDecode.moveTo(15, 45);
- Ymux.moveTo(275, 135);
- ramweAnd.moveTo(190, 65);
- notC.moveTo(160, 75);
- alu.moveTo(240, 2110);
- Fneq0.moveTo(275, 445);
- notFneq0.moveTo(320, 440);
- ram.moveTo(95, 2220);
- QAlatch.moveTo(160, 2220);
- QBlatch.moveTo(160, 2275);
- ramDsel.moveTo(45, 2310);
- qregDsel.moveTo(45, 2510);
- qreg.moveTo(90, 2490);
- cpC1.moveCenterTo(155, 950);
- cpC2.moveCenterTo(155, 90);
- cpC3.moveCenterTo(155, 2265);
- cpC4.moveCenterTo(155, 2320);
- cpLSH.moveCenterTo(40, 2315);
- cpNSH.moveCenterTo(35, 2325);
- cpRSH.moveCenterTo(30, 2335);
- cpQA1.moveCenterTo(220, 2225);
- cpQA2.moveCenterTo(225, 2235);
- cpQA3.moveCenterTo(230, 2245);
- cpQA4.moveCenterTo(235, 2255);
- cpQ1.moveCenterTo(130, 2495);
- cpQ2.moveCenterTo(135, 2505);
- cpQ3.moveCenterTo(140, 2515);
- cpQ4.moveCenterTo(145, 2525);
- cpOQn.moveCenterTo(220, 2495);
- cpOQnplus3.moveCenterTo(235, 2525);
- cpQ2Rsh.moveCenterTo(35, 2625);
- cpQ3Rsh.moveCenterTo(40, 2635);
- cpORAMn.moveCenterTo(280, 2115);
- cpORAMnplus3.moveCenterTo(295, 2145);
- cpF3.moveCenterTo(330, 950);
- cpF11.moveCenterTo(255, 2090);
- cpF21.moveCenterTo(260, 2095);
- cpF31.moveCenterTo(265, 2100);
- cpF41.moveCenterTo(270, 2105);
- cpF12.moveCenterTo(255, 450);
- cpF22.moveCenterTo(260, 460);
- cpF32.moveCenterTo(265, 470);
- cpF42.moveCenterTo(270, 480);
- cpF1Lsh.moveCenterTo(10, 2355);
- cpF2Lsh.moveCenterTo(15, 2365);
- cpF3Lsh.moveCenterTo(20, 2375);
- cpF2Rsh.moveCenterTo(15, 2395);
- cpF3Rsh.moveCenterTo(20, 2405);
- cpF4Rsh.moveCenterTo(25, 2415);
- cpF13.moveCenterTo(10, 2385);
- cpF23.moveCenterTo(15, 2425);
- cpF33.moveCenterTo(20, 2435);
- cpF43.moveCenterTo(25, 2445);
- cpFneq0.moveCenterTo(315, 450);
-
- new GUIWire(submodelModifiable, I8, destDecode.getPin("I8"), new Point[0]);
- new GUIWire(submodelModifiable, I7, destDecode.getPin("I7"), new Point(5, 150), new Point(5, 60));
- new GUIWire(submodelModifiable, I6, destDecode.getPin("I6"), new Point(10, 250), new Point(10, 70));
- new GUIWire(submodelModifiable, I5, alu.getPin("I5"), new Point(130, 350), new Point(130, 2115));
- new GUIWire(submodelModifiable, I4, alu.getPin("I4"), new Point(125, 450), new Point(125, 2125));
- new GUIWire(submodelModifiable, I3, alu.getPin("I3"), new Point(120, 550), new Point(120, 2135));
- new GUIWire(submodelModifiable, I2, alu.getPin("I2"), new Point(115, 650), new Point(115, 2145));
- new GUIWire(submodelModifiable, I1, alu.getPin("I1"), new Point(110, 750), new Point(110, 2155));
- new GUIWire(submodelModifiable, I0, alu.getPin("I0"), new Point(105, 850), new Point(105, 2165));
- new GUIWire(submodelModifiable, C, cpC1, new Point[0]);
- new GUIWire(submodelModifiable, cpC1, cpC2, new Point[0]);
- new GUIWire(submodelModifiable, cpC2, notC.getPin("A"), new Point(155, 80));
- new GUIWire(submodelModifiable, cpC2, notC.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpC1, cpC3, new Point[0]);
- new GUIWire(submodelModifiable, cpC3, QAlatch.getPin("C"), new Point[0]);
- new GUIWire(submodelModifiable, cpC3, cpC4, new Point[0]);
- new GUIWire(submodelModifiable, cpC4, QBlatch.getPin("C"), new Point[0]);
- new GUIWire(submodelModifiable, cpC4, qreg.getPin("C"), new Point(155, 2485), new Point(80, 2485), new Point(80, 2495));
- new GUIWire(submodelModifiable, destDecode.getPin("LSH"), cpLSH, new Point(55, 90), new Point(55, 125), new Point(40, 125));
- new GUIWire(submodelModifiable, destDecode.getPin("NSH"), cpNSH, new Point(60, 50), new Point(60, 120), new Point(35, 120));
- new GUIWire(submodelModifiable, destDecode.getPin("RSH"), cpRSH, new Point(65, 60), new Point(65, 115), new Point(30, 115));
- new GUIWire(submodelModifiable, cpLSH, ramDsel.getPin("SA"), new Point[0]);
- new GUIWire(submodelModifiable, cpNSH, ramDsel.getPin("SB"), new Point[0]);
- new GUIWire(submodelModifiable, cpRSH, ramDsel.getPin("SC"), new Point[0]);
- new GUIWire(submodelModifiable, cpLSH, qregDsel.getPin("SA"), new Point(40, 2515));
- new GUIWire(submodelModifiable, cpNSH, qregDsel.getPin("SB"), new Point(35, 2525));
- new GUIWire(submodelModifiable, cpRSH, qregDsel.getPin("SC"), new Point(30, 2535));
- new GUIWire(submodelModifiable, A0, ram.getPin("A0"), new Point(80, 1550), new Point(80, 2225));
- new GUIWire(submodelModifiable, A1, ram.getPin("A1"), new Point(75, 1650), new Point(75, 2235));
- new GUIWire(submodelModifiable, A2, ram.getPin("A2"), new Point(70, 1750), new Point(70, 2245));
- new GUIWire(submodelModifiable, A3, ram.getPin("A3"), new Point(65, 1850), new Point(65, 2255));
- new GUIWire(submodelModifiable, B0, ram.getPin("B0"), new Point(60, 1950), new Point(60, 2265));
- new GUIWire(submodelModifiable, B1, ram.getPin("B1"), new Point(55, 2050), new Point(55, 2275));
- new GUIWire(submodelModifiable, B2, ram.getPin("B2"), new Point(50, 2150), new Point(50, 2285));
- new GUIWire(submodelModifiable, B3, ram.getPin("B3"), new Point(45, 2250), new Point(45, 2295));
- new GUIWire(submodelModifiable, ram.getPin("QA1"), QAlatch.getPin("D1"), new Point[0]);
- new GUIWire(submodelModifiable, ram.getPin("QA2"), QAlatch.getPin("D2"), new Point[0]);
- new GUIWire(submodelModifiable, ram.getPin("QA3"), QAlatch.getPin("D3"), new Point[0]);
- new GUIWire(submodelModifiable, ram.getPin("QA4"), QAlatch.getPin("D4"), new Point[0]);
- new GUIWire(submodelModifiable, ram.getPin("QB1"), QBlatch.getPin("D1"), new Point(150, 2265), new Point(150, 2280));
- new GUIWire(submodelModifiable, ram.getPin("QB2"), QBlatch.getPin("D2"), new Point(145, 2275), new Point(145, 2290));
- new GUIWire(submodelModifiable, ram.getPin("QB3"), QBlatch.getPin("D3"), new Point(140, 2285), new Point(140, 2300));
- new GUIWire(submodelModifiable, ram.getPin("QB4"), QBlatch.getPin("D4"), new Point(135, 2295), new Point(135, 2310));
- new GUIWire(submodelModifiable, Cn, alu.getPin("Cn"), new Point(100, 1050), new Point(100, 2175));
- new GUIWire(submodelModifiable, D1, alu.getPin("D1"), new Point(180, 1150), new Point(180, 2185));
- new GUIWire(submodelModifiable, D2, alu.getPin("D2"), new Point(175, 1250), new Point(175, 2195));
- new GUIWire(submodelModifiable, D3, alu.getPin("D3"), new Point(170, 1350), new Point(170, 2205));
- new GUIWire(submodelModifiable, D4, alu.getPin("D4"), new Point(165, 1450), new Point(165, 2215));
- new GUIWire(submodelModifiable, QAlatch.getPin("Q1"), cpQA1, new Point[0]);
- new GUIWire(submodelModifiable, QAlatch.getPin("Q2"), cpQA2, new Point[0]);
- new GUIWire(submodelModifiable, QAlatch.getPin("Q3"), cpQA3, new Point[0]);
- new GUIWire(submodelModifiable, QAlatch.getPin("Q4"), cpQA4, new Point[0]);
- new GUIWire(submodelModifiable, cpQA1, Ymux.getPin("I0_1"), new Point(220, 150));
- new GUIWire(submodelModifiable, cpQA2, Ymux.getPin("I0_2"), new Point(225, 160));
- new GUIWire(submodelModifiable, cpQA3, Ymux.getPin("I0_3"), new Point(230, 170));
- new GUIWire(submodelModifiable, cpQA4, Ymux.getPin("I0_4"), new Point(235, 180));
- new GUIWire(submodelModifiable, cpQA1, alu.getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, cpQA2, alu.getPin("A2"), new Point[0]);
- new GUIWire(submodelModifiable, cpQA3, alu.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, cpQA4, alu.getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, QBlatch.getPin("Q1"), alu.getPin("B1"), new Point(200, 2280), new Point(200, 2265));
- new GUIWire(submodelModifiable, QBlatch.getPin("Q2"), alu.getPin("B2"), new Point(205, 2290), new Point(205, 2275));
- new GUIWire(submodelModifiable, QBlatch.getPin("Q3"), alu.getPin("B3"), new Point(210, 2300), new Point(210, 2285));
- new GUIWire(submodelModifiable, QBlatch.getPin("Q4"), alu.getPin("B4"), new Point(215, 2310), new Point(215, 2295));
- new GUIWire(submodelModifiable, qreg.getPin("Q1"), cpQ1, new Point[0]);
- new GUIWire(submodelModifiable, qreg.getPin("Q2"), cpQ2, new Point[0]);
- new GUIWire(submodelModifiable, qreg.getPin("Q3"), cpQ3, new Point[0]);
- new GUIWire(submodelModifiable, qreg.getPin("Q4"), cpQ4, new Point[0]);
- new GUIWire(submodelModifiable, cpQ1, cpOQn, new Point[0]);
- new GUIWire(submodelModifiable, cpOQn, OQn, new Point(335, 2495), new Point(335, 1050));
- new GUIWire(submodelModifiable, cpQ4, cpOQnplus3, new Point[0]);
- new GUIWire(submodelModifiable, cpOQnplus3, OQnplus3, new Point(340, 2525), new Point(340, 1150));
- new GUIWire(submodelModifiable, cpQ2, cpQ2Rsh, new Point(135, 2670), new Point(30, 2670), new Point(30, 2635), new Point(35, 2635));
- new GUIWire(submodelModifiable, cpQ3, cpQ3Rsh, new Point(140, 2675), new Point(35, 2675), new Point(35, 2640), new Point(40, 2640));
- new GUIWire(submodelModifiable, cpQ2Rsh, qregDsel.getPin("C1"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ3Rsh, qregDsel.getPin("C2"), new Point[0]);
- new GUIWire(submodelModifiable, cpQ4, qregDsel.getPin("C3"), new Point(145, 2680), new Point(40, 2680), new Point(40, 2645));
- new GUIWire(submodelModifiable, IQnplus3, qregDsel.getPin("C4"), new Point(5, 2650), new Point(5, 2655));
- new GUIWire(submodelModifiable, IQn, qregDsel.getPin("A1"), new Point(5, 2550), new Point(5, 2545));
- new GUIWire(submodelModifiable, cpQ1, qregDsel.getPin("A2"), new Point(130, 2665), new Point(25, 2665), new Point(25, 2630),
- new Point(30, 2630), new Point(30, 2555));
- new GUIWire(submodelModifiable, cpOQn, alu.getPin("Q1"), new Point(220, 2305));
- new GUIWire(submodelModifiable, cpQ2, alu.getPin("Q2"), new Point(225, 2505), new Point(225, 2315));
- new GUIWire(submodelModifiable, cpQ3, alu.getPin("Q3"), new Point(230, 2515), new Point(230, 2325));
- new GUIWire(submodelModifiable, cpOQnplus3, alu.getPin("Q4"), new Point(235, 2335));
- new GUIWire(submodelModifiable, cpQ2Rsh, qregDsel.getPin("A3"), new Point(35, 2565));
- new GUIWire(submodelModifiable, cpQ3Rsh, qregDsel.getPin("A4"), new Point(40, 2575));
- new GUIWire(submodelModifiable, qregDsel.getPin("Y1"), qreg.getPin("D1"), new Point[0]);
- new GUIWire(submodelModifiable, qregDsel.getPin("Y2"), qreg.getPin("D2"), new Point[0]);
- new GUIWire(submodelModifiable, qregDsel.getPin("Y3"), qreg.getPin("D3"), new Point[0]);
- new GUIWire(submodelModifiable, qregDsel.getPin("Y4"), qreg.getPin("D4"), new Point[0]);
- new GUIWire(submodelModifiable, alu.getPin("Cn+4"), Cnplus4, new Point(315, 2155), new Point(315, 550));
- new GUIWire(submodelModifiable, alu.getPin("OVR"), OVR, new Point(320, 2165), new Point(320, 650));
- new GUIWire(submodelModifiable, alu.getPin("F1"), cpORAMn, new Point[0]);
- new GUIWire(submodelModifiable, alu.getPin("F4"), cpORAMnplus3, new Point[0]);
- new GUIWire(submodelModifiable, cpORAMn, ORAMn, new Point(325, 2115), new Point(325, 850));
- new GUIWire(submodelModifiable, cpORAMnplus3, cpF3, new Point(330, 2145));
- new GUIWire(submodelModifiable, cpF3, ORAMnplus3, new Point[0]);
- new GUIWire(submodelModifiable, cpF3, F3, new Point(330, 750));
- new GUIWire(submodelModifiable, cpORAMn, cpF11, new Point(280, 2090));
- new GUIWire(submodelModifiable, alu.getPin("F2"), cpF21, new Point(285, 2125), new Point(285, 2095));
- new GUIWire(submodelModifiable, alu.getPin("F3"), cpF31, new Point(290, 2135), new Point(290, 2100));
- new GUIWire(submodelModifiable, cpORAMnplus3, cpF41, new Point(295, 2105));
- new GUIWire(submodelModifiable, cpF11, cpF12, new Point[0]);
- new GUIWire(submodelModifiable, cpF21, cpF22, new Point[0]);
- new GUIWire(submodelModifiable, cpF31, cpF32, new Point[0]);
- new GUIWire(submodelModifiable, cpF41, cpF42, new Point[0]);
- new GUIWire(submodelModifiable, cpF12, Fneq0.getPin("A1"), new Point[0]);
- new GUIWire(submodelModifiable, cpF22, Fneq0.getPin("A2"), new Point[0]);
- new GUIWire(submodelModifiable, cpF32, Fneq0.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, cpF42, Fneq0.getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, cpF12, Ymux.getPin("I1_1"), new Point(255, 190));
- new GUIWire(submodelModifiable, cpF22, Ymux.getPin("I1_2"), new Point(260, 200));
- new GUIWire(submodelModifiable, cpF32, Ymux.getPin("I1_3"), new Point(265, 210));
- new GUIWire(submodelModifiable, cpF42, Ymux.getPin("I1_4"), new Point(270, 220));
- new GUIWire(submodelModifiable, cpF11, cpF1Lsh, new Point(10, 2090));
- new GUIWire(submodelModifiable, cpF21, cpF2Lsh, new Point(15, 2095));
- new GUIWire(submodelModifiable, cpF31, cpF3Lsh, new Point(20, 2100));
- new GUIWire(submodelModifiable, IRAMn, ramDsel.getPin("A1"), new Point(5, 2350), new Point(5, 2345));
- new GUIWire(submodelModifiable, cpF1Lsh, ramDsel.getPin("A2"), new Point[0]);
- new GUIWire(submodelModifiable, cpF2Lsh, ramDsel.getPin("A3"), new Point[0]);
- new GUIWire(submodelModifiable, cpF3Lsh, ramDsel.getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, cpF2Lsh, cpF2Rsh, new Point[0]);
- new GUIWire(submodelModifiable, cpF3Lsh, cpF3Rsh, new Point[0]);
- new GUIWire(submodelModifiable, cpF41, cpF4Rsh, new Point(25, 2105));
- new GUIWire(submodelModifiable, cpF1Lsh, cpF13, new Point[0]);
- new GUIWire(submodelModifiable, cpF13, ramDsel.getPin("B1"), new Point[0]);
- new GUIWire(submodelModifiable, cpF2Rsh, ramDsel.getPin("B2"), new Point[0]);
- new GUIWire(submodelModifiable, cpF3Rsh, ramDsel.getPin("B3"), new Point[0]);
- new GUIWire(submodelModifiable, cpF4Rsh, ramDsel.getPin("B4"), new Point[0]);
- new GUIWire(submodelModifiable, cpF2Rsh, cpF23, new Point[0]);
- new GUIWire(submodelModifiable, cpF3Rsh, cpF33, new Point[0]);
- new GUIWire(submodelModifiable, cpF4Rsh, cpF43, new Point[0]);
- new GUIWire(submodelModifiable, cpF23, ramDsel.getPin("C1"), new Point[0]);
- new GUIWire(submodelModifiable, cpF33, ramDsel.getPin("C2"), new Point[0]);
- new GUIWire(submodelModifiable, cpF43, ramDsel.getPin("C3"), new Point[0]);
- new GUIWire(submodelModifiable, IRAMnplus3, ramDsel.getPin("C4"), new Point(5, 2450), new Point(5, 2455));
- new GUIWire(submodelModifiable, cpF13, qregDsel.getPin("B1"), new Point(10, 2585));
- new GUIWire(submodelModifiable, cpF23, qregDsel.getPin("B2"), new Point(15, 2595));
- new GUIWire(submodelModifiable, cpF33, qregDsel.getPin("B3"), new Point(20, 2605));
- new GUIWire(submodelModifiable, cpF43, qregDsel.getPin("B4"), new Point(25, 2615));
- new GUIWire(submodelModifiable, ramDsel.getPin("Y1"), ram.getPin("D1"), new Point[0]);
- new GUIWire(submodelModifiable, ramDsel.getPin("Y2"), ram.getPin("D2"), new Point[0]);
- new GUIWire(submodelModifiable, ramDsel.getPin("Y3"), ram.getPin("D3"), new Point[0]);
- new GUIWire(submodelModifiable, ramDsel.getPin("Y4"), ram.getPin("D4"), new Point[0]);
- new GUIWire(submodelModifiable, destDecode.getPin("RAMWE"), ramweAnd.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, notC.getPin("Y"), ramweAnd.getPin("B"));
- new GUIWire(submodelModifiable, ramweAnd.getPin("Y"), ram.getPin("WE"), new Point(230, 70), new Point(230, 105), new Point(90, 105),
- new Point(90, 2305));
- new GUIWire(submodelModifiable, destDecode.getPin("QWE"), qreg.getPin("WE"), new Point(85, 100), new Point(85, 2505));
- new GUIWire(submodelModifiable, destDecode.getPin("YF"), Ymux.getPin("S0"), new Point(70, 80), new Point(70, 140));
- new GUIWire(submodelModifiable, Ymux.getPin("Y1"), Y1, new Point(335, 140), new Point(335, 50));
- new GUIWire(submodelModifiable, Ymux.getPin("Y2"), Y2, new Point[0]);
- new GUIWire(submodelModifiable, Ymux.getPin("Y3"), Y3, new Point(335, 160), new Point(335, 250));
- new GUIWire(submodelModifiable, Ymux.getPin("Y4"), Y4, new Point(325, 170), new Point(325, 350));
- new GUIWire(submodelModifiable, Fneq0.getPin("Y"), cpFneq0, new Point[0]);
- new GUIWire(submodelModifiable, cpFneq0, notFneq0.getPin("A"), new Point(315, 445));
- new GUIWire(submodelModifiable, cpFneq0, notFneq0.getPin("B"), new Point(315, 455));
- new GUIWire(submodelModifiable, notFneq0.getPin("Y"), Feq0, new Point[0]);
-
- addHighLevelStateSubcomponentID("regs", ram);
- addHighLevelStateSubcomponentID("qreg", qreg);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIAm2901.class.getCanonicalName(), (m, p) -> new GUIAm2901(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUInand3;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901ALUFuncDecode extends SimpleRectangularSubmodelComponent
-{
- public GUIAm2901ALUFuncDecode(ViewModelModifiable model)
- {
- super(model, 1, "GUIAm2901ALUFuncDecode");
- setSubmodelScale(.25);
- setInputPins("I5", "I4", "I3");
- setOutputPins("CinE", "L", "SN", "SBE", "FN", "RN");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin I5 = getSubmodelPin("I5");
- Pin I4 = getSubmodelPin("I4");
- Pin I3 = getSubmodelPin("I3");
- Pin CinE = getSubmodelPin("CinE");
- Pin L = getSubmodelPin("L");
- Pin SN = getSubmodelPin("SN");
- Pin SBE = getSubmodelPin("SBE");
- Pin FN = getSubmodelPin("FN");
- Pin RN = getSubmodelPin("RN");
-
- GUINandGate notI5 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notI4 = new GUINandGate(submodelModifiable, 1);
- GUInand3 nandI4I3NotI5 = new GUInand3(submodelModifiable);
- GUINandGate nandI5NotI4 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandI3I4 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandL = new GUINandGate(submodelModifiable, 1);
- GUIand andSBE = new GUIand(submodelModifiable);
-
- WireCrossPoint cpI51 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI52 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI53 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI41 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI42 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI43 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI44 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI31 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI32 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI51 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI52 = new WireCrossPoint(submodelModifiable, 1);
-
- notI5.moveTo(15, 10);
- notI4.moveTo(15, 50);
- nandI4I3NotI5.moveTo(55, 10);
- nandI5NotI4.moveTo(55, 45);
- nandI3I4.moveTo(55, 70);
- nandL.moveTo(100, 50);
- andSBE.moveTo(100, 135);
- cpI51.moveCenterTo(5, 20);
- cpI52.moveCenterTo(5, 25);
- cpI53.moveCenterTo(5, 45);
- cpI41.moveCenterTo(10, 60);
- cpI42.moveCenterTo(10, 55);
- cpI43.moveCenterTo(10, 65);
- cpI44.moveCenterTo(10, 85);
- cpI31.moveCenterTo(50, 100);
- cpI32.moveCenterTo(50, 75);
- cpNotI51.moveCenterTo(40, 20);
- cpNotI52.moveCenterTo(40, 35);
-
- new GUIWire(submodelModifiable, I5, cpI51, new Point[0]);
- new GUIWire(submodelModifiable, cpI51, notI5.getPin("A"), new Point(5, 15));
- new GUIWire(submodelModifiable, cpI51, cpI52, new Point[0]);
- new GUIWire(submodelModifiable, cpI52, notI5.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpI52, cpI53, new Point[0]);
- new GUIWire(submodelModifiable, cpI53, nandI5NotI4.getPin("A"), new Point(45, 45), new Point(45, 50));
- new GUIWire(submodelModifiable, cpI53, FN, new Point(5, 180));
- new GUIWire(submodelModifiable, I4, cpI41, new Point[0]);
- new GUIWire(submodelModifiable, cpI41, cpI42, new Point[0]);
- new GUIWire(submodelModifiable, cpI42, nandI4I3NotI5.getPin("A"), new Point(10, 40), new Point(45, 40), new Point(45, 15));
- new GUIWire(submodelModifiable, cpI42, notI4.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, cpI41, cpI43, new Point[0]);
- new GUIWire(submodelModifiable, cpI43, notI4.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpI43, cpI44, new Point[0]);
- new GUIWire(submodelModifiable, cpI44, nandI3I4.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpI44, SN, new Point(10, 105), new Point(135, 105), new Point(135, 100));
- new GUIWire(submodelModifiable, I3, cpI31, new Point(50, 100));
- new GUIWire(submodelModifiable, cpI31, RN, new Point(50, 220));
- new GUIWire(submodelModifiable, cpI31, cpI32, new Point[0]);
- new GUIWire(submodelModifiable, cpI32, nandI4I3NotI5.getPin("B"), new Point(50, 25));
- new GUIWire(submodelModifiable, cpI32, nandI3I4.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, notI5.getPin("Y"), cpNotI51, new Point[0]);
- new GUIWire(submodelModifiable, cpNotI51, CinE, new Point(40, 5), new Point(115, 5), new Point(115, 20));
- new GUIWire(submodelModifiable, cpNotI51, cpNotI52, new Point[0]);
- new GUIWire(submodelModifiable, cpNotI52, nandI4I3NotI5.getPin("C"), new Point[0]);
- new GUIWire(submodelModifiable, cpNotI52, andSBE.getPin("B"), new Point(40, 150));
- new GUIWire(submodelModifiable, notI4.getPin("Y"), nandI5NotI4.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, nandI4I3NotI5.getPin("Y"), nandL.getPin("A"));
- new GUIWire(submodelModifiable, nandI5NotI4.getPin("Y"), nandL.getPin("B"));
- new GUIWire(submodelModifiable, nandI3I4.getPin("Y"), andSBE.getPin("A"));
- new GUIWire(submodelModifiable, nandL.getPin("Y"), L, new Point[0]);
- new GUIWire(submodelModifiable, andSBE.getPin("Y"), SBE, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIAm2901ALUFuncDecode.class.getCanonicalName(),
- (m, p) -> new GUIAm2901ALUFuncDecode(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIxor;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901ALUInclDecode extends SimpleRectangularSubmodelComponent
-{
- public GUIAm2901ALUInclDecode(ViewModelModifiable model)
- {
- super(model, 1, "GUIAm2901ALUInclDecode");
- setSubmodelScale(.25);
- setInputPins("I5", "I4", "I3", "Cn", "R1", "R2", "R3", "R4", "S1", "S2", "S3", "S4");
- setOutputPins("F1", "F2", "F3", "F4", "Cn+4", "OVR");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin I5 = getSubmodelPin("I5");
- Pin I4 = getSubmodelPin("I4");
- Pin I3 = getSubmodelPin("I3");
- Pin Cn = getSubmodelPin("Cn");
- Pin R1 = getSubmodelPin("R1");
- Pin R2 = getSubmodelPin("R2");
- Pin R3 = getSubmodelPin("R3");
- Pin R4 = getSubmodelPin("R4");
- Pin S1 = getSubmodelPin("S1");
- Pin S2 = getSubmodelPin("S2");
- Pin S3 = getSubmodelPin("S3");
- Pin S4 = getSubmodelPin("S4");
- Pin F1 = getSubmodelPin("F1");
- Pin F2 = getSubmodelPin("F2");
- Pin F3 = getSubmodelPin("F3");
- Pin F4 = getSubmodelPin("F4");
- Pin Cnplus4 = getSubmodelPin("Cn+4");
- Pin OVR = getSubmodelPin("OVR");
-
- GUIAm2901ALUFuncDecode funcDecode = new GUIAm2901ALUFuncDecode(submodelModifiable);
- GUIAm2901ALUOneBit alu1 = new GUIAm2901ALUOneBit(submodelModifiable);
- GUIAm2901ALUOneBit alu2 = new GUIAm2901ALUOneBit(submodelModifiable);
- GUIAm2901ALUOneBit alu3 = new GUIAm2901ALUOneBit(submodelModifiable);
- GUIAm2901ALUOneBit alu4 = new GUIAm2901ALUOneBit(submodelModifiable);
- GUIxor xorOVR = new GUIxor(submodelModifiable);
-
- WireCrossPoint cpCoutE1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpCoutE2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpCoutE3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpCinE1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpCinE2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpCinE3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpRN1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpRN2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpRN3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpSN1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpSN2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpSN3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpFN1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpFN2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpFN3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpL1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpL2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpL3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpCnplus3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpCnplus4 = new WireCrossPoint(submodelModifiable, 1);
-
- funcDecode.moveTo(20, 2.5);
- alu1.moveTo(45, 80);
- alu2.moveTo(45, 180);
- alu3.moveTo(45, 280);
- alu4.moveTo(45, 380);
- xorOVR.moveTo(95, 400);
- cpCoutE1.moveCenterTo(25, 95);
- cpCoutE2.moveCenterTo(25, 195);
- cpCoutE3.moveCenterTo(25, 295);
- cpCinE1.moveCenterTo(27.5, 105);
- cpCinE2.moveCenterTo(27.5, 205);
- cpCinE3.moveCenterTo(27.5, 305);
- cpRN1.moveCenterTo(30, 125);
- cpRN2.moveCenterTo(30, 225);
- cpRN3.moveCenterTo(30, 325);
- cpSN1.moveCenterTo(32.5, 145);
- cpSN2.moveCenterTo(32.5, 245);
- cpSN3.moveCenterTo(32.5, 345);
- cpFN1.moveCenterTo(35, 155);
- cpFN2.moveCenterTo(35, 255);
- cpFN3.moveCenterTo(35, 355);
- cpL1.moveCenterTo(37.5, 165);
- cpL2.moveCenterTo(37.5, 265);
- cpL3.moveCenterTo(37.5, 365);
- cpCnplus3.moveCenterTo(85, 375);
- cpCnplus4.moveCenterTo(85, 385);
-
- new GUIWire(submodelModifiable, I5, funcDecode.getPin("I5"), new Point(5, 20), new Point(5, 7.5));
- new GUIWire(submodelModifiable, I4, funcDecode.getPin("I4"), new Point(10, 60), new Point(10, 17.5));
- new GUIWire(submodelModifiable, I3, funcDecode.getPin("I3"), new Point(15, 100), new Point(15, 27.5));
- new GUIWire(submodelModifiable, funcDecode.getPin("SBE"), cpCoutE1, new Point(62.5, 37.5), new Point(62.5, 70), new Point(25, 70));
- new GUIWire(submodelModifiable, cpCoutE1, cpCoutE2, new Point[0]);
- new GUIWire(submodelModifiable, cpCoutE2, cpCoutE3, new Point[0]);
- new GUIWire(submodelModifiable, cpCoutE1, alu1.getPin("CoutE"), new Point[0]);
- new GUIWire(submodelModifiable, cpCoutE2, alu2.getPin("CoutE"), new Point[0]);
- new GUIWire(submodelModifiable, cpCoutE3, alu3.getPin("CoutE"), new Point[0]);
- new GUIWire(submodelModifiable, cpCoutE3, alu4.getPin("CoutE"), new Point(25, 395));
- new GUIWire(submodelModifiable, funcDecode.getPin("CinE"), cpCinE1, new Point(70, 7.5), new Point(70, 77.5), new Point(27.5, 77.5));
- new GUIWire(submodelModifiable, cpCinE1, cpCinE2, new Point[0]);
- new GUIWire(submodelModifiable, cpCinE2, cpCinE3, new Point[0]);
- new GUIWire(submodelModifiable, cpCinE1, alu1.getPin("CinE"), new Point[0]);
- new GUIWire(submodelModifiable, cpCinE2, alu2.getPin("CinE"), new Point[0]);
- new GUIWire(submodelModifiable, cpCinE3, alu3.getPin("CinE"), new Point[0]);
- new GUIWire(submodelModifiable, cpCinE3, alu4.getPin("CinE"), new Point(27.5, 405));
- new GUIWire(submodelModifiable, funcDecode.getPin("RN"), cpRN1, new Point(57.5, 57.5), new Point(57.5, 65), new Point(30, 65));
- new GUIWire(submodelModifiable, cpRN1, cpRN2, new Point[0]);
- new GUIWire(submodelModifiable, cpRN2, cpRN3, new Point[0]);
- new GUIWire(submodelModifiable, cpRN1, alu1.getPin("RN"), new Point[0]);
- new GUIWire(submodelModifiable, cpRN2, alu2.getPin("RN"), new Point[0]);
- new GUIWire(submodelModifiable, cpRN3, alu3.getPin("RN"), new Point[0]);
- new GUIWire(submodelModifiable, cpRN3, alu4.getPin("RN"), new Point(30, 425));
- new GUIWire(submodelModifiable, funcDecode.getPin("SN"), cpSN1, new Point(65, 27.5), new Point(65, 72.5), new Point(32.5, 72.5));
- new GUIWire(submodelModifiable, cpSN1, cpSN2, new Point[0]);
- new GUIWire(submodelModifiable, cpSN2, cpSN3, new Point[0]);
- new GUIWire(submodelModifiable, cpSN1, alu1.getPin("SN"), new Point[0]);
- new GUIWire(submodelModifiable, cpSN2, alu2.getPin("SN"), new Point[0]);
- new GUIWire(submodelModifiable, cpSN3, alu3.getPin("SN"), new Point[0]);
- new GUIWire(submodelModifiable, cpSN3, alu4.getPin("SN"), new Point(32.5, 445));
- new GUIWire(submodelModifiable, funcDecode.getPin("FN"), cpFN1, new Point(60, 47.5), new Point(60, 67.5), new Point(35, 67.5));
- new GUIWire(submodelModifiable, cpFN1, cpFN2, new Point[0]);
- new GUIWire(submodelModifiable, cpFN2, cpFN3, new Point[0]);
- new GUIWire(submodelModifiable, cpFN1, alu1.getPin("FN"), new Point[0]);
- new GUIWire(submodelModifiable, cpFN2, alu2.getPin("FN"), new Point[0]);
- new GUIWire(submodelModifiable, cpFN3, alu3.getPin("FN"), new Point[0]);
- new GUIWire(submodelModifiable, cpFN3, alu4.getPin("FN"), new Point(35, 455));
- new GUIWire(submodelModifiable, funcDecode.getPin("L"), cpL1, new Point(67.5, 17.5), new Point(67.5, 75), new Point(37.5, 75));
- new GUIWire(submodelModifiable, cpL1, cpL2, new Point[0]);
- new GUIWire(submodelModifiable, cpL2, cpL3, new Point[0]);
- new GUIWire(submodelModifiable, cpL1, alu1.getPin("L"), new Point[0]);
- new GUIWire(submodelModifiable, cpL2, alu2.getPin("L"), new Point[0]);
- new GUIWire(submodelModifiable, cpL3, alu3.getPin("L"), new Point[0]);
- new GUIWire(submodelModifiable, cpL3, alu4.getPin("L"), new Point(37.5, 465));
- new GUIWire(submodelModifiable, R1, alu1.getPin("R"), new Point(10, 180), new Point(10, 115));
- new GUIWire(submodelModifiable, R2, alu2.getPin("R"), new Point(10, 220), new Point(10, 215));
- new GUIWire(submodelModifiable, R3, alu3.getPin("R"), new Point(10, 260), new Point(10, 315));
- new GUIWire(submodelModifiable, R4, alu4.getPin("R"), new Point(20, 300), new Point(20, 415));
- new GUIWire(submodelModifiable, S1, alu1.getPin("S"), new Point(15, 340), new Point(15, 135));
- new GUIWire(submodelModifiable, S2, alu2.getPin("S"), new Point(5, 380), new Point(5, 235));
- new GUIWire(submodelModifiable, S3, alu3.getPin("S"), new Point(10, 420), new Point(10, 335));
- new GUIWire(submodelModifiable, S4, alu4.getPin("S"), new Point(10, 460), new Point(10, 435));
- new GUIWire(submodelModifiable, Cn, alu1.getPin("Cin"), new Point(5, 140), new Point(5, 85));
- new GUIWire(submodelModifiable, alu1.getPin("Cout"), alu2.getPin("Cin"), new Point(85, 85), new Point(85, 175), new Point(40, 175),
- new Point(40, 185));
- new GUIWire(submodelModifiable, alu2.getPin("Cout"), alu3.getPin("Cin"), new Point(85, 185), new Point(85, 275), new Point(40, 275),
- new Point(40, 285));
- new GUIWire(submodelModifiable, alu3.getPin("Cout"), cpCnplus3, new Point(85, 285));
- new GUIWire(submodelModifiable, cpCnplus3, alu4.getPin("Cin"), new Point(40, 375), new Point(40, 385));
- new GUIWire(submodelModifiable, alu4.getPin("Cout"), cpCnplus4, new Point[0]);
- new GUIWire(submodelModifiable, alu1.getPin("F"), F1, new Point(90, 95), new Point(90, 20));
- new GUIWire(submodelModifiable, alu2.getPin("F"), F2, new Point(95, 195), new Point(95, 60));
- new GUIWire(submodelModifiable, alu3.getPin("F"), F3, new Point(100, 295), new Point(100, 100));
- new GUIWire(submodelModifiable, alu4.getPin("F"), F4, new Point(105, 395), new Point(105, 140));
- new GUIWire(submodelModifiable, cpCnplus3, xorOVR.getPin("A"), new Point(90, 375), new Point(90, 405));
- new GUIWire(submodelModifiable, cpCnplus4, xorOVR.getPin("B"), new Point(85, 415));
- new GUIWire(submodelModifiable, cpCnplus4, Cnplus4, new Point(130, 385), new Point(130, 180));
- new GUIWire(submodelModifiable, xorOVR.getPin("Y"), OVR);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIAm2901ALUInclDecode.class.getCanonicalName(),
- (m, p) -> new GUIAm2901ALUInclDecode(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIsel2_4;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIsel3_4;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901ALUInclSourceDecodeInclFunctionDecode extends SimpleRectangularSubmodelComponent
-{
- public GUIAm2901ALUInclSourceDecodeInclFunctionDecode(ViewModelModifiable model)
- {
- super(model, 1, "GUIAm2901ALUInclSourceDecodeInclFunctionDecode");
- setSubmodelScale(.25);
- setInputPins("I5", "I4", "I3", "I2", "I1", "I0", "Cn", "D1", "D2", "D3", "D4", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "Q1",
- "Q2", "Q3", "Q4");
- setOutputPins("F1", "F2", "F3", "F4", "Cn+4", "OVR");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin I5 = getSubmodelPin("I5");
- Pin I4 = getSubmodelPin("I4");
- Pin I3 = getSubmodelPin("I3");
- Pin I2 = getSubmodelPin("I2");
- Pin I1 = getSubmodelPin("I1");
- Pin I0 = getSubmodelPin("I0");
- Pin Cn = getSubmodelPin("Cn");
- Pin D1 = getSubmodelPin("D1");
- Pin D2 = getSubmodelPin("D2");
- Pin D3 = getSubmodelPin("D3");
- Pin D4 = getSubmodelPin("D4");
- Pin A1 = getSubmodelPin("A1");
- Pin A2 = getSubmodelPin("A2");
- Pin A3 = getSubmodelPin("A3");
- Pin A4 = getSubmodelPin("A4");
- Pin B1 = getSubmodelPin("B1");
- Pin B2 = getSubmodelPin("B2");
- Pin B3 = getSubmodelPin("B3");
- Pin B4 = getSubmodelPin("B4");
- Pin Q1 = getSubmodelPin("Q1");
- Pin Q2 = getSubmodelPin("Q2");
- Pin Q3 = getSubmodelPin("Q3");
- Pin Q4 = getSubmodelPin("Q4");
- Pin F1 = getSubmodelPin("F1");
- Pin F2 = getSubmodelPin("F2");
- Pin F3 = getSubmodelPin("F3");
- Pin F4 = getSubmodelPin("F4");
- Pin Cnplus4 = getSubmodelPin("Cn+4");
- Pin OVR = getSubmodelPin("OVR");
-
- GUIAm2901SourceDecode sourceDecode = new GUIAm2901SourceDecode(submodelModifiable);
- GUIsel2_4 selR = new GUIsel2_4(submodelModifiable);
- GUIsel3_4 selS = new GUIsel3_4(submodelModifiable);
- GUIAm2901ALUInclDecode alu = new GUIAm2901ALUInclDecode(submodelModifiable);
-
- WireCrossPoint cpA1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA3 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpA4 = new WireCrossPoint(submodelModifiable, 1);
-
- sourceDecode.moveTo(15, 165);
- selR.moveTo(45, 365);
- selS.moveTo(45, 575);
- alu.moveTo(60, 15);
- cpA1.moveCenterTo(10, 460);
- cpA2.moveCenterTo(15, 500);
- cpA3.moveCenterTo(20, 540);
- cpA4.moveCenterTo(25, 580);
-
- new GUIWire(submodelModifiable, I5, alu.getPin("I5"), new Point[0]);
- new GUIWire(submodelModifiable, I4, alu.getPin("I4"), new Point(5, 60), new Point(5, 30));
- new GUIWire(submodelModifiable, I3, alu.getPin("I3"), new Point(15, 100), new Point(15, 40));
- new GUIWire(submodelModifiable, I2, sourceDecode.getPin("I2"), new Point(5, 140), new Point(5, 170));
- new GUIWire(submodelModifiable, I1, sourceDecode.getPin("I1"), new Point[0]);
- new GUIWire(submodelModifiable, I0, sourceDecode.getPin("I0"), new Point(5, 220), new Point(5, 190));
- new GUIWire(submodelModifiable, Cn, alu.getPin("Cn"), new Point(10, 260), new Point(10, 50));
- new GUIWire(submodelModifiable, D1, selR.getPin("A1"), new Point(15, 300), new Point(15, 390));
- new GUIWire(submodelModifiable, D2, selR.getPin("A2"), new Point(10, 340), new Point(10, 400));
- new GUIWire(submodelModifiable, D3, selR.getPin("A3"), new Point(5, 380), new Point(5, 410));
- new GUIWire(submodelModifiable, D4, selR.getPin("A4"), new Point[0]);
- new GUIWire(submodelModifiable, A1, cpA1, new Point[0]);
- new GUIWire(submodelModifiable, A2, cpA2, new Point[0]);
- new GUIWire(submodelModifiable, A3, cpA3, new Point[0]);
- new GUIWire(submodelModifiable, A4, cpA4, new Point[0]);
- new GUIWire(submodelModifiable, cpA1, selR.getPin("B1"), new Point(10, 430));
- new GUIWire(submodelModifiable, cpA2, selR.getPin("B2"), new Point(15, 440));
- new GUIWire(submodelModifiable, cpA3, selR.getPin("B3"), new Point(20, 450));
- new GUIWire(submodelModifiable, cpA4, selR.getPin("B4"), new Point(25, 460));
- new GUIWire(submodelModifiable, cpA1, selS.getPin("A1"), new Point(10, 610));
- new GUIWire(submodelModifiable, cpA2, selS.getPin("A2"), new Point(15, 620));
- new GUIWire(submodelModifiable, cpA3, selS.getPin("A3"), new Point(20, 630));
- new GUIWire(submodelModifiable, cpA4, selS.getPin("A4"), new Point(25, 640));
- new GUIWire(submodelModifiable, B1, selS.getPin("B1"), new Point(5, 620), new Point(5, 650));
- new GUIWire(submodelModifiable, B2, selS.getPin("B2"), new Point[0]);
- new GUIWire(submodelModifiable, B3, selS.getPin("B3"), new Point(5, 700), new Point(5, 670));
- new GUIWire(submodelModifiable, B4, selS.getPin("B4"), new Point(10, 740), new Point(10, 680));
- new GUIWire(submodelModifiable, Q1, selS.getPin("C1"), new Point(15, 780), new Point(15, 690));
- new GUIWire(submodelModifiable, Q2, selS.getPin("C2"), new Point(20, 820), new Point(20, 700));
- new GUIWire(submodelModifiable, Q3, selS.getPin("C3"), new Point(25, 860), new Point(25, 710));
- new GUIWire(submodelModifiable, Q4, selS.getPin("C4"), new Point(30, 900), new Point(30, 720));
- new GUIWire(submodelModifiable, sourceDecode.getPin("SQ"), selS.getPin("SC"), new Point(75, 170), new Point(75, 240),
- new Point(30, 240), new Point(30, 600));
- new GUIWire(submodelModifiable, sourceDecode.getPin("RA"), selR.getPin("SB"), new Point(70, 180), new Point(70, 235),
- new Point(20, 235), new Point(20, 380));
- new GUIWire(submodelModifiable, sourceDecode.getPin("SB"), selS.getPin("SB"), new Point(65, 190), new Point(65, 230),
- new Point(35, 230), new Point(35, 590));
- new GUIWire(submodelModifiable, sourceDecode.getPin("SA"), selS.getPin("SA"), new Point(60, 200), new Point(60, 225),
- new Point(40, 225), new Point(40, 580));
- new GUIWire(submodelModifiable, sourceDecode.getPin("RD"), selR.getPin("SA"), new Point(55, 210), new Point(55, 220),
- new Point(25, 220), new Point(25, 370));
- new GUIWire(submodelModifiable, selR.getPin("Y1"), alu.getPin("R1"), new Point(82.5, 370), new Point(82.5, 162.5),
- new Point(20, 162.5), new Point(20, 60));
- new GUIWire(submodelModifiable, selR.getPin("Y2"), alu.getPin("R2"), new Point(85, 380), new Point(85, 160), new Point(22.5, 160),
- new Point(22.5, 70));
- new GUIWire(submodelModifiable, selR.getPin("Y3"), alu.getPin("R3"), new Point(87.5, 390), new Point(87.5, 157.5),
- new Point(25, 157.5), new Point(25, 80));
- new GUIWire(submodelModifiable, selR.getPin("Y4"), alu.getPin("R4"), new Point(90, 400), new Point(90, 155), new Point(27.5, 155),
- new Point(27.5, 90));
- new GUIWire(submodelModifiable, selS.getPin("Y1"), alu.getPin("S1"), new Point(92.5, 580), new Point(92.5, 152.5),
- new Point(30, 152.5), new Point(30, 100));
- new GUIWire(submodelModifiable, selS.getPin("Y2"), alu.getPin("S2"), new Point(95, 590), new Point(95, 150), new Point(32.5, 150),
- new Point(32.5, 110));
- new GUIWire(submodelModifiable, selS.getPin("Y3"), alu.getPin("S3"), new Point(97.5, 600), new Point(97.5, 147.5),
- new Point(35, 147.5), new Point(35, 120));
- new GUIWire(submodelModifiable, selS.getPin("Y4"), alu.getPin("S4"), new Point(100, 610), new Point(100, 145), new Point(37.5, 145),
- new Point(37.5, 130));
- new GUIWire(submodelModifiable, alu.getPin("F1"), F1, new Point[0]);
- new GUIWire(submodelModifiable, alu.getPin("F2"), F2, new Point(135, 30), new Point(135, 60));
- new GUIWire(submodelModifiable, alu.getPin("F3"), F3, new Point(130, 40), new Point(130, 100));
- new GUIWire(submodelModifiable, alu.getPin("F4"), F4, new Point(125, 50), new Point(125, 140));
- new GUIWire(submodelModifiable, alu.getPin("Cn+4"), Cnplus4, new Point(120, 60), new Point(120, 180));
- new GUIWire(submodelModifiable, alu.getPin("OVR"), OVR, new Point(115, 70), new Point(115, 220));
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIAm2901ALUInclSourceDecodeInclFunctionDecode.class.getCanonicalName(),
- (m, p) -> new GUIAm2901ALUInclSourceDecodeInclFunctionDecode(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIfulladder;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUImux1;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIxor;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901ALUOneBit extends SimpleRectangularSubmodelComponent
-{
- public GUIAm2901ALUOneBit(ViewModelModifiable model)
- {
- super(model, 1, "GUIAm2901ALUOneBit");
- setSubmodelScale(.2);
- setInputPins("Cin", "CoutE", "CinE", "R", "RN", "S", "SN", "FN", "L");
- setOutputPins("Cout", "F");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin Cin = getSubmodelPin("Cin");
- Pin CoutE = getSubmodelPin("CoutE");
- Pin CinE = getSubmodelPin("CinE");
- Pin R = getSubmodelPin("R");
- Pin RN = getSubmodelPin("RN");
- Pin S = getSubmodelPin("S");
- Pin SN = getSubmodelPin("SN");
- Pin FN = getSubmodelPin("FN");
- Pin L = getSubmodelPin("L");
- Pin Cout = getSubmodelPin("Cout");
- Pin F = getSubmodelPin("F");
-
- GUIand Cinand = new GUIand(submodelModifiable);
- GUIxor Rxor = new GUIxor(submodelModifiable);
- GUIxor Sxor = new GUIxor(submodelModifiable);
- GUIfulladder add = new GUIfulladder(submodelModifiable);
- GUINandGate nand = new GUINandGate(submodelModifiable, 1);
- GUIand Coutand = new GUIand(submodelModifiable);
- GUImux1 Fsel = new GUImux1(submodelModifiable);
- GUIxor Fxor = new GUIxor(submodelModifiable);
-
- WireCrossPoint cpRXored = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpSXored = new WireCrossPoint(submodelModifiable, 1);
-
- Cinand.moveTo(10, 20);
- Rxor.moveTo(10, 190);
- Sxor.moveTo(10, 290);
- add.moveTo(60, 20);
- nand.moveTo(60, 55);
- Coutand.moveTo(135, 20);
- Fsel.moveTo(90, 70);
- Fxor.moveTo(135, 70);
- cpRXored.moveCenterTo(50, 60);
- cpSXored.moveCenterTo(55, 70);
-
- new GUIWire(submodelModifiable, Cin, Cinand.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, CoutE, Coutand.getPin("A"), new Point(5, 75), new Point(5, 10), new Point(130, 10),
- new Point(130, 25));
- new GUIWire(submodelModifiable, CinE, Cinand.getPin("B"), new Point(7.5, 125), new Point(7.5, 35));
- new GUIWire(submodelModifiable, R, Rxor.getPin("A"));
- new GUIWire(submodelModifiable, RN, Rxor.getPin("B"));
- new GUIWire(submodelModifiable, S, Sxor.getPin("A"));
- new GUIWire(submodelModifiable, SN, Sxor.getPin("B"));
- new GUIWire(submodelModifiable, FN, Fxor.getPin("B"), new Point(130, 375), new Point(130, 85));
- new GUIWire(submodelModifiable, L, Fsel.getPin("S0"), new Point(87.5, 425), new Point(87.5, 75));
- new GUIWire(submodelModifiable, Cinand.getPin("Y"), add.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, Rxor.getPin("Y"), cpRXored, new Point(50, 195));
- new GUIWire(submodelModifiable, cpRXored, add.getPin("B"), new Point(50, 35));
- new GUIWire(submodelModifiable, cpRXored, nand.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, Sxor.getPin("Y"), cpSXored, new Point(55, 295));
- new GUIWire(submodelModifiable, cpSXored, add.getPin("C"), new Point(55, 45));
- new GUIWire(submodelModifiable, cpSXored, nand.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, add.getPin("Y"), Fsel.getPin("I0"), new Point(100, 25), new Point(100, 65), new Point(85, 65),
- new Point(85, 85));
- new GUIWire(submodelModifiable, add.getPin("Z"), Coutand.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, nand.getPin("Y"), Fsel.getPin("I1"), new Point(82.5, 65), new Point(82.5, 95));
- new GUIWire(submodelModifiable, Fsel.getPin("Y"), Fxor.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, Coutand.getPin("Y"), Cout, new Point[0]);
- new GUIWire(submodelModifiable, Fxor.getPin("Y"), F, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIAm2901ALUOneBit.class.getCanonicalName(), (m, p) -> new GUIAm2901ALUOneBit(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901DestDecode extends SimpleRectangularSubmodelComponent
-{
- public GUIAm2901DestDecode(ViewModelModifiable model)
- {
- super(model, 1, "GUIAm2901DestDecode");
- setSubmodelScale(.25);
- setInputPins("I8", "I7", "I6");
- setOutputPins("NSH", "RSH", "RAMWE", "YF", "LSH", "QWE");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin I8 = getSubmodelPin("I8");
- Pin I7 = getSubmodelPin("I7");
- Pin I6 = getSubmodelPin("I6");
- Pin NSH = getSubmodelPin("NSH");
- Pin RSH = getSubmodelPin("RSH");
- Pin RAMWE = getSubmodelPin("RAMWE");
- Pin YF = getSubmodelPin("YF");
- Pin LSH = getSubmodelPin("LSH");
- Pin QWE = getSubmodelPin("QWE");
-
- GUINandGate notI8 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notI7 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandI8I7 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notI6 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandRSH = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandRAMWE = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandI7NotI8 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandLSH = new GUINandGate(submodelModifiable, 1);
- GUINandGate notRSH = new GUINandGate(submodelModifiable, 1);
- GUINandGate andI7NotI8 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandQWE = new GUINandGate(submodelModifiable, 1);
- GUINandGate nandYF = new GUINandGate(submodelModifiable, 1);
- GUINandGate notQWE = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cpI81 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI82 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI83 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI71 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI72 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI73 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI6 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI7 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI81 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI82 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNandI8I7 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotRSH = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNandI7NotI81 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNandI7NotI82 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI6 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNandQWE = new WireCrossPoint(submodelModifiable, 1);
-
- notI8.moveTo(15, 10);
- notI7.moveTo(15, 50);
- nandI8I7.moveTo(15, 90);
- notI6.moveTo(15, 150);
- nandRSH.moveTo(50, 10);
- nandRAMWE.moveTo(50, 50);
- nandI7NotI8.moveTo(50, 90);
- nandLSH.moveTo(50, 130);
- notRSH.moveTo(80, 10);
- andI7NotI8.moveTo(80, 90);
- nandQWE.moveTo(80, 145);
- nandYF.moveTo(110, 105);
- notQWE.moveTo(115, 210);
- cpI81.moveCenterTo(5, 20);
- cpI82.moveCenterTo(5, 15);
- cpI83.moveCenterTo(5, 25);
- cpI71.moveCenterTo(10, 60);
- cpI72.moveCenterTo(10, 65);
- cpI73.moveCenterTo(10, 105);
- cpI6.moveCenterTo(5, 155);
- cpNotI7.moveCenterTo(40, 60);
- cpNotI81.moveCenterTo(45, 20);
- cpNotI82.moveCenterTo(45, 55);
- cpNandI8I7.moveCenterTo(40, 135);
- cpNotRSH.moveCenterTo(75, 20);
- cpNandI7NotI81.moveCenterTo(75, 100);
- cpNandI7NotI82.moveCenterTo(75, 105);
- cpNotI6.moveCenterTo(75, 160);
- cpNandQWE.moveCenterTo(110, 215);
-
- new GUIWire(submodelModifiable, I8, cpI81, new Point[0]);
- new GUIWire(submodelModifiable, cpI81, cpI82, new Point[0]);
- new GUIWire(submodelModifiable, cpI81, cpI83, new Point[0]);
- new GUIWire(submodelModifiable, cpI82, notI8.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, cpI83, notI8.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, I7, cpI71, new Point[0]);
- new GUIWire(submodelModifiable, cpI71, notI7.getPin("A"), new Point(10, 55));
- new GUIWire(submodelModifiable, cpI71, cpI72, new Point[0]);
- new GUIWire(submodelModifiable, cpI72, notI7.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpI72, cpI73, new Point[0]);
- new GUIWire(submodelModifiable, cpI73, nandI8I7.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpI83, nandI8I7.getPin("A"), new Point(5, 95));
- new GUIWire(submodelModifiable, I6, cpI6, new Point(5, 100));
- new GUIWire(submodelModifiable, cpI6, notI6.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, cpI6, notI6.getPin("B"), new Point(5, 165));
- new GUIWire(submodelModifiable, cpI82, nandRSH.getPin("A"), new Point(5, 5), new Point(40, 5), new Point(40, 15));
- new GUIWire(submodelModifiable, notI7.getPin("Y"), cpNotI7, new Point[0]);
- new GUIWire(submodelModifiable, cpNotI7, nandRSH.getPin("B"), new Point(40, 25));
- new GUIWire(submodelModifiable, cpNotI7, nandRAMWE.getPin("B"), new Point(40, 65));
- new GUIWire(submodelModifiable, notI8.getPin("Y"), cpNotI81, new Point[0]);
- new GUIWire(submodelModifiable, cpNotI81, NSH, new Point(45, 5), new Point(135, 5), new Point(135, 20));
- new GUIWire(submodelModifiable, cpNotI81, cpNotI82, new Point[0]);
- new GUIWire(submodelModifiable, cpNotI82, nandRAMWE.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, cpNotI82, nandI7NotI8.getPin("A"), new Point(45, 95));
- new GUIWire(submodelModifiable, cpI73, nandI7NotI8.getPin("B"), new Point(10, 115), new Point(45, 115), new Point(45, 105));
- new GUIWire(submodelModifiable, nandI8I7.getPin("Y"), cpNandI8I7, new Point(40, 100));
- new GUIWire(submodelModifiable, cpNandI8I7, nandLSH.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, cpNandI8I7, nandLSH.getPin("B"), new Point(40, 145));
- new GUIWire(submodelModifiable, nandRSH.getPin("Y"), cpNotRSH, new Point[0]);
- new GUIWire(submodelModifiable, cpNotRSH, notRSH.getPin("A"), new Point(75, 15));
- new GUIWire(submodelModifiable, cpNotRSH, notRSH.getPin("B"), new Point(75, 25));
- new GUIWire(submodelModifiable, nandRAMWE.getPin("Y"), RAMWE, new Point(125, 60), new Point(125, 100));
- new GUIWire(submodelModifiable, nandI7NotI8.getPin("Y"), cpNandI7NotI81, new Point[0]);
- new GUIWire(submodelModifiable, cpNandI7NotI81, andI7NotI8.getPin("A"), new Point(75, 95));
- new GUIWire(submodelModifiable, cpNandI7NotI81, cpNandI7NotI82, new Point[0]);
- new GUIWire(submodelModifiable, cpNandI7NotI82, andI7NotI8.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, nandLSH.getPin("Y"), LSH, new Point(125, 140), new Point(125, 180));
- new GUIWire(submodelModifiable, cpNandI7NotI82, nandQWE.getPin("A"), new Point(75, 150));
- new GUIWire(submodelModifiable, notI6.getPin("Y"), cpNotI6, new Point[0]);
- new GUIWire(submodelModifiable, cpNotI6, nandQWE.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, notRSH.getPin("Y"), RSH, new Point(130, 20), new Point(130, 60));
- new GUIWire(submodelModifiable, andI7NotI8.getPin("Y"), nandYF.getPin("A"));
- new GUIWire(submodelModifiable, cpNotI6, nandYF.getPin("B"), new Point(75, 170), new Point(105, 170), new Point(105, 120));
- new GUIWire(submodelModifiable, nandQWE.getPin("Y"), cpNandQWE, new Point(110, 155));
- new GUIWire(submodelModifiable, cpNandQWE, notQWE.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, cpNandQWE, notQWE.getPin("B"), new Point(110, 225));
- new GUIWire(submodelModifiable, nandYF.getPin("Y"), YF);
- new GUIWire(submodelModifiable, notQWE.getPin("Y"), QWE, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIAm2901DestDecode.class.getCanonicalName(),
- (m, p) -> new GUIAm2901DestDecode(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIand;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdff;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901QReg extends SimpleRectangularSubmodelComponent
-{
- private GUIdff dff1;
- private GUIdff dff2;
- private GUIdff dff3;
- private GUIdff dff4;
-
- public GUIAm2901QReg(ViewModelModifiable model)
- {
- super(model, 1, "GUIAm2901QReg");
- setSubmodelScale(.4);
- setInputPins("C", "WE", "D1", "D2", "D3", "D4");
- setOutputPins("Q1", "Q2", "Q3", "Q4");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin C = getSubmodelPin("C");
- Pin WE = getSubmodelPin("WE");
- Pin D1 = getSubmodelPin("D1");
- Pin D2 = getSubmodelPin("D2");
- Pin D3 = getSubmodelPin("D3");
- Pin D4 = getSubmodelPin("D4");
- Pin Q1 = getSubmodelPin("Q1");
- Pin Q2 = getSubmodelPin("Q2");
- Pin Q3 = getSubmodelPin("Q3");
- Pin Q4 = getSubmodelPin("Q4");
-
- GUIand and = new GUIand(submodelModifiable);
- dff1 = new GUIdff(submodelModifiable);
- dff2 = new GUIdff(submodelModifiable);
- dff3 = new GUIdff(submodelModifiable);
- dff4 = new GUIdff(submodelModifiable);
-
- WireCrossPoint cpC1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpC2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpC3 = new WireCrossPoint(submodelModifiable, 1);
-
- and.moveTo(5, 15);
- dff1.moveTo(50, 7.5);
- dff2.moveTo(50, 32.5);
- dff3.moveTo(50, 57.5);
- dff4.moveTo(50, 82.5);
- cpC1.moveCenterTo(42.5, 20);
- cpC2.moveCenterTo(42.5, 37.5);
- cpC3.moveCenterTo(42.5, 62.5);
-
- new GUIWire(submodelModifiable, C, and.getPin("A"));
- new GUIWire(submodelModifiable, WE, and.getPin("B"));
- new GUIWire(submodelModifiable, and.getPin("Y"), cpC1, new Point[0]);
- new GUIWire(submodelModifiable, cpC1, dff1.getPin("C"), new Point(42.5, 12.5));
- new GUIWire(submodelModifiable, cpC1, cpC2, new Point[0]);
- new GUIWire(submodelModifiable, cpC2, dff2.getPin("C"), new Point[0]);
- new GUIWire(submodelModifiable, cpC2, cpC3, new Point[0]);
- new GUIWire(submodelModifiable, cpC3, dff3.getPin("C"), new Point[0]);
- new GUIWire(submodelModifiable, cpC3, dff4.getPin("C"), new Point(42.5, 87.5));
- new GUIWire(submodelModifiable, D1, dff1.getPin("D"), new Point(17.5, 62.5), new Point(17.5, 42.5), new Point(45, 42.5),
- new Point(45, 22.5));
- new GUIWire(submodelModifiable, D2, dff2.getPin("D"), new Point(22.5, 87.5), new Point(22.5, 47.5));
- new GUIWire(submodelModifiable, D3, dff3.getPin("D"), new Point(27.5, 112.5), new Point(27.5, 72.5));
- new GUIWire(submodelModifiable, D4, dff4.getPin("D"), new Point(32.5, 137.5), new Point(32.5, 97.5));
- new GUIWire(submodelModifiable, dff1.getPin("Q"), Q1, new Point[0]);
- new GUIWire(submodelModifiable, dff2.getPin("Q"), Q2, new Point[0]);
- new GUIWire(submodelModifiable, dff3.getPin("Q"), Q3, new Point[0]);
- new GUIWire(submodelModifiable, dff4.getPin("Q"), Q4, new Point[0]);
-
- addAtomicHighLevelStateID("q1");
- addAtomicHighLevelStateID("q2");
- addAtomicHighLevelStateID("q3");
- addAtomicHighLevelStateID("q4");
- addAtomicHighLevelStateID("q");
- }
-
- @Override
- public void setAtomicHighLevelState(String stateID, Object newState)
- {
- switch (stateID)
- {
- case "q1":
- dff1.setHighLevelState("q", newState);
- break;
- case "q2":
- dff2.setHighLevelState("q", newState);
- break;
- case "q3":
- dff3.setHighLevelState("q", newState);
- break;
- case "q4":
- dff4.setHighLevelState("q", newState);
- break;
- case "q":
- BitVector newStateCasted = (BitVector) newState;
- setHighLevelState("q1", newStateCasted.getBit(0));
- setHighLevelState("q2", newStateCasted.getBit(1));
- setHighLevelState("q3", newStateCasted.getBit(2));
- setHighLevelState("q4", newStateCasted.getBit(3));
- break;
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- @Override
- public Object getAtomicHighLevelState(String stateID)
- {
- switch (stateID)
- {
- case "q1":
- return dff1.getHighLevelState("q");
- case "q2":
- return dff2.getHighLevelState("q");
- case "q3":
- return dff3.getHighLevelState("q");
- case "q4":
- return dff4.getHighLevelState("q");
- case "q":
- Bit q1 = (Bit) getHighLevelState("q1");
- Bit q2 = (Bit) getHighLevelState("q2");
- Bit q3 = (Bit) getHighLevelState("q3");
- Bit q4 = (Bit) getHighLevelState("q4");
- return BitVector.of(q1, q2, q3, q4);
- default:
- // should not happen because we tell SubmodelComponent to only allow these state IDs.
- throw new IllegalStateException("Illegal atomic state ID: " + stateID);
- }
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIAm2901QReg.class.getCanonicalName(), (m, p) -> new GUIAm2901QReg(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.mi.nandbased.am2901;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUINandGate;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAm2901SourceDecode extends SimpleRectangularSubmodelComponent
-{
- public GUIAm2901SourceDecode(ViewModelModifiable model)
- {
- super(model, 1, "Am2901SourceDecode");
- setSubmodelScale(.25);
- setInputPins("I2", "I1", "I0");
- setOutputPins("SQ", "RA", "SB", "SA", "RD");
- initSubmodelComponents();
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- private void initSubmodelComponents()
- {
- Pin I2 = getSubmodelPin("I2");
- Pin I1 = getSubmodelPin("I1");
- Pin I0 = getSubmodelPin("I0");
- Pin SQ = getSubmodelPin("SQ");
- Pin RA = getSubmodelPin("RA");
- Pin SB = getSubmodelPin("SB");
- Pin SA = getSubmodelPin("SA");
- Pin RD = getSubmodelPin("RD");
-
- GUINandGate notI2 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notI1 = new GUINandGate(submodelModifiable, 1);
- GUINandGate notI0 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand21 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand22 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand23 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand24 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand25 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand31 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand32 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand33 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand34 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand35 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand41 = new GUINandGate(submodelModifiable, 1);
- GUINandGate nand42 = new GUINandGate(submodelModifiable, 1);
-
- WireCrossPoint cpI21 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI22 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI23 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI1 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI01 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpI02 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI2 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI11 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI12 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI13 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNotI0 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNand22 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNand23 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNand24 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNand31 = new WireCrossPoint(submodelModifiable, 1);
- WireCrossPoint cpNand35 = new WireCrossPoint(submodelModifiable, 1);
-
- notI2.moveTo(10, 10);
- notI1.moveTo(10, 50);
- notI0.moveTo(10, 90);
- nand21.moveTo(40, 10);
- nand22.moveTo(40, 50);
- nand23.moveTo(40, 90);
- nand24.moveTo(40, 130);
- nand25.moveTo(40, 170);
- nand31.moveTo(70, 10);
- nand32.moveTo(70, 50);
- nand33.moveTo(70, 90);
- nand34.moveTo(70, 130);
- nand35.moveTo(70, 170);
- nand41.moveTo(100, 10);
- nand42.moveTo(100, 170);
- cpI21.moveCenterTo(5, 20);
- cpI22.moveCenterTo(7.5, 20);
- cpI23.moveCenterTo(5, 145);
- cpI1.moveCenterTo(7.5, 60);
- cpI01.moveCenterTo(7.5, 100);
- cpI02.moveCenterTo(7.5, 105);
- cpNotI2.moveCenterTo(32.5, 55);
- cpNotI11.moveCenterTo(35, 60);
- cpNotI12.moveCenterTo(35, 65);
- cpNotI13.moveCenterTo(35, 135);
- cpNotI0.moveCenterTo(37.5, 100);
- cpNand22.moveCenterTo(65, 60);
- cpNand23.moveCenterTo(65, 100);
- cpNand24.moveCenterTo(65, 140);
- cpNand31.moveCenterTo(95, 20);
- cpNand35.moveCenterTo(95, 180);
-
- new GUIWire(submodelModifiable, I2, cpI21, new Point[0]);
- new GUIWire(submodelModifiable, cpI21, nand21.getPin("A"), new Point(5, 5), new Point(35, 5), new Point(35, 15));
- new GUIWire(submodelModifiable, cpI21, cpI22, new Point[0]);
- new GUIWire(submodelModifiable, cpI22, notI2.getPin("A"), new Point(7.5, 15));
- new GUIWire(submodelModifiable, cpI22, notI2.getPin("B"), new Point(7.5, 25));
- new GUIWire(submodelModifiable, cpI21, cpI23, new Point[0]);
- new GUIWire(submodelModifiable, cpI23, nand24.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpI23, nand35.getPin("B"), new Point(5, 195), new Point(65, 195), new Point(65, 185));
- new GUIWire(submodelModifiable, I1, cpI1, new Point[0]);
- new GUIWire(submodelModifiable, cpI1, notI1.getPin("A"), new Point(7.5, 55));
- new GUIWire(submodelModifiable, cpI1, notI1.getPin("B"), new Point(7.5, 65));
- new GUIWire(submodelModifiable, I0, cpI01, new Point[0]);
- new GUIWire(submodelModifiable, cpI01, notI0.getPin("A"), new Point(7.5, 95));
- new GUIWire(submodelModifiable, cpI01, cpI02, new Point[0]);
- new GUIWire(submodelModifiable, cpI02, notI0.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpI02, nand23.getPin("B"), new Point(7.5, 112.5), new Point(32.5, 112.5), new Point(32.5, 105));
- new GUIWire(submodelModifiable, notI2.getPin("Y"), cpNotI2, new Point(32.5, 20));
- new GUIWire(submodelModifiable, cpNotI2, nand22.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, cpNotI2, nand23.getPin("A"), new Point(32.5, 95));
- new GUIWire(submodelModifiable, notI1.getPin("Y"), cpNotI11, new Point[0]);
- new GUIWire(submodelModifiable, cpNotI11, nand21.getPin("B"), new Point(35, 25));
- new GUIWire(submodelModifiable, cpNotI11, cpNotI12, new Point[0]);
- new GUIWire(submodelModifiable, cpNotI12, nand22.getPin("B"), new Point[0]);
- new GUIWire(submodelModifiable, cpNotI12, cpNotI13, new Point[0]);
- new GUIWire(submodelModifiable, cpNotI13, nand24.getPin("A"), new Point[0]);
- new GUIWire(submodelModifiable, cpNotI13, nand25.getPin("A"), new Point(35, 175));
- new GUIWire(submodelModifiable, notI0.getPin("Y"), cpNotI0, new Point[0]);
- new GUIWire(submodelModifiable, cpNotI0, nand31.getPin("B"), new Point(37.5, 35), new Point(65, 35), new Point(65, 25));
- new GUIWire(submodelModifiable, cpNotI0, nand25.getPin("B"), new Point(37.5, 185));
- new GUIWire(submodelModifiable, nand21.getPin("Y"), nand31.getPin("A"));
- new GUIWire(submodelModifiable, nand22.getPin("Y"), cpNand22, new Point[0]);
- new GUIWire(submodelModifiable, cpNand22, nand32.getPin("A"), new Point(65, 55));
- new GUIWire(submodelModifiable, cpNand22, nand32.getPin("B"), new Point(65, 65));
- new GUIWire(submodelModifiable, nand23.getPin("Y"), cpNand23, new Point[0]);
- new GUIWire(submodelModifiable, cpNand23, nand33.getPin("A"), new Point(65, 95));
- new GUIWire(submodelModifiable, cpNand23, nand33.getPin("B"), new Point(65, 105));
- new GUIWire(submodelModifiable, nand24.getPin("Y"), cpNand24, new Point[0]);
- new GUIWire(submodelModifiable, cpNand24, nand34.getPin("A"), new Point(65, 135));
- new GUIWire(submodelModifiable, cpNand24, nand34.getPin("B"), new Point(65, 145));
- new GUIWire(submodelModifiable, nand25.getPin("Y"), nand35.getPin("A"));
- new GUIWire(submodelModifiable, nand31.getPin("Y"), cpNand31, new Point[0]);
- new GUIWire(submodelModifiable, cpNand31, nand41.getPin("A"), new Point(95, 15));
- new GUIWire(submodelModifiable, cpNand31, nand41.getPin("B"), new Point(95, 25));
- new GUIWire(submodelModifiable, nand32.getPin("Y"), RA, new Point[0]);
- new GUIWire(submodelModifiable, nand33.getPin("Y"), SB, new Point[0]);
- new GUIWire(submodelModifiable, nand34.getPin("Y"), SA, new Point[0]);
- new GUIWire(submodelModifiable, nand35.getPin("Y"), cpNand35, new Point[0]);
- new GUIWire(submodelModifiable, cpNand35, nand42.getPin("A"), new Point(95, 175));
- new GUIWire(submodelModifiable, cpNand35, nand42.getPin("B"), new Point(95, 185));
- new GUIWire(submodelModifiable, nand41.getPin("Y"), SQ, new Point[0]);
- new GUIWire(submodelModifiable, nand42.getPin("Y"), RD, new Point[0]);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(GUIAm2901SourceDecode.class.getCanonicalName(),
- (m, p) -> new GUIAm2901SourceDecode(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.am2900;
-
-import static net.mograsim.logic.ui.am2900.TestUtil.*;
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Dest.*;
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Func.*;
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Src.*;
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Register.*;
-import static org.junit.jupiter.api.Assertions.*;
-
-import java.awt.Point;
-import java.util.stream.IntStream;
-import java.util.stream.Stream;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Order;
-import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestMethodOrder;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-import net.mograsim.logic.ui.am2900.TestableAm2901.Register;
-
-@TestMethodOrder(OrderAnnotation.class)
-public class Am2901Test
-{
- private TestableAm2901 am2901;
-
- @BeforeEach
- void initialize()
- {
- createAndSetup();
- setInputsToZero();
- }
-
- void createAndSetup()
- {
- am2901 = new TestableAm2901Impl();
- am2901.setup();
- }
-
- void setRegistersToZero()
- {
- setInputsToZero();
- for (Register r : Register.values())
- {
- setRegisterToZero(r);
- }
- }
-
- void setRegisterToZero(Register r)
- {
- am2901.setD("0000");
- am2901.setSrc(DZ);
- am2901.setFunc(AND);
- setRegOutput(r);
-
- am2901.assertFullCycleSuccess();
- }
-
- void setRegOutput(Register r)
- {
- if (r == Q)
- {
- am2901.setDest(QREG);
- } else
- {
- am2901.setReg_B(r.toBitString());
- am2901.setDest(RAMF);
- }
- }
-
- void setInputsToZero()
- {
- am2901.setCarryIn("0");
- am2901.setQ_0("0");
- am2901.setQ_3("0");
- am2901.setRAM_0("0");
- am2901.setRAM_3("0");
- am2901.setReg_A("0000");
- am2901.setReg_B("0000");
- am2901.setD("0000");
- am2901.setSrc(AB);
- am2901.setFunc(ADD);
- am2901.setDest(QREG);
-// am2901.setNotOutEnable("0"); TODO
- am2901.clockOn(true);
- am2901.assertRunSuccess();
- }
-
- @Order(1)
- @ParameterizedTest
- @ArgumentsSource(TestableAm2901.RegisterProvider.class)
- void testDirectAccess(Register r)
- {
- assertEquals("UUUU", am2901.getDirectly(r));
-
- am2901.setDirectly(r, "1011");
-
- assertEquals("1011", am2901.getDirectly(r));
- }
-
- @Order(2)
- @ParameterizedTest
- @ArgumentsSource(TestableAm2901.RegisterProvider.class)
- void testSetToZero(Register r)
- {
- assertEquals("UUUU", am2901.getDirectly(r));
-
- setRegisterToZero(r);
-
- assertEquals("0000", am2901.getDirectly(r));
- assertEquals("0000", am2901.getY());
- assertEquals("0", am2901.getCarryOut());
- assertEquals("0", am2901.getOverflow());
- assertEquals("0", am2901.getSign());
- assertEquals("1", am2901.getZero());
- }
-
- @Order(3)
- @Test
- void testSetAllToZero()
- {
- setRegistersToZero();
-
- assertEquals("0000", am2901.getY());
- assertEquals("0", am2901.getCarryOut());
- assertEquals("0", am2901.getOverflow());
- assertEquals("0", am2901.getSign());
- assertEquals("1", am2901.getZero());
- assertEquals("0", am2901.getQ_0());
- assertEquals("0", am2901.getQ_3());
- assertEquals("0", am2901.getRAM_0());
- assertEquals("0", am2901.getRAM_3());
-
- assertAll("register values", Register.stream().map(r -> () ->
- {
- assertEquals("0000", am2901.getDirectly(r), r.name());
- }));
- }
-
- @Order(4)
- @Test
- void testADD()
- {
- am2901.setSrc(DA);
- am2901.setFunc(ADD);
- am2901.setDest(NOP);
- am2901.setReg_A(r0.toBitString());
-
- assertAll(getAll4BitPairs().map(xy -> () ->
- {
- am2901.setDirectly(r0, to4bitBin(xy.x));
- am2901.setD(to4bitBin(xy.y));
-
- am2901.assertFullCycleSuccess();
-
- int res32Bit = xy.x + xy.y;
- int res4Bit = res32Bit & 0b1111;
- int res32Bit_sgn = signed4ToSigned32(xy.x) + signed4ToSigned32(xy.y);
- int res4Bit_sgn = signed4ToSigned32(res32Bit_sgn);
-
- String desc = xy.x + " + " + xy.y + " = " + res4Bit + ": ";
-
- assertEquals(to4bitBin(res4Bit & 0b1111), am2901.getY(), desc + "Y");
- assertEquals(to1bitBin(res4Bit == 0), am2901.getZero(), desc + "F=0");
- assertEquals(to1bitBin(res4Bit & 0b1000), am2901.getSign(), desc + "F3");
- assertEquals(to1bitBin(res32Bit & 0b1_0000), am2901.getCarryOut(), desc + "Cn+4");
- assertEquals(to1bitBin(res4Bit_sgn != res32Bit_sgn), am2901.getOverflow(), desc + "OVR");
- }));
- }
-
- @Order(4)
- @Test
- void testAND()
- {
- am2901.setSrc(DA);
- am2901.setFunc(AND);
- am2901.setDest(NOP);
- am2901.setReg_A(r0.toBitString());
-
- assertAll(getAll4BitPairs().map(xy -> () ->
- {
- am2901.setDirectly(r0, to4bitBin(xy.x));
- am2901.setD(to4bitBin(xy.y));
-
- am2901.assertFullCycleSuccess();
-
- int res32Bit = xy.x & xy.y;
-
- String desc = xy.x + " & " + xy.y + " = " + res32Bit + ": ";
-
- assertEquals(to4bitBin(res32Bit), am2901.getY(), desc + "Y");
- assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), desc + "F=0");
- assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), desc + "F3");
-// assertEquals(to1bitBin(res32Bit), am2901.getCarryOut(), desc + "Cn+4"); // TODO
-// assertEquals(to1bitBin(res32Bit), am2901.getOverflow(), desc + "OVR"); // TODO
- }));
- }
-
- @Order(4)
- @Test
- void testOR()
- {
- am2901.setSrc(DA);
- am2901.setFunc(OR);
- am2901.setDest(NOP);
- am2901.setReg_A(r0.toBitString());
-
- assertAll(getAll4BitPairs().map(xy -> () ->
- {
- am2901.setDirectly(r0, to4bitBin(xy.x));
- am2901.setD(to4bitBin(xy.y));
-
- am2901.assertFullCycleSuccess();
-
- int res32Bit = xy.x | xy.y;
-
- String desc = xy.x + " | " + xy.y + " = " + res32Bit + ": ";
-
- assertEquals(to4bitBin(res32Bit), am2901.getY(), desc + "Y");
- assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), desc + "F=0");
- assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), desc + "F3");
-// assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getCarryOut(), desc + "Cn+4"); // TODO
-// assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getOverflow(), desc + "OVR"); // TODO
- }));
- }
-
- @Order(4)
- @Test
- void testXOR()
- {
- am2901.setSrc(DA);
- am2901.setFunc(EXOR);
- am2901.setDest(NOP);
- am2901.setReg_A(r0.toBitString());
-
- assertAll(getAll4BitPairs().map(xy -> () ->
- {
- am2901.setDirectly(r0, to4bitBin(xy.x));
- am2901.setD(to4bitBin(xy.y));
-
- am2901.assertFullCycleSuccess();
-
- int res32Bit = xy.x ^ xy.y;
-
- String desc = xy.x + " ^ " + xy.y + " = " + res32Bit + ": ";
-
- assertEquals(to4bitBin(res32Bit), am2901.getY(), desc + "Y");
- assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), desc + "F=0");
- assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), desc + "F3");
-// assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getCarryOut(), desc + "Cn+4"); // TODO
-// assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getOverflow(), desc + "OVR"); // TODO
- }));
- }
-
- @Order(4)
- @Test
- void testSUB()
- {
- am2901.setSrc(DA);
- am2901.setCarryIn("1");
- am2901.setFunc(SUBR);
- am2901.setDest(NOP);
- am2901.setReg_A(r0.toBitString());
-
- assertAll(getAll4BitPairs().map(xy -> () ->
- {
- am2901.setDirectly(r0, to4bitBin(xy.x));
- am2901.setD(to4bitBin(xy.y));
-
- am2901.assertFullCycleSuccess();
-
- int res32Bit = xy.x - xy.y;
- int res4Bit = res32Bit & 0b1111;
- int res32Bit_sgn = signed4ToSigned32(xy.x) - signed4ToSigned32(xy.y);
- int res4Bit_sgn = signed4ToSigned32(res32Bit_sgn);
-
- String desc = xy.x + " - " + xy.y + " = " + res4Bit + ": ";
-
- assertEquals(to4bitBin(res4Bit & 0b1111), am2901.getY(), desc + "Y");
- assertEquals(to1bitBin(res4Bit == 0), am2901.getZero(), desc + "F=0");
- assertEquals(to1bitBin(res4Bit & 0b1000), am2901.getSign(), desc + "F3");
- assertEquals(to1bitBin(xy.x >= xy.y), am2901.getCarryOut(), desc + "Cn+4");
- assertEquals(to1bitBin(res4Bit_sgn != res32Bit_sgn), am2901.getOverflow(), desc + "OVR");
- }));
- }
-
- static Stream<Point> getAll4BitPairs()
- {
- return IntStream.range(0, 16).boxed().flatMap(x -> IntStream.range(0, 16).mapToObj(y -> new Point(x, y)));
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.am2900;
-
-import net.mograsim.logic.ui.SimpleLogicUIStandalone;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIAndGate;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.atomic.GUINotGate;
-import net.mograsim.logic.ui.model.components.atomic.TextComponent;
-import net.mograsim.logic.ui.model.components.mi.nandbased.GUIdff;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.ConnectionPoint;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.util.ModellingTool;
-
-public class Am2901Testbench
-{
- public static void main(String[] args)
- {
- SimpleLogicUIStandalone.executeVisualisation(Am2901Testbench::createTestbench);
- }
-
- public static void createTestbench(ViewModelModifiable model)
- {
- SimpleRectangularSubmodelComponent comp = new GUIAm2901(model);
- ModellingTool tool = ModellingTool.createFor(model);
-
- comp.moveTo(240, 0);
-
- GUIManualSwitch enable = new GUIManualSwitch(model);
- WireCrossPoint wcp0 = new WireCrossPoint(model, 1);
- GUINotGate not1 = new GUINotGate(model, 1);
- GUINotGate not2 = new GUINotGate(model, 1);
- GUINotGate not3 = new GUINotGate(model, 1);
- GUIAndGate and = new GUIAndGate(model, 1);
- tool.connect(wcp0, enable, "");
- tool.connect(wcp0, and, "A");
- tool.connect(wcp0, not1, "A");
- tool.connect(not1, not2, "Y", "A");
- tool.connect(not2, not3, "Y", "A");
- tool.connect(not3, and, "Y", "B");
- enable.moveTo(20, -32.5);
- wcp0.moveTo(35, -26);
- not1.moveTo(50, -20);
- not2.moveTo(80, -20);
- not3.moveTo(110, -20);
- and.moveTo(135, -30);
- ConnectionPoint last = and.getPin("Y");
-
- for (int i = 0; i < comp.getInputPinNames().size(); i++)
- {
- double x = 55 + 70 * (i % 2);
- double y = 10 * i;
-
- WireCrossPoint wcp = new WireCrossPoint(model, 1);
- GUIdff d_ff = new GUIdff(model);
- GUIManualSwitch sw = new GUIManualSwitch(model);
-
- tool.connect(last, wcp);
- tool.connect(wcp, d_ff, "C");
- tool.connect(sw, d_ff, "", "D");
- tool.connect(d_ff, comp, "Q", comp.getInputPinNames().get(i));
- last = wcp.getPin();
-
- TextComponent label = new TextComponent(model, comp.getInputPinNames().get(i));
-
- sw.moveTo(x, y + 7.5);
- wcp.moveTo(160, y);
- d_ff.moveTo(170, y);
- label.moveTo(x - 25, y + 15);
- }
-
- for (int i = 0; i < comp.getOutputPinNames().size(); i++)
- {
- double x = 300 + 75 * (i % 2);
- double y = 10 * i - 2.5;
- GUIBitDisplay bd = new GUIBitDisplay(model);
- bd.moveTo(x, y);
- tool.connect(bd.getInputPin(), comp, comp.getOutputPinNames().get(i));
-
- TextComponent label = new TextComponent(model, comp.getOutputPinNames().get(i));
- label.moveTo(x + 50, y + 8);
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.am2900;
-
-public final class TestUtil
-{
- private TestUtil()
- {
-
- }
-
- /**
- * Transforms the last four bits of an int to a string that contains the binary ('1' and '0') representation of the 4 bits
- *
- * @author Christian Femers
- */
- public static String to4bitBin(int x)
- {
- StringBuilder sb = new StringBuilder(4);
- sb.append((x & 0b1000) == 0 ? '0' : '1');
- sb.append((x & 0b0100) == 0 ? '0' : '1');
- sb.append((x & 0b0010) == 0 ? '0' : '1');
- sb.append((x & 0b0001) == 0 ? '0' : '1');
- return sb.toString();
- }
-
- /**
- * Transforms the given boolean to a string that contains the binary ('1' and '0') representation of the bit
- *
- * @author Christian Femers
- */
- public static String to1bitBin(boolean bitIsSet)
- {
- return bitIsSet ? "1" : "0";
- }
-
- /**
- * Transforms the given int to a string that contains the binary ('1' and '0') representation of the int. "0" is only returned when the
- * int is equal to zero.
- *
- * @author Christian Femers
- */
- public static String to1bitBin(int someInt)
- {
- return someInt != 0 ? "1" : "0";
- }
-
- /**
- * Transforms a 4 bit signed integer (-8 to 7) to a int representing the same number. (Adding leading 1-bits if the 4 bit int is
- * negative)
- *
- * @author Christian Femers
- */
- public static int signed4ToSigned32(int signed4bit)
- {
- if ((signed4bit & 0b1000) > 0)
- return signed4bit | 0xFF_FF_FF_F0;
- return signed4bit & 0x00_00_00_0F;
- }
-
- /**
- * Transforms a 16 bit signed integer (-32768 to 32767 - a short) to a int representing the same number. (Adding leading 1-bits if the
- * 16 bit int is negative)
- *
- * @author Christian Femers
- */
- public static int signed16ToSigned32(int signed16bit)
- {
- return (short) signed16bit;
- }
-
- /**
- * Transforms the last n bits of an int to a string that contains the binary ('1' and '0') representation of the n bits
- *
- * @author Christian Femers
- */
- public static String toNbitString(int x, int n)
- {
- StringBuilder sb = new StringBuilder(n);
- for (int i = 0; i < n; i++)
- {
- sb.append((x >> i) & 1);
- }
- return sb.reverse().toString();
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.am2900;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import java.util.Arrays;
-import java.util.stream.Stream;
-
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-
-public interface TestableAm2901
-{
- void setup();
-
- Result run();
-
- void setDest(Am2901_Dest dest);
-
- void setFunc(Am2901_Func func);
-
- void setSrc(Am2901_Src src);
-
- void setReg_A(String val_4_bit);
-
- void setReg_B(String val_4_bit);
-
- void setCarryIn(String val_1_bit);
-
- void setNotOutEnable(String val_1_bit);
-
- void setD(String val_4_bit);
-
- void setQ_0(String val_1_bit);
-
- void setQ_3(String val_1_bit);
-
- void setRAM_0(String val_1_bit);
-
- void setRAM_3(String val_1_bit);
-
- void clockOn(boolean isClockOn);
-
- void setDirectly(Register r, String val_4_bit);
-
- String getQ_0();
-
- String getQ_3();
-
- String getRAM_0();
-
- String getRAM_3();
-
- String getNotP();
-
- String getNotG();
-
- String getCarryOut();
-
- String getSign();
-
- String getZero();
-
- String getOverflow();
-
- String getY();
-
- String getDirectly(Register r);
-
- default void assertRunSuccess()
- {
- assertEquals(Result.SUCCESS, run());
- }
-
- default void assertFullCycleSuccess()
- {
- assertRunSuccess();
- clockOn(false);
- assertRunSuccess();
- clockOn(true);
- assertRunSuccess();
- }
-
- public enum Result
- {
- SUCCESS, OUT_OF_TIME, ERROR;
- }
-
- public enum Am2901_Dest
- {
- QREG, NOP, RAMA, RAMF, RAMQD, RAMD, RAMQU, RAMU;
-
- public boolean doesShift()
- {
- return ordinal() >= 4;
- }
-
- public int getShiftDir()
- {
- return doesShift() ? (ordinal() < 6 ? -1 : 1) : 0;
- }
-
- public int getI7()
- {
- return this.ordinal() >> 1 & 1;
- }
- }
-
- public enum Am2901_Func
- {
- ADD, SUBR, SUBS, OR, AND, NOTRS, EXOR, EXNOR;
- }
-
- public enum Am2901_Src
- {
- AQ, AB, ZQ, ZB, ZA, DA, DQ, DZ;
- }
-
- public enum Register
- {
- r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;
-
- public String toBitString()
- {
- if (this.ordinal() > 0xF)
- throw new UnsupportedOperationException();
- return TestUtil.to4bitBin(this.ordinal());
- }
-
- public static Stream<Register> stream()
- {
- return Arrays.stream(values());
- }
- }
-
- public static class RegisterProvider implements ArgumentsProvider
- {
-
- @Override
- public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws Exception
- {
- return Register.stream().map(Arguments::of);
- }
-
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.am2900;
-
-import static org.junit.jupiter.api.Assertions.fail;
-
-import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.Objects;
-import java.util.Queue;
-import java.util.Set;
-import java.util.TreeSet;
-
-import net.mograsim.logic.core.components.BitDisplay;
-import net.mograsim.logic.core.components.ManualSwitch;
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.core.types.BitVector.BitVectorMutator;
-import net.mograsim.logic.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-
-public class TestableAm2901Impl implements TestableAm2901
-{
- private GUIAm2901 am2901;
- private Timeline timeline;
- private ManualSwitch I8, I7, I6, I5, I4, I3, I2, I1, I0;
- private ManualSwitch C;
- private ManualSwitch Cn;
- private ManualSwitch D1, D2, D3, D4;
- private ManualSwitch A0, A1, A2, A3;
- private ManualSwitch B0, B1, B2, B3;
- private ManualSwitch IRAMn, IRAMn_3, IQn, IQn_3;
- private BitDisplay Y1, Y2, Y3, Y4;
- private BitDisplay F_0, Cn_4, OVR, F3;
- private BitDisplay ORAMn, ORAMn_3, OQn, OQn_3;
-
- private Set<String> wireDebugChangeSet;
- private boolean debugWires = false;
- public int debugEventThreshold = 10_000;
- public int debugEventCount = 500;
-
- private int eventCounter;
-
- @Override
- public Result run()
- {
- // Normal execution until completion or eventLimit
- int eventLimit = debugEventThreshold;
- eventCounter = 0;
- debugWires = false;
- while (eventCounter < eventLimit)
- {
- timeline.executeNext();
- if (!timeline.hasNext())
- {
-// System.out.println("run() took " + eventCounter + " events");
- return Result.SUCCESS;
- }
- }
- // Start debugging if event limit is reached
- debugWires = true;
- wireDebugChangeSet = new TreeSet<>();
- Set<String> oldChangeSet;
- // observe wire changes to detect, if we are really stuck in an endless loop
- do
- {
- eventLimit += debugEventCount;
- oldChangeSet = wireDebugChangeSet;
- wireDebugChangeSet = new TreeSet<>();
- while (eventCounter < eventLimit)
- {
- timeline.executeNext();
- if (!timeline.hasNext())
- {
- // no endless loop, but more events needed than expected
- System.out.println("run() took longer than expected: " + eventCounter);
- return Result.SUCCESS;
- }
- }
- } while (!oldChangeSet.equals(wireDebugChangeSet));
- // if stuck, abort execution and print wires
- System.err.print("Problematic Wire updates:");
- wireDebugChangeSet.forEach(System.out::println);
- System.err.println("run() failed: " + eventCounter);
- return Result.OUT_OF_TIME;
- }
-
- @SuppressWarnings("unused")
- @Override
- public void setup()
- {
- // Create view model
- ViewModelModifiable viewModel = new ViewModelModifiable();
- am2901 = new GUIAm2901(viewModel);
- // Get switches
- HashMap<String, GUIManualSwitch> idSwitchMap = new HashMap<>();
- for (String id : am2901.getInputPinNames())
- {
- GUIManualSwitch sw = new GUIManualSwitch(viewModel);
- new GUIWire(viewModel, am2901.getPin(id), sw.getOutputPin());
- idSwitchMap.put(id, sw);
- }
- // Get displays
- HashMap<String, GUIBitDisplay> idDisplayMap = new HashMap<>();
- for (String id : am2901.getOutputPinNames())
- {
- GUIBitDisplay bd = new GUIBitDisplay(viewModel);
-// bd.addRedrawListener(() -> System.out.println(id + " " + bd.getBitDisplay().getDisplayedValue()));
- new GUIWire(viewModel, am2901.getPin(id), bd.getInputPin());
- idDisplayMap.put(id, bd);
- }
- // Create logic model
- LogicModelParameters params = new LogicModelParameters();
- params.gateProcessTime = 50;
- params.wireTravelTime = 10;
- timeline = ViewLogicModelAdapter.convert(viewModel, params);
- // Bind switches/displays to this test class
- for (var entry : idSwitchMap.entrySet())
- setField(entry.getKey().replaceAll("\\+|=", "_"), entry.getValue().getManualSwitch());
- for (var entry : idDisplayMap.entrySet())
- setField(entry.getKey().replaceAll("\\+|=", "_"), entry.getValue().getBitDisplay());
-
- // Debug code
- HashSet<GUIWire> wiresIncludingSubmodels = new HashSet<>();
- Queue<ViewModel> modelsToIterate = new LinkedList<>();
- modelsToIterate.add(viewModel);
- while (modelsToIterate.size() > 0)
- {
- ViewModel model = modelsToIterate.poll();
- wiresIncludingSubmodels.addAll(model.getWires());
- for (GUIComponent comp : model.getComponents())
- if (comp instanceof SubmodelComponent)
- modelsToIterate.offer(((SubmodelComponent) comp).submodel);
- }
- wiresIncludingSubmodels.forEach(w -> w.addRedrawListener(() ->
- {
- if (debugWires)
- {
- wireDebugChangeSet.add(w.toString());
- }
- }));
- timeline.addEventAddedListener(te -> eventCounter++);
- }
-
- @Override
- public void setDest(Am2901_Dest dest)
- {
- var bits = of(dest.ordinal(), 3);
- I8.setToValueOf(bits.getBit(0));
- I7.setToValueOf(bits.getBit(1));
- I6.setToValueOf(bits.getBit(2));
- }
-
- @Override
- public void setFunc(Am2901_Func func)
- {
- var bits = of(func.ordinal(), 3);
- I5.setToValueOf(bits.getBit(0));
- I4.setToValueOf(bits.getBit(1));
- I3.setToValueOf(bits.getBit(2));
- }
-
- @Override
- public void setSrc(Am2901_Src src)
- {
- var bits = of(src.ordinal(), 3);
- I2.setToValueOf(bits.getBit(0));
- I1.setToValueOf(bits.getBit(1));
- I0.setToValueOf(bits.getBit(2));
- }
-
- @Override
- public void setReg_A(String val_4_bit)
- {
- var bits = BitVector.parseMSBFirst(val_4_bit);
- A3.setToValueOf(bits.getBit(3));
- A2.setToValueOf(bits.getBit(2));
- A1.setToValueOf(bits.getBit(1));
- A0.setToValueOf(bits.getBit(0));
- }
-
- @Override
- public void setReg_B(String val_4_bit)
- {
- var bits = BitVector.parseMSBFirst(val_4_bit);
- B3.setToValueOf(bits.getBit(3));
- B2.setToValueOf(bits.getBit(2));
- B1.setToValueOf(bits.getBit(1));
- B0.setToValueOf(bits.getBit(0));
- }
-
- @Override
- public void setCarryIn(String val_1_bit)
- {
- Cn.setToValueOf(Bit.parse(val_1_bit));
- }
-
- @Override
- public void setNotOutEnable(String val_1_bit)
- {
- throw new UnsupportedOperationException(); // TODO
- }
-
- @Override
- public void setD(String val_4_bit)
- {
- var bits = BitVector.parseMSBFirst(val_4_bit);
- D4.setToValueOf(bits.getBit(3));
- D3.setToValueOf(bits.getBit(2));
- D2.setToValueOf(bits.getBit(1));
- D1.setToValueOf(bits.getBit(0));
- }
-
- @Override
- public void setQ_0(String val_1_bit)
- {
- IQn.setToValueOf(Bit.parse(val_1_bit));
- }
-
- @Override
- public void setQ_3(String val_1_bit)
- {
- IQn_3.setToValueOf(Bit.parse(val_1_bit));
- }
-
- @Override
- public void setRAM_0(String val_1_bit)
- {
- IRAMn.setToValueOf(Bit.parse(val_1_bit));
- }
-
- @Override
- public void setRAM_3(String val_1_bit)
- {
- IRAMn_3.setToValueOf(Bit.parse(val_1_bit));
- }
-
- @Override
- public void clockOn(boolean isClockOn)
- {
- C.setState(isClockOn);
- }
-
- @Override
- public String getQ_0()
- {
- return OQn.getDisplayedValue().toString();
- }
-
- @Override
- public String getQ_3()
- {
- return OQn_3.getDisplayedValue().toString();
- }
-
- @Override
- public String getRAM_0()
- {
- return ORAMn.getDisplayedValue().toString();
- }
-
- @Override
- public String getRAM_3()
- {
- return ORAMn_3.getDisplayedValue().toString();
- }
-
- @Override
- public String getNotP()
- {
- throw new UnsupportedOperationException(); // TODO
- }
-
- @Override
- public String getNotG()
- {
- throw new UnsupportedOperationException(); // TODO
- }
-
- @Override
- public String getCarryOut()
- {
- return Cn_4.getDisplayedValue().toString();
- }
-
- @Override
- public String getSign()
- {
- return F3.getDisplayedValue().toString();
- }
-
- @Override
- public String getZero()
- {
- return F_0.getDisplayedValue().toString();
- }
-
- @Override
- public String getOverflow()
- {
- return OVR.getDisplayedValue().toString();
- }
-
- @Override
- public String getY()
- {
- var y3 = Y4.getDisplayedValue();
- var y2 = Y3.getDisplayedValue();
- var y1 = Y2.getDisplayedValue();
- var y0 = Y1.getDisplayedValue();
- return y0.concat(y1).concat(y2).concat(y3).toBitStringMSBFirst();
- }
-
- private void setField(String name, Object value)
- {
- try
- {
- Field f = TestableAm2901Impl.class.getDeclaredField(name);
- f.setAccessible(true);
- f.set(this, Objects.requireNonNull(value));
- }
- catch (Exception e)
- {
- fail(e);
- }
- }
-
- private static BitVector of(int value, int length)
- {
- BitVectorMutator mutator = BitVectorMutator.ofLength(length);
- int val = value;
- for (int i = length - 1; i >= 0; i--)
- {
- mutator.setBit(i, Bit.lastBitOf(val));
- val >>>= 1;
- }
- return mutator.toBitVector();
- }
-
- @Override
- public void setDirectly(Register r, String val_4_bit)
- {
- am2901.setHighLevelState(regToStateID(r), BitVector.parseMSBFirst(val_4_bit));
- }
-
- @Override
- public String getDirectly(Register r)
- {
- return ((BitVector) am2901.getHighLevelState(regToStateID(r))).toBitStringMSBFirst();
- }
-
- private static String regToStateID(Register r)
- {
- if (r == Register.Q)
- return "qreg.q";
- return "regs.c" + r.toBitString() + ".q";
- }
-}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
- <attributes>
- <attribute name="module" value="true"/>
- </attributes>
- </classpathentry>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>net.mograsim.logic.ui.editor</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
+++ /dev/null
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=11
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=11
+++ /dev/null
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Editor
-Bundle-SymbolicName: net.mograsim.logic.ui.editor
-Bundle-Version: 0.1.0.qualifier
-Export-Package: net.mograsim.logic.ui.editor,
- net.mograsim.logic.ui.editor.handles,
- net.mograsim.logic.ui.editor.states
-Require-Bundle: net.mograsim.logic.ui;bundle-version="0.1.0",
- net.mograsim.preferences;bundle-version="0.1.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-11
-Automatic-Module-Name: net.mograsim.logic.ui
-Bundle-Vendor: Mograsim Team
+++ /dev/null
-source.. = src/
-bin.includes = META-INF/,\
- .,\
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "_Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "_R",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "_S",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 7.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 12.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 16.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "_S"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "_R"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 37.5
- },
- {
- "x": 35.0,
- "y": 27.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 3,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": ""
- },
- "path": [
- {
- "x": 65.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 65.0,
- "y": 42.5
- },
- {
- "x": 5.0,
- "y": 42.5
- },
- {
- "x": 5.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q"
- },
- "path": [
- {
- "x": 35.0,
- "y": 17.5
- },
- {
- "x": 35.0,
- "y": 7.5
- },
- {
- "x": 65.0,
- "y": 7.5
- },
- {
- "x": 65.0,
- "y": 12.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "_Q"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "_rsLatch",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 20.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 3,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 45.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 45.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIand",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 50.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 30.0,
- "y": 7.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 32.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 57.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 82.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 24.0,
- "y": 46.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 71.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 96.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": [
- {
- "x": 25.0,
- "y": 112.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 25.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIand41",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 90.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "C1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "C2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "C3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "C4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 137.5
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 35.0,
- "y": 37.5
- },
- "id": "GUIor_4"
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 112.5
- },
- {
- "x": 10.0,
- "y": 142.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 5.0,
- "y": 137.5
- },
- {
- "x": 5.0,
- "y": 152.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 187.5
- },
- {
- "x": 5.0,
- "y": 172.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 10.0,
- "y": 212.5
- },
- {
- "x": 10.0,
- "y": 182.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 12.5
- },
- {
- "x": 10.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 5.0,
- "y": 37.5
- },
- {
- "x": 5.0,
- "y": 52.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C3"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C4"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 87.5
- },
- {
- "x": 5.0,
- "y": 72.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 70.0,
- "y": 142.5
- },
- {
- "x": 70.0,
- "y": 120.0
- },
- {
- "x": 30.0,
- "y": 120.0
- },
- {
- "x": 30.0,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 65.0,
- "y": 152.5
- },
- {
- "x": 65.0,
- "y": 125.0
- },
- {
- "x": 25.0,
- "y": 125.0
- },
- {
- "x": 25.0,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 60.0,
- "y": 162.5
- },
- {
- "x": 60.0,
- "y": 130.0
- },
- {
- "x": 20.0,
- "y": 130.0
- },
- {
- "x": 20.0,
- "y": 102.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 55.0,
- "y": 172.5
- },
- {
- "x": 55.0,
- "y": 135.0
- },
- {
- "x": 15.0,
- "y": 135.0
- },
- {
- "x": 15.0,
- "y": 112.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": [
- {
- "x": 75.0,
- "y": 42.5
- },
- {
- "x": 75.0,
- "y": 12.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": [
- {
- "x": 80.0,
- "y": 52.5
- },
- {
- "x": 80.0,
- "y": 37.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": [
- {
- "x": 80.0,
- "y": 72.5
- },
- {
- "x": 80.0,
- "y": 87.5
- }
- ]
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIandor414",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 40.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y00",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y11",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y10",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y01",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "S0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "S1",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 10.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 2.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 40.0,
- "y": 27.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 40.0,
- "y": 52.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 40.0,
- "y": 77.5
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 6.5,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 16.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 36.5,
- "y": 61.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 41.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 66.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "S0"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S1"
- },
- "pin2": {
- "compId": 10,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": ""
- },
- "path": [
- {
- "x": 7.5,
- "y": 62.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": ""
- },
- "path": [
- {
- "x": 5.0,
- "y": 67.5
- },
- {
- "x": 32.5,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 32.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 37.5,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": [
- {
- "x": 32.5,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 37.5,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 32.5,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y00"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y01"
- }
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y10"
- }
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y11"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIdemux2",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "_Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "D",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.2,
- "subComps": [
- {
- "pos": {
- "x": 40.0,
- "y": 10.0
- },
- "id": "GUI_rsLatch"
- },
- {
- "pos": {
- "x": 40.0,
- "y": 40.0
- },
- "id": "GUInand3"
- },
- {
- "pos": {
- "x": 120.0,
- "y": 60.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 120.0,
- "y": 30.0
- },
- "id": "GUI_rsLatch"
- },
- {
- "pos": {
- "x": 9.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 19.0,
- "y": 64.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 99.0,
- "y": 34.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 99.0,
- "y": 44.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "_R"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 10.0,
- "y": 55.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": [
- {
- "x": 145.0,
- "y": 70.0
- },
- {
- "x": 145.0,
- "y": 85.0
- },
- {
- "x": 20.0,
- "y": 85.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "_S"
- },
- "path": [
- {
- "x": 20.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "_Q"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": [
- {
- "x": 100.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 30.0,
- "y": 35.0
- },
- {
- "x": 30.0,
- "y": 45.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "_S"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "_R"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 100.0,
- "y": 65.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "_Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "_Q"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIdff",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "_Q",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "D",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "E",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 45.0,
- "y": 7.5
- },
- "id": "GUI_rsLatch"
- },
- {
- "pos": {
- "x": 4.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "D"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "E"
- },
- "pin2": {
- "compId": 4,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 35.0,
- "y": 25.0
- },
- {
- "x": 10.0,
- "y": 25.0
- },
- {
- "x": 10.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "_S"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 3,
- "pinName": "_R"
- },
- "path": [
- {
- "x": 40.0,
- "y": 37.5
- },
- {
- "x": 40.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "_Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "_Q"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIdlatch",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 50.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "D4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Q1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Q2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Q3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Q4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "D3",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 30.0,
- "y": 7.5
- },
- "id": "GUIdlatch"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 32.5
- },
- "id": "GUIdlatch"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 57.5
- },
- "id": "GUIdlatch"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 82.5
- },
- "id": "GUIdlatch"
- },
- {
- "pos": {
- "x": 14.0,
- "y": 46.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 71.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 96.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": [
- {
- "x": 15.0,
- "y": 112.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "E"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "E"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "E"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "E"
- },
- "path": [
- {
- "x": 15.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "D"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "D"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "D"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "D"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIdlatch4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 30.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Z",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 5.0,
- "y": 40.0
- },
- "id": "GUIhalfadder"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 7.5
- },
- "id": "GUIhalfadder"
- },
- {
- "pos": {
- "x": 57.5,
- "y": 40.0
- },
- "id": "GUINandGate",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "_Z"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "_Z"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 82.5,
- "y": 22.5
- },
- {
- "x": 82.5,
- "y": 35.0
- },
- {
- "x": 52.5,
- "y": 35.0
- },
- {
- "x": 52.5,
- "y": 45.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Z"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIfulladder",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "_Z",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "_Z"
- },
- "path": [
- {
- "x": 80.0,
- "y": 25.0
- },
- {
- "x": 80.0,
- "y": 37.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 35.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 62.5,
- "y": 12.5
- },
- {
- "x": 62.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 62.5,
- "y": 37.5
- },
- {
- "x": 62.5,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIhalfadder",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 30.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "S0",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 7.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 35.0,
- "y": 22.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 35.0,
- "y": 47.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 60.0,
- "y": 30.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 21.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "S0"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 52.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUImux1",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 90.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I0_1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "I0_3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "I1_2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I0_2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "I1_1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "I1_4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "S0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "I0_4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "I1_3",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 30.0,
- "y": 7.5
- },
- "id": "GUImux1"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 42.5
- },
- "id": "GUImux1"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 77.5
- },
- "id": "GUImux1"
- },
- {
- "pos": {
- "x": 30.0,
- "y": 112.5
- },
- "id": "GUImux1"
- },
- {
- "pos": {
- "x": 24.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 46.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 81.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "S0"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "S0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0_1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 37.5
- },
- {
- "x": 5.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1_1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 137.5
- },
- {
- "x": 10.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "S0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0_2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 62.5
- },
- {
- "x": 5.0,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1_2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 15.0,
- "y": 162.5
- },
- {
- "x": 15.0,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- }
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "S0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0_3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 87.5
- },
- {
- "x": 5.0,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1_3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 20.0,
- "y": 187.5
- },
- {
- "x": 20.0,
- "y": 102.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- }
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "S0"
- },
- "path": [
- {
- "x": 25.0,
- "y": 117.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0_4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 112.5
- },
- {
- "x": 5.0,
- "y": 127.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1_4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 25.0,
- "y": 212.5
- },
- {
- "x": 25.0,
- "y": 137.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUImux1_4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 30.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 35.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 62.5,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 32.5,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 32.5,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 57.5,
- "y": 25.0
- },
- {
- "x": 57.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 60.0,
- "y": 62.5
- },
- {
- "x": 60.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUInand3",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 40.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 30.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 30.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 30.0,
- "y": 52.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 30.0,
- "y": 77.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 61.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 86.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUInot4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 40.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.2,
- "subComps": [
- {
- "pos": {
- "x": 20.0,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 65.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 115.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 165.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 40.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 140.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 110.0,
- "y": 40.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 110.0,
- "y": 140.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 140.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 74.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 124.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 174.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 104.0,
- "y": 49.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 104.0,
- "y": 149.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 10,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 11,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 12,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 70.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 120.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 170.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 80.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 130.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 105.0,
- "y": 45.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 105.0,
- "y": 55.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": [
- {
- "x": 105.0,
- "y": 145.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 105.0,
- "y": 155.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIor4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 80.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "B4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "B1",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 52.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 77.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 102.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 127.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 152.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 177.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 52.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 77.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 61.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 86.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 111.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 136.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 161.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 186.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B4"
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 107.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 117.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 132.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 142.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 157.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 167.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 182.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 192.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- },
- "path": [
- {
- "x": 40.0,
- "y": 12.5
- },
- {
- "x": 40.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 45.0,
- "y": 112.5
- },
- {
- "x": 45.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A"
- },
- "path": [
- {
- "x": 40.0,
- "y": 37.5
- },
- {
- "x": 40.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 50.0,
- "y": 137.5
- },
- {
- "x": 50.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A"
- },
- "path": [
- {
- "x": 40.0,
- "y": 62.5
- },
- {
- "x": 40.0,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": [
- {
- "x": 55.0,
- "y": 162.5
- },
- {
- "x": 55.0,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A"
- },
- "path": [
- {
- "x": 40.0,
- "y": 87.5
- },
- {
- "x": 40.0,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 60.0,
- "y": 187.5
- },
- {
- "x": 60.0,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIor_4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 90.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "QA1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "QB2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "QB1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "QA3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 75.0
- },
- "name": "QB4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "QA2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 65.0
- },
- "name": "QB3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "QA4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "B0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "WE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "D3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "D4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.1,
- "subComps": [
- {
- "pos": {
- "x": 55.0,
- "y": 45.0
- },
- "id": "GUIdemux2"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 150.0
- },
- "id": "GUIdemux2"
- },
- {
- "pos": {
- "x": 130.0,
- "y": 150.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 325.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 475.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 625.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 775.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 235.0,
- "y": 375.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 235.0,
- "y": 485.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 235.0,
- "y": 635.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 235.0,
- "y": 785.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 135.0,
- "y": 325.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 135.0,
- "y": 435.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 135.0,
- "y": 585.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 135.0,
- "y": 735.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 109.0,
- "y": 154.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 104.0,
- "y": 164.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 99.0,
- "y": 174.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 94.0,
- "y": 184.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 549.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 649.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 749.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 809.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 479.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 489.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 499.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 509.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 629.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 639.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 649.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 659.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 129.0,
- "y": 329.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 124.0,
- "y": 339.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 119.0,
- "y": 349.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 114.0,
- "y": 359.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 129.0,
- "y": 479.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 124.0,
- "y": 489.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 119.0,
- "y": 499.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 114.0,
- "y": 509.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 129.0,
- "y": 629.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 124.0,
- "y": 639.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 119.0,
- "y": 649.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 114.0,
- "y": 659.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 129.0,
- "y": 779.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 124.0,
- "y": 789.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 119.0,
- "y": 799.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 114.0,
- "y": 809.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A0"
- },
- "pin2": {
- "compId": 1,
- "pinName": "S0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "S1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 150.0
- },
- {
- "x": 10.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B0"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 250.0
- },
- {
- "x": 5.0,
- "y": 155.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 350.0
- },
- {
- "x": 10.0,
- "y": 165.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y00"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y01"
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y10"
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y11"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "WE"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 450.0
- },
- {
- "x": 5.0,
- "y": 300.0
- },
- {
- "x": 125.0,
- "y": 300.0
- },
- {
- "x": 125.0,
- "y": 195.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 4,
- "pinName": "C"
- },
- "path": [
- {
- "x": 185.0,
- "y": 155.0
- },
- {
- "x": 185.0,
- "y": 250.0
- },
- {
- "x": 30.0,
- "y": 250.0
- },
- {
- "x": 30.0,
- "y": 370.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 5,
- "pinName": "C"
- },
- "path": [
- {
- "x": 180.0,
- "y": 165.0
- },
- {
- "x": 180.0,
- "y": 245.0
- },
- {
- "x": 25.0,
- "y": 245.0
- },
- {
- "x": 25.0,
- "y": 520.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 6,
- "pinName": "C"
- },
- "path": [
- {
- "x": 175.0,
- "y": 175.0
- },
- {
- "x": 175.0,
- "y": 240.0
- },
- {
- "x": 20.0,
- "y": 240.0
- },
- {
- "x": 20.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 7,
- "pinName": "C"
- },
- "path": [
- {
- "x": 170.0,
- "y": 185.0
- },
- {
- "x": 170.0,
- "y": 235.0
- },
- {
- "x": 15.0,
- "y": 235.0
- },
- {
- "x": 15.0,
- "y": 820.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": [
- {
- "x": 50.0,
- "y": 850.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D1"
- },
- "path": [
- {
- "x": 35.0,
- "y": 330.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D2"
- },
- "path": [
- {
- "x": 40.0,
- "y": 340.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D3"
- },
- "path": [
- {
- "x": 45.0,
- "y": 350.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D4"
- },
- "path": [
- {
- "x": 50.0,
- "y": 360.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 30,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 31,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D1"
- },
- "path": [
- {
- "x": 35.0,
- "y": 780.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D2"
- },
- "path": [
- {
- "x": 40.0,
- "y": 790.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D3"
- },
- "path": [
- {
- "x": 45.0,
- "y": 800.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 32,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 33,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 34,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 35,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 36,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 37,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 38,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 39,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 40,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 41,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 42,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 43,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 44,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 45,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 46,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 47,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y00"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 210.0,
- "y": 50.0
- },
- {
- "x": 210.0,
- "y": 420.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y01"
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 205.0,
- "y": 60.0
- },
- {
- "x": 205.0,
- "y": 570.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y10"
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 200.0,
- "y": 70.0
- },
- {
- "x": 200.0,
- "y": 720.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y11"
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": [
- {
- "x": 195.0,
- "y": 80.0
- },
- {
- "x": 195.0,
- "y": 870.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 110.0,
- "y": 370.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "B"
- },
- "path": [
- {
- "x": 105.0,
- "y": 520.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "B"
- },
- "path": [
- {
- "x": 100.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "B"
- },
- "path": [
- {
- "x": 95.0,
- "y": 820.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 130.0,
- "y": 380.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 125.0,
- "y": 390.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 120.0,
- "y": 400.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 115.0,
- "y": 410.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 130.0,
- "y": 530.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 125.0,
- "y": 540.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 120.0,
- "y": 550.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 115.0,
- "y": 560.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 40,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 130.0,
- "y": 680.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 41,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 125.0,
- "y": 690.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 42,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 120.0,
- "y": 700.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 43,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 115.0,
- "y": 710.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 44,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 130.0,
- "y": 830.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 45,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 125.0,
- "y": 840.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 46,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 120.0,
- "y": 850.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 47,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 115.0,
- "y": 860.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 40,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 41,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 42,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 43,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 44,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 45,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 46,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 47,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 290.0,
- "y": 380.0
- },
- {
- "x": 290.0,
- "y": 445.0
- },
- {
- "x": 230.0,
- "y": 445.0
- },
- {
- "x": 230.0,
- "y": 490.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 285.0,
- "y": 390.0
- },
- {
- "x": 285.0,
- "y": 440.0
- },
- {
- "x": 225.0,
- "y": 440.0
- },
- {
- "x": 225.0,
- "y": 500.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 280.0,
- "y": 400.0
- },
- {
- "x": 280.0,
- "y": 435.0
- },
- {
- "x": 220.0,
- "y": 435.0
- },
- {
- "x": 220.0,
- "y": 510.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 275.0,
- "y": 410.0
- },
- {
- "x": 275.0,
- "y": 430.0
- },
- {
- "x": 215.0,
- "y": 430.0
- },
- {
- "x": 215.0,
- "y": 520.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 290.0,
- "y": 490.0
- },
- {
- "x": 290.0,
- "y": 595.0
- },
- {
- "x": 230.0,
- "y": 595.0
- },
- {
- "x": 230.0,
- "y": 640.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 285.0,
- "y": 500.0
- },
- {
- "x": 285.0,
- "y": 590.0
- },
- {
- "x": 225.0,
- "y": 590.0
- },
- {
- "x": 225.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 280.0,
- "y": 510.0
- },
- {
- "x": 280.0,
- "y": 585.0
- },
- {
- "x": 220.0,
- "y": 585.0
- },
- {
- "x": 220.0,
- "y": 660.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 275.0,
- "y": 520.0
- },
- {
- "x": 275.0,
- "y": 580.0
- },
- {
- "x": 215.0,
- "y": 580.0
- },
- {
- "x": 215.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 290.0,
- "y": 640.0
- },
- {
- "x": 290.0,
- "y": 745.0
- },
- {
- "x": 230.0,
- "y": 745.0
- },
- {
- "x": 230.0,
- "y": 790.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 285.0,
- "y": 650.0
- },
- {
- "x": 285.0,
- "y": 740.0
- },
- {
- "x": 225.0,
- "y": 740.0
- },
- {
- "x": 225.0,
- "y": 800.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 280.0,
- "y": 660.0
- },
- {
- "x": 280.0,
- "y": 735.0
- },
- {
- "x": 220.0,
- "y": 735.0
- },
- {
- "x": 220.0,
- "y": 810.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 275.0,
- "y": 670.0
- },
- {
- "x": 275.0,
- "y": 730.0
- },
- {
- "x": 215.0,
- "y": 730.0
- },
- {
- "x": 215.0,
- "y": 820.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA1"
- },
- "path": [
- {
- "x": 300.0,
- "y": 790.0
- },
- {
- "x": 300.0,
- "y": 50.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA2"
- },
- "path": [
- {
- "x": 305.0,
- "y": 800.0
- },
- {
- "x": 305.0,
- "y": 150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA3"
- },
- "path": [
- {
- "x": 310.0,
- "y": 810.0
- },
- {
- "x": 310.0,
- "y": 250.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA4"
- },
- "path": [
- {
- "x": 315.0,
- "y": 820.0
- },
- {
- "x": 315.0,
- "y": 350.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 190.0,
- "y": 330.0
- },
- {
- "x": 190.0,
- "y": 430.0
- },
- {
- "x": 130.0,
- "y": 430.0
- },
- {
- "x": 130.0,
- "y": 440.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 185.0,
- "y": 340.0
- },
- {
- "x": 185.0,
- "y": 425.0
- },
- {
- "x": 125.0,
- "y": 425.0
- },
- {
- "x": 125.0,
- "y": 450.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 180.0,
- "y": 350.0
- },
- {
- "x": 180.0,
- "y": 420.0
- },
- {
- "x": 120.0,
- "y": 420.0
- },
- {
- "x": 120.0,
- "y": 460.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 175.0,
- "y": 360.0
- },
- {
- "x": 175.0,
- "y": 415.0
- },
- {
- "x": 115.0,
- "y": 415.0
- },
- {
- "x": 115.0,
- "y": 470.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 190.0,
- "y": 440.0
- },
- {
- "x": 190.0,
- "y": 580.0
- },
- {
- "x": 130.0,
- "y": 580.0
- },
- {
- "x": 130.0,
- "y": 590.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 185.0,
- "y": 450.0
- },
- {
- "x": 185.0,
- "y": 575.0
- },
- {
- "x": 125.0,
- "y": 575.0
- },
- {
- "x": 125.0,
- "y": 600.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 180.0,
- "y": 460.0
- },
- {
- "x": 180.0,
- "y": 570.0
- },
- {
- "x": 120.0,
- "y": 570.0
- },
- {
- "x": 120.0,
- "y": 610.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 175.0,
- "y": 470.0
- },
- {
- "x": 175.0,
- "y": 565.0
- },
- {
- "x": 115.0,
- "y": 565.0
- },
- {
- "x": 115.0,
- "y": 620.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 190.0,
- "y": 590.0
- },
- {
- "x": 190.0,
- "y": 730.0
- },
- {
- "x": 130.0,
- "y": 730.0
- },
- {
- "x": 130.0,
- "y": 740.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 185.0,
- "y": 600.0
- },
- {
- "x": 185.0,
- "y": 725.0
- },
- {
- "x": 125.0,
- "y": 725.0
- },
- {
- "x": 125.0,
- "y": 750.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 180.0,
- "y": 610.0
- },
- {
- "x": 180.0,
- "y": 720.0
- },
- {
- "x": 120.0,
- "y": 720.0
- },
- {
- "x": 120.0,
- "y": 760.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 175.0,
- "y": 620.0
- },
- {
- "x": 175.0,
- "y": 715.0
- },
- {
- "x": 115.0,
- "y": 715.0
- },
- {
- "x": 115.0,
- "y": 770.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB1"
- },
- "path": [
- {
- "x": 190.0,
- "y": 740.0
- },
- {
- "x": 190.0,
- "y": 880.0
- },
- {
- "x": 325.0,
- "y": 880.0
- },
- {
- "x": 325.0,
- "y": 450.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB2"
- },
- "path": [
- {
- "x": 185.0,
- "y": 750.0
- },
- {
- "x": 185.0,
- "y": 885.0
- },
- {
- "x": 330.0,
- "y": 885.0
- },
- {
- "x": 330.0,
- "y": 550.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB3"
- },
- "path": [
- {
- "x": 180.0,
- "y": 760.0
- },
- {
- "x": 180.0,
- "y": 890.0
- },
- {
- "x": 335.0,
- "y": 890.0
- },
- {
- "x": 335.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB4"
- },
- "path": [
- {
- "x": 175.0,
- "y": 770.0
- },
- {
- "x": 175.0,
- "y": 895.0
- },
- {
- "x": 340.0,
- "y": 895.0
- },
- {
- "x": 340.0,
- "y": 750.0
- }
- ]
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIram2",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 130.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "QA1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "QB2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "QB1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "QA3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 75.0
- },
- "name": "QB4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "QA2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 65.0
- },
- "name": "QB3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "QA4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "B0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "WE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 105.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 115.0
- },
- "name": "D3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 125.0
- },
- "name": "D4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A3",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.1,
- "subComps": [
- {
- "pos": {
- "x": 55.0,
- "y": 45.0
- },
- "id": "GUIdemux2"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 150.0
- },
- "id": "GUIdemux2"
- },
- {
- "pos": {
- "x": 235.0,
- "y": 150.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 80.0,
- "y": 330.0
- },
- "id": "GUIram2"
- },
- {
- "pos": {
- "x": 80.0,
- "y": 480.0
- },
- "id": "GUIram2"
- },
- {
- "pos": {
- "x": 80.0,
- "y": 630.0
- },
- "id": "GUIram2"
- },
- {
- "pos": {
- "x": 80.0,
- "y": 780.0
- },
- "id": "GUIram2"
- },
- {
- "pos": {
- "x": 250.0,
- "y": 375.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 250.0,
- "y": 485.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 250.0,
- "y": 635.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 250.0,
- "y": 785.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 155.0,
- "y": 325.0
- },
- "id": "GUIand41"
- },
- {
- "pos": {
- "x": 155.0,
- "y": 435.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 155.0,
- "y": 585.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 155.0,
- "y": 735.0
- },
- "id": "GUIandor414"
- },
- {
- "pos": {
- "x": 229.0,
- "y": 154.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 224.0,
- "y": 164.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 219.0,
- "y": 174.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 214.0,
- "y": 184.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 59.0,
- "y": 534.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 544.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 69.0,
- "y": 554.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 564.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 59.0,
- "y": 684.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 694.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 69.0,
- "y": 704.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 714.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 59.0,
- "y": 834.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 844.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 69.0,
- "y": 854.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 864.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 484.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 494.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 504.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 54.0,
- "y": 514.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 634.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 644.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 654.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 54.0,
- "y": 664.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 334.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 349.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 649.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 54.0,
- "y": 749.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A0"
- },
- "pin2": {
- "compId": 1,
- "pinName": "S0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "S1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 150.0
- },
- {
- "x": 10.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B0"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 450.0
- },
- {
- "x": 5.0,
- "y": 155.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 550.0
- },
- {
- "x": 10.0,
- "y": 165.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y00"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y01"
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y10"
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y11"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "WE"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 15.0,
- "y": 850.0
- },
- {
- "x": 15.0,
- "y": 195.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 4,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 290.0,
- "y": 155.0
- },
- {
- "x": 290.0,
- "y": 230.0
- },
- {
- "x": 35.0,
- "y": 230.0
- },
- {
- "x": 35.0,
- "y": 375.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 5,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 285.0,
- "y": 165.0
- },
- {
- "x": 285.0,
- "y": 225.0
- },
- {
- "x": 30.0,
- "y": 225.0
- },
- {
- "x": 30.0,
- "y": 525.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 6,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 280.0,
- "y": 175.0
- },
- {
- "x": 280.0,
- "y": 220.0
- },
- {
- "x": 25.0,
- "y": 220.0
- },
- {
- "x": 25.0,
- "y": 675.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 7,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 275.0,
- "y": 185.0
- },
- {
- "x": 275.0,
- "y": 215.0
- },
- {
- "x": 20.0,
- "y": 215.0
- },
- {
- "x": 20.0,
- "y": 825.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 40,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 40,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 41,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 41,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 45.0,
- "y": 345.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B0"
- },
- "path": [
- {
- "x": 50.0,
- "y": 355.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 55.0,
- "y": 365.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 36,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 37,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 42,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 42,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 42,
- "pinName": ""
- },
- "pin2": {
- "compId": 38,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 39,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B0"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A0"
- },
- "path": [
- {
- "x": 40.0,
- "y": 785.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 45.0,
- "y": 795.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B0"
- },
- "path": [
- {
- "x": 50.0,
- "y": 805.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 43,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 43,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 55.0,
- "y": 815.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 40,
- "pinName": ""
- },
- "path": [
- {
- "x": 40.0,
- "y": 250.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 41,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 43,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D1"
- },
- "path": [
- {
- "x": 60.0,
- "y": 385.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D2"
- },
- "path": [
- {
- "x": 65.0,
- "y": 395.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D3"
- },
- "path": [
- {
- "x": 70.0,
- "y": 405.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "D4"
- },
- "path": [
- {
- "x": 75.0,
- "y": 415.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 24,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 25,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 26,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 27,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 30,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 31,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": [
- {
- "x": 60.0,
- "y": 950.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": [
- {
- "x": 65.0,
- "y": 1050.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 30,
- "pinName": ""
- },
- "path": [
- {
- "x": 70.0,
- "y": 1150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 31,
- "pinName": ""
- },
- "path": [
- {
- "x": 75.0,
- "y": 1250.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y00"
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 135.0,
- "y": 50.0
- },
- {
- "x": 135.0,
- "y": 370.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y01"
- },
- "pin2": {
- "compId": 13,
- "pinName": "B"
- },
- "path": [
- {
- "x": 130.0,
- "y": 60.0
- },
- {
- "x": 130.0,
- "y": 520.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y10"
- },
- "pin2": {
- "compId": 14,
- "pinName": "B"
- },
- "path": [
- {
- "x": 125.0,
- "y": 70.0
- },
- {
- "x": 125.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y11"
- },
- "pin2": {
- "compId": 15,
- "pinName": "B"
- },
- "path": [
- {
- "x": 120.0,
- "y": 80.0
- },
- {
- "x": 120.0,
- "y": 820.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 230.0,
- "y": 420.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 225.0,
- "y": 570.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 220.0,
- "y": 720.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": [
- {
- "x": 215.0,
- "y": 870.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QB1"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 375.0
- },
- {
- "x": 140.0,
- "y": 380.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QB2"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 385.0
- },
- {
- "x": 140.0,
- "y": 390.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QB3"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 395.0
- },
- {
- "x": 140.0,
- "y": 400.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QB4"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 405.0
- },
- {
- "x": 140.0,
- "y": 410.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QB1"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 525.0
- },
- {
- "x": 140.0,
- "y": 530.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QB2"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 535.0
- },
- {
- "x": 140.0,
- "y": 540.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QB3"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 545.0
- },
- {
- "x": 140.0,
- "y": 550.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QB4"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 555.0
- },
- {
- "x": 140.0,
- "y": 560.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QB1"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 675.0
- },
- {
- "x": 140.0,
- "y": 680.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QB2"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 685.0
- },
- {
- "x": 140.0,
- "y": 690.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QB3"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 695.0
- },
- {
- "x": 140.0,
- "y": 700.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QB4"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 705.0
- },
- {
- "x": 140.0,
- "y": 710.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QB1"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 825.0
- },
- {
- "x": 140.0,
- "y": 830.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QB2"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 835.0
- },
- {
- "x": 140.0,
- "y": 840.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QB3"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 845.0
- },
- {
- "x": 140.0,
- "y": 850.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QB4"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 855.0
- },
- {
- "x": 140.0,
- "y": 860.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QA1"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 335.0
- },
- {
- "x": 140.0,
- "y": 330.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QA2"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 345.0
- },
- {
- "x": 140.0,
- "y": 340.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QA3"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 355.0
- },
- {
- "x": 140.0,
- "y": 350.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "QA4"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 365.0
- },
- {
- "x": 140.0,
- "y": 360.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QA1"
- },
- "pin2": {
- "compId": 13,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 485.0
- },
- {
- "x": 140.0,
- "y": 480.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QA2"
- },
- "pin2": {
- "compId": 13,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 495.0
- },
- {
- "x": 140.0,
- "y": 490.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QA3"
- },
- "pin2": {
- "compId": 13,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 505.0
- },
- {
- "x": 140.0,
- "y": 500.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "QA4"
- },
- "pin2": {
- "compId": 13,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 515.0
- },
- {
- "x": 140.0,
- "y": 510.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QA1"
- },
- "pin2": {
- "compId": 14,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 635.0
- },
- {
- "x": 140.0,
- "y": 630.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QA2"
- },
- "pin2": {
- "compId": 14,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 645.0
- },
- {
- "x": 140.0,
- "y": 640.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QA3"
- },
- "pin2": {
- "compId": 14,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 655.0
- },
- {
- "x": 140.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "QA4"
- },
- "pin2": {
- "compId": 14,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 665.0
- },
- {
- "x": 140.0,
- "y": 660.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QA1"
- },
- "pin2": {
- "compId": 15,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 140.0,
- "y": 785.0
- },
- {
- "x": 140.0,
- "y": 780.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QA2"
- },
- "pin2": {
- "compId": 15,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 140.0,
- "y": 795.0
- },
- {
- "x": 140.0,
- "y": 790.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QA3"
- },
- "pin2": {
- "compId": 15,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 805.0
- },
- {
- "x": 140.0,
- "y": 800.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "QA4"
- },
- "pin2": {
- "compId": 15,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 140.0,
- "y": 815.0
- },
- {
- "x": 140.0,
- "y": 810.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 305.0,
- "y": 380.0
- },
- {
- "x": 305.0,
- "y": 445.0
- },
- {
- "x": 245.0,
- "y": 445.0
- },
- {
- "x": 245.0,
- "y": 490.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 300.0,
- "y": 390.0
- },
- {
- "x": 300.0,
- "y": 440.0
- },
- {
- "x": 240.0,
- "y": 440.0
- },
- {
- "x": 240.0,
- "y": 500.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 295.0,
- "y": 400.0
- },
- {
- "x": 295.0,
- "y": 435.0
- },
- {
- "x": 235.0,
- "y": 435.0
- },
- {
- "x": 235.0,
- "y": 510.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 9,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 290.0,
- "y": 410.0
- },
- {
- "x": 290.0,
- "y": 430.0
- },
- {
- "x": 230.0,
- "y": 430.0
- },
- {
- "x": 230.0,
- "y": 520.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 305.0,
- "y": 490.0
- },
- {
- "x": 305.0,
- "y": 595.0
- },
- {
- "x": 245.0,
- "y": 595.0
- },
- {
- "x": 245.0,
- "y": 640.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 300.0,
- "y": 500.0
- },
- {
- "x": 300.0,
- "y": 590.0
- },
- {
- "x": 240.0,
- "y": 590.0
- },
- {
- "x": 240.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 295.0,
- "y": 510.0
- },
- {
- "x": 295.0,
- "y": 585.0
- },
- {
- "x": 235.0,
- "y": 585.0
- },
- {
- "x": 235.0,
- "y": 660.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 10,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 290.0,
- "y": 520.0
- },
- {
- "x": 290.0,
- "y": 580.0
- },
- {
- "x": 230.0,
- "y": 580.0
- },
- {
- "x": 230.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 305.0,
- "y": 640.0
- },
- {
- "x": 305.0,
- "y": 745.0
- },
- {
- "x": 245.0,
- "y": 745.0
- },
- {
- "x": 245.0,
- "y": 790.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 300.0,
- "y": 650.0
- },
- {
- "x": 300.0,
- "y": 740.0
- },
- {
- "x": 240.0,
- "y": 740.0
- },
- {
- "x": 240.0,
- "y": 800.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 295.0,
- "y": 660.0
- },
- {
- "x": 295.0,
- "y": 735.0
- },
- {
- "x": 235.0,
- "y": 735.0
- },
- {
- "x": 235.0,
- "y": 810.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 290.0,
- "y": 670.0
- },
- {
- "x": 290.0,
- "y": 730.0
- },
- {
- "x": 230.0,
- "y": 730.0
- },
- {
- "x": 230.0,
- "y": 820.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB1"
- },
- "path": [
- {
- "x": 330.0,
- "y": 790.0
- },
- {
- "x": 330.0,
- "y": 450.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB2"
- },
- "path": [
- {
- "x": 335.0,
- "y": 800.0
- },
- {
- "x": 335.0,
- "y": 550.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB3"
- },
- "path": [
- {
- "x": 340.0,
- "y": 810.0
- },
- {
- "x": 340.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QB4"
- },
- "path": [
- {
- "x": 345.0,
- "y": 820.0
- },
- {
- "x": 345.0,
- "y": 750.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 210.0,
- "y": 330.0
- },
- {
- "x": 210.0,
- "y": 430.0
- },
- {
- "x": 150.0,
- "y": 430.0
- },
- {
- "x": 150.0,
- "y": 440.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 205.0,
- "y": 340.0
- },
- {
- "x": 205.0,
- "y": 425.0
- },
- {
- "x": 145.0,
- "y": 425.0
- },
- {
- "x": 145.0,
- "y": 450.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 200.0,
- "y": 350.0
- },
- {
- "x": 200.0,
- "y": 420.0
- },
- {
- "x": 140.0,
- "y": 420.0
- },
- {
- "x": 140.0,
- "y": 460.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 13,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 195.0,
- "y": 360.0
- },
- {
- "x": 195.0,
- "y": 415.0
- },
- {
- "x": 135.0,
- "y": 415.0
- },
- {
- "x": 135.0,
- "y": 470.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 210.0,
- "y": 440.0
- },
- {
- "x": 210.0,
- "y": 580.0
- },
- {
- "x": 150.0,
- "y": 580.0
- },
- {
- "x": 150.0,
- "y": 590.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 205.0,
- "y": 450.0
- },
- {
- "x": 205.0,
- "y": 575.0
- },
- {
- "x": 145.0,
- "y": 575.0
- },
- {
- "x": 145.0,
- "y": 600.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 200.0,
- "y": 460.0
- },
- {
- "x": 200.0,
- "y": 570.0
- },
- {
- "x": 140.0,
- "y": 570.0
- },
- {
- "x": 140.0,
- "y": 610.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 14,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 195.0,
- "y": 470.0
- },
- {
- "x": 195.0,
- "y": 565.0
- },
- {
- "x": 135.0,
- "y": 565.0
- },
- {
- "x": 135.0,
- "y": 620.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 210.0,
- "y": 590.0
- },
- {
- "x": 210.0,
- "y": 730.0
- },
- {
- "x": 150.0,
- "y": 730.0
- },
- {
- "x": 150.0,
- "y": 740.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 205.0,
- "y": 600.0
- },
- {
- "x": 205.0,
- "y": 725.0
- },
- {
- "x": 145.0,
- "y": 725.0
- },
- {
- "x": 145.0,
- "y": 750.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 200.0,
- "y": 610.0
- },
- {
- "x": 200.0,
- "y": 720.0
- },
- {
- "x": 140.0,
- "y": 720.0
- },
- {
- "x": 140.0,
- "y": 760.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 15,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 195.0,
- "y": 620.0
- },
- {
- "x": 195.0,
- "y": 715.0
- },
- {
- "x": 135.0,
- "y": 715.0
- },
- {
- "x": 135.0,
- "y": 770.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA1"
- },
- "path": [
- {
- "x": 210.0,
- "y": 740.0
- },
- {
- "x": 210.0,
- "y": 880.0
- },
- {
- "x": 310.0,
- "y": 880.0
- },
- {
- "x": 310.0,
- "y": 50.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA2"
- },
- "path": [
- {
- "x": 205.0,
- "y": 750.0
- },
- {
- "x": 205.0,
- "y": 885.0
- },
- {
- "x": 315.0,
- "y": 885.0
- },
- {
- "x": 315.0,
- "y": 150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA3"
- },
- "path": [
- {
- "x": 200.0,
- "y": 760.0
- },
- {
- "x": 200.0,
- "y": 890.0
- },
- {
- "x": 320.0,
- "y": 890.0
- },
- {
- "x": 320.0,
- "y": 250.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QA4"
- },
- "path": [
- {
- "x": 195.0,
- "y": 770.0
- },
- {
- "x": 195.0,
- "y": 895.0
- },
- {
- "x": 325.0,
- "y": 895.0
- },
- {
- "x": 325.0,
- "y": 350.0
- }
- ]
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIram4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 100.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "SA",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "SB",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "B4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 20.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 52.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 102.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 152.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 77.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 127.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 20.0,
- "y": 177.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 52.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 65.0,
- "y": 77.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 16.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 66.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 116.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 41.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 91.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 141.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 62.5
- },
- {
- "x": 15.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 17.5,
- "y": 87.5
- },
- {
- "x": 17.5,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 17.5,
- "y": 112.5
- },
- {
- "x": 17.5,
- "y": 107.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 17.5,
- "y": 137.5
- },
- {
- "x": 17.5,
- "y": 157.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": [
- {
- "x": 10.0,
- "y": 162.5
- },
- {
- "x": 10.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 12.5,
- "y": 187.5
- },
- {
- "x": 12.5,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 15.0,
- "y": 212.5
- },
- {
- "x": 15.0,
- "y": 132.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B4"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": [
- {
- "x": 10.0,
- "y": 237.5
- },
- {
- "x": 10.0,
- "y": 182.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "SA"
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "SB"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 167.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 192.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- },
- "path": [
- {
- "x": 42.5,
- "y": 12.5
- },
- {
- "x": 42.5,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 45.0,
- "y": 37.5
- },
- {
- "x": 45.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A"
- },
- "path": [
- {
- "x": 47.5,
- "y": 62.5
- },
- {
- "x": 47.5,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 50.0,
- "y": 87.5
- },
- {
- "x": 50.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A"
- },
- "path": [
- {
- "x": 52.5,
- "y": 112.5
- },
- {
- "x": 52.5,
- "y": 57.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": [
- {
- "x": 55.0,
- "y": 137.5
- },
- {
- "x": 55.0,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A"
- },
- "path": [
- {
- "x": 57.5,
- "y": 162.5
- },
- {
- "x": 57.5,
- "y": 82.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 60.0,
- "y": 187.5
- },
- {
- "x": 60.0,
- "y": 92.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIsel2_4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 150.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "SA",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 115.0
- },
- "name": "C1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "SB",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 125.0
- },
- "name": "C2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "SC",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 135.0
- },
- "name": "C3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 145.0
- },
- "name": "C4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 105.0
- },
- "name": "B4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.2,
- "subComps": [
- {
- "pos": {
- "x": 35.0,
- "y": 250.0
- },
- "id": "GUIsel2_4"
- },
- {
- "pos": {
- "x": 75.0,
- "y": 250.0
- },
- "id": "GUInot4"
- },
- {
- "pos": {
- "x": 50.0,
- "y": 570.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 620.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 670.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 720.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 152.5,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 152.5,
- "y": 65.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 152.5,
- "y": 115.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 152.5,
- "y": 165.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 584.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 634.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 684.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "SA"
- },
- "pin2": {
- "compId": 1,
- "pinName": "SA"
- },
- "path": [
- {
- "x": 25.0,
- "y": 25.0
- },
- {
- "x": 25.0,
- "y": 255.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "SB"
- },
- "pin2": {
- "compId": 1,
- "pinName": "SB"
- },
- "path": [
- {
- "x": 20.0,
- "y": 75.0
- },
- {
- "x": 20.0,
- "y": 265.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 15.0,
- "y": 175.0
- },
- {
- "x": 15.0,
- "y": 275.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 10.0,
- "y": 225.0
- },
- {
- "x": 10.0,
- "y": 285.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 5.0,
- "y": 275.0
- },
- {
- "x": 5.0,
- "y": 295.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 325.0
- },
- {
- "x": 5.0,
- "y": 305.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 375.0
- },
- {
- "x": 10.0,
- "y": 315.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 15.0,
- "y": 425.0
- },
- {
- "x": 15.0,
- "y": 325.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 20.0,
- "y": 475.0
- },
- {
- "x": 20.0,
- "y": 335.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B4"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 25.0,
- "y": 525.0
- },
- {
- "x": 25.0,
- "y": 345.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "SC"
- },
- "pin2": {
- "compId": 11,
- "pinName": ""
- },
- "path": [
- {
- "x": 30.0,
- "y": 125.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": ""
- },
- "path": [
- {
- "x": 30.0,
- "y": 125.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": [
- {
- "x": 30.0,
- "y": 125.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 30.0,
- "y": 735.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C1"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C2"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C3"
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C4"
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 115.0,
- "y": 255.0
- },
- {
- "x": 115.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": [
- {
- "x": 120.0,
- "y": 265.0
- },
- {
- "x": 120.0,
- "y": 70.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- },
- "path": [
- {
- "x": 125.0,
- "y": 275.0
- },
- {
- "x": 125.0,
- "y": 120.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 10,
- "pinName": "A"
- },
- "path": [
- {
- "x": 130.0,
- "y": 285.0
- },
- {
- "x": 130.0,
- "y": 170.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 135.0,
- "y": 580.0
- },
- {
- "x": 135.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 140.0,
- "y": 630.0
- },
- {
- "x": 140.0,
- "y": 80.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 145.0,
- "y": 680.0
- },
- {
- "x": 145.0,
- "y": 130.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 150.0,
- "y": 730.0
- },
- {
- "x": 150.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIsel3_4",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 20.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "A",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "B",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 7.5,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 35.0,
- "y": 2.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 35.0,
- "y": 27.5
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 62.5,
- "y": 15.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 11.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "A"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- }
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 30.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 30.0,
- "y": 32.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 42.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIxor",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 270.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 85.0
- },
- "name": "ORAMn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 265.0
- },
- "name": "IQn+3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "I0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 255.0
- },
- "name": "IQn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "I1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "I2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "I3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 65.0
- },
- "name": "OVR",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "I4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 105.0
- },
- "name": "Cn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 115.0
- },
- "name": "OQn+3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "I5",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I6",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 105.0
- },
- "name": "OQn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I7",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I8",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 155.0
- },
- "name": "A0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 165.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 175.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 185.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 235.0
- },
- "name": "IRAMn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "Cn+4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 95.0
- },
- "name": "ORAMn+3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "F\u003d0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 115.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 245.0
- },
- "name": "IRAMn+3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 75.0
- },
- "name": "F3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 125.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 195.0
- },
- "name": "B0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 135.0
- },
- "name": "D3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 205.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 145.0
- },
- "name": "D4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 215.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 225.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Y1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Y2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Y3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Y4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.1,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 45.0
- },
- "id": "GUIAm2901DestDecode"
- },
- {
- "pos": {
- "x": 275.0,
- "y": 135.0
- },
- "id": "GUImux1_4"
- },
- {
- "pos": {
- "x": 190.0,
- "y": 65.0
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 160.0,
- "y": 75.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 240.0,
- "y": 2110.0
- },
- "id": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode"
- },
- {
- "pos": {
- "x": 275.0,
- "y": 445.0
- },
- "id": "GUIor4"
- },
- {
- "pos": {
- "x": 320.0,
- "y": 440.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 95.0,
- "y": 2220.0
- },
- "id": "GUIram4"
- },
- {
- "pos": {
- "x": 160.0,
- "y": 2220.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 160.0,
- "y": 2275.0
- },
- "id": "GUIdlatch4"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 2310.0
- },
- "id": "GUIsel3_4"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 2510.0
- },
- "id": "GUIsel3_4"
- },
- {
- "pos": {
- "x": 90.0,
- "y": 2490.0
- },
- "id": "GUIAm2901QReg"
- },
- {
- "pos": {
- "x": 154.0,
- "y": 949.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 154.0,
- "y": 89.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 154.0,
- "y": 2264.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 154.0,
- "y": 2319.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 2314.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 2324.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 2334.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 219.0,
- "y": 2224.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 224.0,
- "y": 2234.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 229.0,
- "y": 2244.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 234.0,
- "y": 2254.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 129.0,
- "y": 2494.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 134.0,
- "y": 2504.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 139.0,
- "y": 2514.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 144.0,
- "y": 2524.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 219.0,
- "y": 2494.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 234.0,
- "y": 2524.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 2624.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 2634.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 279.0,
- "y": 2114.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 294.0,
- "y": 2144.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 329.0,
- "y": 949.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 254.0,
- "y": 2089.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 259.0,
- "y": 2094.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 264.0,
- "y": 2099.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 269.0,
- "y": 2104.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 254.0,
- "y": 449.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 259.0,
- "y": 459.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 264.0,
- "y": 469.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 269.0,
- "y": 479.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 2354.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 2364.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 19.0,
- "y": 2374.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 2394.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 19.0,
- "y": 2404.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 2414.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 2384.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 2424.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 19.0,
- "y": 2434.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 2444.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 314.0,
- "y": 449.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I8"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I8"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I7"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I7"
- },
- "path": [
- {
- "x": 5.0,
- "y": 150.0
- },
- {
- "x": 5.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I6"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I6"
- },
- "path": [
- {
- "x": 10.0,
- "y": 250.0
- },
- {
- "x": 10.0,
- "y": 70.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I5"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I5"
- },
- "path": [
- {
- "x": 130.0,
- "y": 350.0
- },
- {
- "x": 130.0,
- "y": 2115.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I4"
- },
- "path": [
- {
- "x": 125.0,
- "y": 450.0
- },
- {
- "x": 125.0,
- "y": 2125.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I3"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I3"
- },
- "path": [
- {
- "x": 120.0,
- "y": 550.0
- },
- {
- "x": 120.0,
- "y": 2135.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I2"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I2"
- },
- "path": [
- {
- "x": 115.0,
- "y": 650.0
- },
- {
- "x": 115.0,
- "y": 2145.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 110.0,
- "y": 750.0
- },
- {
- "x": 110.0,
- "y": 2155.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0"
- },
- "pin2": {
- "compId": 5,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 105.0,
- "y": 850.0
- },
- {
- "x": 105.0,
- "y": 2165.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 155.0,
- "y": 80.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "C"
- },
- "path": [
- {
- "x": 155.0,
- "y": 2485.0
- },
- {
- "x": 80.0,
- "y": 2485.0
- },
- {
- "x": 80.0,
- "y": 2495.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "LSH"
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": [
- {
- "x": 55.0,
- "y": 90.0
- },
- {
- "x": 55.0,
- "y": 125.0
- },
- {
- "x": 40.0,
- "y": 125.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "NSH"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": [
- {
- "x": 60.0,
- "y": 50.0
- },
- {
- "x": 60.0,
- "y": 120.0
- },
- {
- "x": 35.0,
- "y": 120.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "RSH"
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": [
- {
- "x": 65.0,
- "y": 60.0
- },
- {
- "x": 65.0,
- "y": 115.0
- },
- {
- "x": 30.0,
- "y": 115.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "SA"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "SB"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "SC"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "SA"
- },
- "path": [
- {
- "x": 40.0,
- "y": 2515.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "SB"
- },
- "path": [
- {
- "x": 35.0,
- "y": 2525.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "SC"
- },
- "path": [
- {
- "x": 30.0,
- "y": 2535.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A0"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A0"
- },
- "path": [
- {
- "x": 80.0,
- "y": 1550.0
- },
- {
- "x": 80.0,
- "y": 2225.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 75.0,
- "y": 1650.0
- },
- {
- "x": 75.0,
- "y": 2235.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 70.0,
- "y": 1750.0
- },
- {
- "x": 70.0,
- "y": 2245.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 65.0,
- "y": 1850.0
- },
- {
- "x": 65.0,
- "y": 2255.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B0"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B0"
- },
- "path": [
- {
- "x": 60.0,
- "y": 1950.0
- },
- {
- "x": 60.0,
- "y": 2265.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 55.0,
- "y": 2050.0
- },
- {
- "x": 55.0,
- "y": 2275.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 50.0,
- "y": 2150.0
- },
- {
- "x": 50.0,
- "y": 2285.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 45.0,
- "y": 2250.0
- },
- {
- "x": 45.0,
- "y": 2295.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QA1"
- },
- "pin2": {
- "compId": 9,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QA2"
- },
- "pin2": {
- "compId": 9,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QA3"
- },
- "pin2": {
- "compId": 9,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QA4"
- },
- "pin2": {
- "compId": 9,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QB1"
- },
- "pin2": {
- "compId": 10,
- "pinName": "D1"
- },
- "path": [
- {
- "x": 150.0,
- "y": 2265.0
- },
- {
- "x": 150.0,
- "y": 2280.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QB2"
- },
- "pin2": {
- "compId": 10,
- "pinName": "D2"
- },
- "path": [
- {
- "x": 145.0,
- "y": 2275.0
- },
- {
- "x": 145.0,
- "y": 2290.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QB3"
- },
- "pin2": {
- "compId": 10,
- "pinName": "D3"
- },
- "path": [
- {
- "x": 140.0,
- "y": 2285.0
- },
- {
- "x": 140.0,
- "y": 2300.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "QB4"
- },
- "pin2": {
- "compId": 10,
- "pinName": "D4"
- },
- "path": [
- {
- "x": 135.0,
- "y": 2295.0
- },
- {
- "x": 135.0,
- "y": 2310.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Cn"
- },
- "pin2": {
- "compId": 5,
- "pinName": "Cn"
- },
- "path": [
- {
- "x": 100.0,
- "y": 1050.0
- },
- {
- "x": 100.0,
- "y": 2175.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 5,
- "pinName": "D1"
- },
- "path": [
- {
- "x": 180.0,
- "y": 1150.0
- },
- {
- "x": 180.0,
- "y": 2185.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 5,
- "pinName": "D2"
- },
- "path": [
- {
- "x": 175.0,
- "y": 1250.0
- },
- {
- "x": 175.0,
- "y": 2195.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 5,
- "pinName": "D3"
- },
- "path": [
- {
- "x": 170.0,
- "y": 1350.0
- },
- {
- "x": 170.0,
- "y": 2205.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "D4"
- },
- "path": [
- {
- "x": 165.0,
- "y": 1450.0
- },
- {
- "x": 165.0,
- "y": 2215.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 24,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I0_1"
- },
- "path": [
- {
- "x": 220.0,
- "y": 150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I0_2"
- },
- "path": [
- {
- "x": 225.0,
- "y": 160.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I0_3"
- },
- "path": [
- {
- "x": 230.0,
- "y": 170.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I0_4"
- },
- "path": [
- {
- "x": 235.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 5,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 200.0,
- "y": 2280.0
- },
- {
- "x": 200.0,
- "y": 2265.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 5,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 205.0,
- "y": 2290.0
- },
- {
- "x": 205.0,
- "y": 2275.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 5,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 210.0,
- "y": 2300.0
- },
- {
- "x": 210.0,
- "y": 2285.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 215.0,
- "y": 2310.0
- },
- {
- "x": 215.0,
- "y": 2295.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 25,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 26,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 27,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "OQn"
- },
- "path": [
- {
- "x": 335.0,
- "y": 2495.0
- },
- {
- "x": 335.0,
- "y": 1050.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 30,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "OQn+3"
- },
- "path": [
- {
- "x": 340.0,
- "y": 2525.0
- },
- {
- "x": 340.0,
- "y": 1150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 31,
- "pinName": ""
- },
- "path": [
- {
- "x": 135.0,
- "y": 2670.0
- },
- {
- "x": 30.0,
- "y": 2670.0
- },
- {
- "x": 30.0,
- "y": 2635.0
- },
- {
- "x": 35.0,
- "y": 2635.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 32,
- "pinName": ""
- },
- "path": [
- {
- "x": 140.0,
- "y": 2675.0
- },
- {
- "x": 35.0,
- "y": 2675.0
- },
- {
- "x": 35.0,
- "y": 2640.0
- },
- {
- "x": 40.0,
- "y": 2640.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "C1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "C2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 145.0,
- "y": 2680.0
- },
- {
- "x": 40.0,
- "y": 2680.0
- },
- {
- "x": 40.0,
- "y": 2645.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "IQn+3"
- },
- "pin2": {
- "compId": 12,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 2650.0
- },
- {
- "x": 5.0,
- "y": 2655.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "IQn"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 5.0,
- "y": 2550.0
- },
- {
- "x": 5.0,
- "y": 2545.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 130.0,
- "y": 2665.0
- },
- {
- "x": 25.0,
- "y": 2665.0
- },
- {
- "x": 25.0,
- "y": 2630.0
- },
- {
- "x": 30.0,
- "y": 2630.0
- },
- {
- "x": 30.0,
- "y": 2555.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "Q1"
- },
- "path": [
- {
- "x": 220.0,
- "y": 2305.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "Q2"
- },
- "path": [
- {
- "x": 225.0,
- "y": 2505.0
- },
- {
- "x": 225.0,
- "y": 2315.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "Q3"
- },
- "path": [
- {
- "x": 230.0,
- "y": 2515.0
- },
- {
- "x": 230.0,
- "y": 2325.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "Q4"
- },
- "path": [
- {
- "x": 235.0,
- "y": 2335.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 35.0,
- "y": 2565.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 32,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 40.0,
- "y": 2575.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 13,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 13,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 13,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 13,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Cn+4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Cn+4"
- },
- "path": [
- {
- "x": 315.0,
- "y": 2155.0
- },
- {
- "x": 315.0,
- "y": 550.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "OVR"
- },
- "pin2": {
- "compId": 0,
- "pinName": "OVR"
- },
- "path": [
- {
- "x": 320.0,
- "y": 2165.0
- },
- {
- "x": 320.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "F1"
- },
- "pin2": {
- "compId": 33,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "F4"
- },
- "pin2": {
- "compId": 34,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "ORAMn"
- },
- "path": [
- {
- "x": 325.0,
- "y": 2115.0
- },
- {
- "x": 325.0,
- "y": 850.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 35,
- "pinName": ""
- },
- "path": [
- {
- "x": 330.0,
- "y": 2145.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "ORAMn+3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 35,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "F3"
- },
- "path": [
- {
- "x": 330.0,
- "y": 750.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 33,
- "pinName": ""
- },
- "pin2": {
- "compId": 36,
- "pinName": ""
- },
- "path": [
- {
- "x": 280.0,
- "y": 2090.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "F2"
- },
- "pin2": {
- "compId": 37,
- "pinName": ""
- },
- "path": [
- {
- "x": 285.0,
- "y": 2125.0
- },
- {
- "x": 285.0,
- "y": 2095.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "F3"
- },
- "pin2": {
- "compId": 38,
- "pinName": ""
- },
- "path": [
- {
- "x": 290.0,
- "y": 2135.0
- },
- {
- "x": 290.0,
- "y": 2100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 34,
- "pinName": ""
- },
- "pin2": {
- "compId": 39,
- "pinName": ""
- },
- "path": [
- {
- "x": 295.0,
- "y": 2105.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 40,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 41,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 42,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 43,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 40,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 41,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 42,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 43,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 40,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I1_1"
- },
- "path": [
- {
- "x": 255.0,
- "y": 190.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 41,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I1_2"
- },
- "path": [
- {
- "x": 260.0,
- "y": 200.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 42,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I1_3"
- },
- "path": [
- {
- "x": 265.0,
- "y": 210.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 43,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "I1_4"
- },
- "path": [
- {
- "x": 270.0,
- "y": 220.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 36,
- "pinName": ""
- },
- "pin2": {
- "compId": 44,
- "pinName": ""
- },
- "path": [
- {
- "x": 10.0,
- "y": 2090.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 37,
- "pinName": ""
- },
- "pin2": {
- "compId": 45,
- "pinName": ""
- },
- "path": [
- {
- "x": 15.0,
- "y": 2095.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 38,
- "pinName": ""
- },
- "pin2": {
- "compId": 46,
- "pinName": ""
- },
- "path": [
- {
- "x": 20.0,
- "y": 2100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "IRAMn"
- },
- "pin2": {
- "compId": 11,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 5.0,
- "y": 2350.0
- },
- {
- "x": 5.0,
- "y": 2345.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 44,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 45,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 46,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 45,
- "pinName": ""
- },
- "pin2": {
- "compId": 47,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 46,
- "pinName": ""
- },
- "pin2": {
- "compId": 48,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 39,
- "pinName": ""
- },
- "pin2": {
- "compId": 49,
- "pinName": ""
- },
- "path": [
- {
- "x": 25.0,
- "y": 2105.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 44,
- "pinName": ""
- },
- "pin2": {
- "compId": 50,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 50,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 47,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 48,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 49,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 47,
- "pinName": ""
- },
- "pin2": {
- "compId": 51,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 48,
- "pinName": ""
- },
- "pin2": {
- "compId": 52,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 49,
- "pinName": ""
- },
- "pin2": {
- "compId": 53,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 51,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "C1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 52,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "C2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 53,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "C3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "IRAMn+3"
- },
- "pin2": {
- "compId": 11,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 2450.0
- },
- {
- "x": 5.0,
- "y": 2455.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 50,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 2585.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 51,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 15.0,
- "y": 2595.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 52,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 20.0,
- "y": 2605.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 53,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 25.0,
- "y": 2615.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 8,
- "pinName": "D1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 8,
- "pinName": "D2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 8,
- "pinName": "D3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 8,
- "pinName": "D4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "RAMWE"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 8,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 230.0,
- "y": 70.0
- },
- {
- "x": 230.0,
- "y": 105.0
- },
- {
- "x": 90.0,
- "y": 105.0
- },
- {
- "x": 90.0,
- "y": 2305.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "QWE"
- },
- "pin2": {
- "compId": 13,
- "pinName": "WE"
- },
- "path": [
- {
- "x": 85.0,
- "y": 100.0
- },
- {
- "x": 85.0,
- "y": 2505.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "YF"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S0"
- },
- "path": [
- {
- "x": 70.0,
- "y": 80.0
- },
- {
- "x": 70.0,
- "y": 140.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y1"
- },
- "path": [
- {
- "x": 335.0,
- "y": 140.0
- },
- {
- "x": 335.0,
- "y": 50.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y3"
- },
- "path": [
- {
- "x": 335.0,
- "y": 160.0
- },
- {
- "x": 335.0,
- "y": 250.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Y4"
- },
- "path": [
- {
- "x": 325.0,
- "y": 170.0
- },
- {
- "x": 325.0,
- "y": 350.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 54,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 54,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 315.0,
- "y": 445.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 54,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 315.0,
- "y": 455.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F\u003d0"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 60.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "SBE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "FN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "SN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I5",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "L",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "RN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "CinE",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.25,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 55.0,
- "y": 10.0
- },
- "id": "GUInand3"
- },
- {
- "pos": {
- "x": 55.0,
- "y": 45.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 55.0,
- "y": 70.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 100.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 100.0,
- "y": 135.0
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 4.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 44.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 54.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 64.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 84.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 99.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 49.0,
- "y": 74.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 34.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I5"
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 45.0,
- "y": 45.0
- },
- {
- "x": 45.0,
- "y": 50.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "FN"
- },
- "path": [
- {
- "x": 5.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I4"
- },
- "pin2": {
- "compId": 11,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 10.0,
- "y": 40.0
- },
- {
- "x": 45.0,
- "y": 40.0
- },
- {
- "x": 45.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "SN"
- },
- "path": [
- {
- "x": 10.0,
- "y": 105.0
- },
- {
- "x": 135.0,
- "y": 105.0
- },
- {
- "x": 135.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I3"
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": [
- {
- "x": 50.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "RN"
- },
- "path": [
- {
- "x": 50.0,
- "y": 220.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": [
- {
- "x": 50.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "CinE"
- },
- "path": [
- {
- "x": 40.0,
- "y": 5.0
- },
- {
- "x": 115.0,
- "y": 5.0
- },
- {
- "x": 115.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 40.0,
- "y": 150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "L"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "SBE"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901ALUFuncDecode",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 120.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "R2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 105.0
- },
- "name": "S3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "R3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 115.0
- },
- "name": "S4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "R4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "OVR",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "Cn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "F1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I5",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "F2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "F3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "F4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "Cn+4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "S1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "R1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "S2",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.25,
- "subComps": [
- {
- "pos": {
- "x": 20.0,
- "y": 2.5
- },
- "id": "GUIAm2901ALUFuncDecode"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 80.0
- },
- "id": "GUIAm2901ALUOneBit"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 180.0
- },
- "id": "GUIAm2901ALUOneBit"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 280.0
- },
- "id": "GUIAm2901ALUOneBit"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 380.0
- },
- "id": "GUIAm2901ALUOneBit"
- },
- {
- "pos": {
- "x": 95.0,
- "y": 400.0
- },
- "id": "GUIxor"
- },
- {
- "pos": {
- "x": 24.0,
- "y": 94.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 194.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 294.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 26.5,
- "y": 104.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 26.5,
- "y": 204.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 26.5,
- "y": 304.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 124.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 224.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 29.0,
- "y": 324.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 144.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 244.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 344.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 154.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 254.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 354.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 36.5,
- "y": 164.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 36.5,
- "y": 264.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 36.5,
- "y": 364.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 84.0,
- "y": 374.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 84.0,
- "y": 384.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I5"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I5"
- },
- "path": [
- {
- "x": 5.0,
- "y": 20.0
- },
- {
- "x": 5.0,
- "y": 7.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I4"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I4"
- },
- "path": [
- {
- "x": 10.0,
- "y": 60.0
- },
- {
- "x": 10.0,
- "y": 17.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I3"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I3"
- },
- "path": [
- {
- "x": 15.0,
- "y": 100.0
- },
- {
- "x": 15.0,
- "y": 27.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "SBE"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": [
- {
- "x": 62.5,
- "y": 37.5
- },
- {
- "x": 62.5,
- "y": 70.0
- },
- {
- "x": 25.0,
- "y": 70.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "CoutE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "CoutE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "CoutE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "CoutE"
- },
- "path": [
- {
- "x": 25.0,
- "y": 395.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "CinE"
- },
- "pin2": {
- "compId": 10,
- "pinName": ""
- },
- "path": [
- {
- "x": 70.0,
- "y": 7.5
- },
- {
- "x": 70.0,
- "y": 77.5
- },
- {
- "x": 27.5,
- "y": 77.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "CinE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "CinE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "CinE"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "CinE"
- },
- "path": [
- {
- "x": 27.5,
- "y": 405.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "RN"
- },
- "pin2": {
- "compId": 13,
- "pinName": ""
- },
- "path": [
- {
- "x": 57.5,
- "y": 57.5
- },
- {
- "x": 57.5,
- "y": 65.0
- },
- {
- "x": 30.0,
- "y": 65.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "RN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "RN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "RN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "RN"
- },
- "path": [
- {
- "x": 30.0,
- "y": 425.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "SN"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": [
- {
- "x": 65.0,
- "y": 27.5
- },
- {
- "x": 65.0,
- "y": 72.5
- },
- {
- "x": 32.5,
- "y": 72.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "SN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "SN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "SN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "SN"
- },
- "path": [
- {
- "x": 32.5,
- "y": 445.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "FN"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": [
- {
- "x": 60.0,
- "y": 47.5
- },
- {
- "x": 60.0,
- "y": 67.5
- },
- {
- "x": 35.0,
- "y": 67.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "FN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "FN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "FN"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "FN"
- },
- "path": [
- {
- "x": 35.0,
- "y": 455.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "L"
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": [
- {
- "x": 67.5,
- "y": 17.5
- },
- {
- "x": 67.5,
- "y": 75.0
- },
- {
- "x": 37.5,
- "y": 75.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 24,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "L"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "L"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "L"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "L"
- },
- "path": [
- {
- "x": 37.5,
- "y": 465.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "R1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "R"
- },
- "path": [
- {
- "x": 10.0,
- "y": 180.0
- },
- {
- "x": 10.0,
- "y": 115.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "R2"
- },
- "pin2": {
- "compId": 3,
- "pinName": "R"
- },
- "path": [
- {
- "x": 10.0,
- "y": 220.0
- },
- {
- "x": 10.0,
- "y": 215.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "R3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "R"
- },
- "path": [
- {
- "x": 10.0,
- "y": 260.0
- },
- {
- "x": 10.0,
- "y": 315.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "R4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "R"
- },
- "path": [
- {
- "x": 20.0,
- "y": 300.0
- },
- {
- "x": 20.0,
- "y": 415.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "S"
- },
- "path": [
- {
- "x": 15.0,
- "y": 340.0
- },
- {
- "x": 15.0,
- "y": 135.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S2"
- },
- "pin2": {
- "compId": 3,
- "pinName": "S"
- },
- "path": [
- {
- "x": 5.0,
- "y": 380.0
- },
- {
- "x": 5.0,
- "y": 235.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "S"
- },
- "path": [
- {
- "x": 10.0,
- "y": 420.0
- },
- {
- "x": 10.0,
- "y": 335.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "S"
- },
- "path": [
- {
- "x": 10.0,
- "y": 460.0
- },
- {
- "x": 10.0,
- "y": 435.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Cn"
- },
- "pin2": {
- "compId": 2,
- "pinName": "Cin"
- },
- "path": [
- {
- "x": 5.0,
- "y": 140.0
- },
- {
- "x": 5.0,
- "y": 85.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Cout"
- },
- "pin2": {
- "compId": 3,
- "pinName": "Cin"
- },
- "path": [
- {
- "x": 85.0,
- "y": 85.0
- },
- {
- "x": 85.0,
- "y": 175.0
- },
- {
- "x": 40.0,
- "y": 175.0
- },
- {
- "x": 40.0,
- "y": 185.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Cout"
- },
- "pin2": {
- "compId": 4,
- "pinName": "Cin"
- },
- "path": [
- {
- "x": 85.0,
- "y": 185.0
- },
- {
- "x": 85.0,
- "y": 275.0
- },
- {
- "x": 40.0,
- "y": 275.0
- },
- {
- "x": 40.0,
- "y": 285.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Cout"
- },
- "pin2": {
- "compId": 25,
- "pinName": ""
- },
- "path": [
- {
- "x": 85.0,
- "y": 285.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "Cin"
- },
- "path": [
- {
- "x": 40.0,
- "y": 375.0
- },
- {
- "x": 40.0,
- "y": 385.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Cout"
- },
- "pin2": {
- "compId": 26,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "F"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F1"
- },
- "path": [
- {
- "x": 90.0,
- "y": 95.0
- },
- {
- "x": 90.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "F"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F2"
- },
- "path": [
- {
- "x": 95.0,
- "y": 195.0
- },
- {
- "x": 95.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "F"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F3"
- },
- "path": [
- {
- "x": 100.0,
- "y": 295.0
- },
- {
- "x": 100.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "F"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F4"
- },
- "path": [
- {
- "x": 105.0,
- "y": 395.0
- },
- {
- "x": 105.0,
- "y": 140.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 90.0,
- "y": 375.0
- },
- {
- "x": 90.0,
- "y": 405.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 85.0,
- "y": 415.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "Cn+4"
- },
- "path": [
- {
- "x": 130.0,
- "y": 385.0
- },
- {
- "x": 130.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "OVR"
- }
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901ALUInclDecode",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 230.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 195.0
- },
- "name": "Q1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 205.0
- },
- "name": "Q2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 215.0
- },
- "name": "Q3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 225.0
- },
- "name": "Q4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "I0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "I1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "I2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "OVR",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "Cn",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I5",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 115.0
- },
- "name": "A1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 125.0
- },
- "name": "A2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 135.0
- },
- "name": "A3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 145.0
- },
- "name": "A4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "Cn+4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "F1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "F2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "F3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "F4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 95.0
- },
- "name": "D3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 155.0
- },
- "name": "B1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 105.0
- },
- "name": "D4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 165.0
- },
- "name": "B2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 175.0
- },
- "name": "B3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 185.0
- },
- "name": "B4",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.25,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 165.0
- },
- "id": "GUIAm2901SourceDecode"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 365.0
- },
- "id": "GUIsel2_4"
- },
- {
- "pos": {
- "x": 45.0,
- "y": 575.0
- },
- "id": "GUIsel3_4"
- },
- {
- "pos": {
- "x": 60.0,
- "y": 15.0
- },
- "id": "GUIAm2901ALUInclDecode"
- },
- {
- "pos": {
- "x": 9.0,
- "y": 459.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 14.0,
- "y": 499.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 19.0,
- "y": 539.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 24.0,
- "y": 579.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I5"
- },
- "pin2": {
- "compId": 4,
- "pinName": "I5"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "I4"
- },
- "path": [
- {
- "x": 5.0,
- "y": 60.0
- },
- {
- "x": 5.0,
- "y": 30.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "I3"
- },
- "path": [
- {
- "x": 15.0,
- "y": 100.0
- },
- {
- "x": 15.0,
- "y": 40.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I2"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I2"
- },
- "path": [
- {
- "x": 5.0,
- "y": 140.0
- },
- {
- "x": 5.0,
- "y": 170.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0"
- },
- "pin2": {
- "compId": 1,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 5.0,
- "y": 220.0
- },
- {
- "x": 5.0,
- "y": 190.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Cn"
- },
- "pin2": {
- "compId": 4,
- "pinName": "Cn"
- },
- "path": [
- {
- "x": 10.0,
- "y": 260.0
- },
- {
- "x": 10.0,
- "y": 50.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 15.0,
- "y": 300.0
- },
- {
- "x": 15.0,
- "y": 390.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 10.0,
- "y": 340.0
- },
- {
- "x": 10.0,
- "y": 400.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 5.0,
- "y": 380.0
- },
- {
- "x": 5.0,
- "y": 410.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A4"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A1"
- },
- "pin2": {
- "compId": 5,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A2"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A3"
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "A4"
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 430.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B2"
- },
- "path": [
- {
- "x": 15.0,
- "y": 440.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 20.0,
- "y": 450.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 25.0,
- "y": 460.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A1"
- },
- "path": [
- {
- "x": 10.0,
- "y": 610.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A2"
- },
- "path": [
- {
- "x": 15.0,
- "y": 620.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A3"
- },
- "path": [
- {
- "x": 20.0,
- "y": 630.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A4"
- },
- "path": [
- {
- "x": 25.0,
- "y": 640.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B1"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B1"
- },
- "path": [
- {
- "x": 5.0,
- "y": 620.0
- },
- {
- "x": 5.0,
- "y": 650.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B2"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B3"
- },
- "path": [
- {
- "x": 5.0,
- "y": 700.0
- },
- {
- "x": 5.0,
- "y": 670.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "B4"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B4"
- },
- "path": [
- {
- "x": 10.0,
- "y": 740.0
- },
- {
- "x": 10.0,
- "y": 680.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Q1"
- },
- "pin2": {
- "compId": 3,
- "pinName": "C1"
- },
- "path": [
- {
- "x": 15.0,
- "y": 780.0
- },
- {
- "x": 15.0,
- "y": 690.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Q2"
- },
- "pin2": {
- "compId": 3,
- "pinName": "C2"
- },
- "path": [
- {
- "x": 20.0,
- "y": 820.0
- },
- {
- "x": 20.0,
- "y": 700.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Q3"
- },
- "pin2": {
- "compId": 3,
- "pinName": "C3"
- },
- "path": [
- {
- "x": 25.0,
- "y": 860.0
- },
- {
- "x": 25.0,
- "y": 710.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "Q4"
- },
- "pin2": {
- "compId": 3,
- "pinName": "C4"
- },
- "path": [
- {
- "x": 30.0,
- "y": 900.0
- },
- {
- "x": 30.0,
- "y": 720.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "SQ"
- },
- "pin2": {
- "compId": 3,
- "pinName": "SC"
- },
- "path": [
- {
- "x": 75.0,
- "y": 170.0
- },
- {
- "x": 75.0,
- "y": 240.0
- },
- {
- "x": 30.0,
- "y": 240.0
- },
- {
- "x": 30.0,
- "y": 600.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "RA"
- },
- "pin2": {
- "compId": 2,
- "pinName": "SB"
- },
- "path": [
- {
- "x": 70.0,
- "y": 180.0
- },
- {
- "x": 70.0,
- "y": 235.0
- },
- {
- "x": 20.0,
- "y": 235.0
- },
- {
- "x": 20.0,
- "y": 380.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "SB"
- },
- "pin2": {
- "compId": 3,
- "pinName": "SB"
- },
- "path": [
- {
- "x": 65.0,
- "y": 190.0
- },
- {
- "x": 65.0,
- "y": 230.0
- },
- {
- "x": 35.0,
- "y": 230.0
- },
- {
- "x": 35.0,
- "y": 590.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "SA"
- },
- "pin2": {
- "compId": 3,
- "pinName": "SA"
- },
- "path": [
- {
- "x": 60.0,
- "y": 200.0
- },
- {
- "x": 60.0,
- "y": 225.0
- },
- {
- "x": 40.0,
- "y": 225.0
- },
- {
- "x": 40.0,
- "y": 580.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "RD"
- },
- "pin2": {
- "compId": 2,
- "pinName": "SA"
- },
- "path": [
- {
- "x": 55.0,
- "y": 210.0
- },
- {
- "x": 55.0,
- "y": 220.0
- },
- {
- "x": 25.0,
- "y": 220.0
- },
- {
- "x": 25.0,
- "y": 370.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 4,
- "pinName": "R1"
- },
- "path": [
- {
- "x": 82.5,
- "y": 370.0
- },
- {
- "x": 82.5,
- "y": 162.5
- },
- {
- "x": 20.0,
- "y": 162.5
- },
- {
- "x": 20.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 4,
- "pinName": "R2"
- },
- "path": [
- {
- "x": 85.0,
- "y": 380.0
- },
- {
- "x": 85.0,
- "y": 160.0
- },
- {
- "x": 22.5,
- "y": 160.0
- },
- {
- "x": 22.5,
- "y": 70.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "R3"
- },
- "path": [
- {
- "x": 87.5,
- "y": 390.0
- },
- {
- "x": 87.5,
- "y": 157.5
- },
- {
- "x": 25.0,
- "y": 157.5
- },
- {
- "x": 25.0,
- "y": 80.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "R4"
- },
- "path": [
- {
- "x": 90.0,
- "y": 400.0
- },
- {
- "x": 90.0,
- "y": 155.0
- },
- {
- "x": 27.5,
- "y": 155.0
- },
- {
- "x": 27.5,
- "y": 90.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y1"
- },
- "pin2": {
- "compId": 4,
- "pinName": "S1"
- },
- "path": [
- {
- "x": 92.5,
- "y": 580.0
- },
- {
- "x": 92.5,
- "y": 152.5
- },
- {
- "x": 30.0,
- "y": 152.5
- },
- {
- "x": 30.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y2"
- },
- "pin2": {
- "compId": 4,
- "pinName": "S2"
- },
- "path": [
- {
- "x": 95.0,
- "y": 590.0
- },
- {
- "x": 95.0,
- "y": 150.0
- },
- {
- "x": 32.5,
- "y": 150.0
- },
- {
- "x": 32.5,
- "y": 110.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "S3"
- },
- "path": [
- {
- "x": 97.5,
- "y": 600.0
- },
- {
- "x": 97.5,
- "y": 147.5
- },
- {
- "x": 35.0,
- "y": 147.5
- },
- {
- "x": 35.0,
- "y": 120.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y4"
- },
- "pin2": {
- "compId": 4,
- "pinName": "S4"
- },
- "path": [
- {
- "x": 100.0,
- "y": 610.0
- },
- {
- "x": 100.0,
- "y": 145.0
- },
- {
- "x": 37.5,
- "y": 145.0
- },
- {
- "x": 37.5,
- "y": 130.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "F1"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "F2"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F2"
- },
- "path": [
- {
- "x": 135.0,
- "y": 30.0
- },
- {
- "x": 135.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "F3"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F3"
- },
- "path": [
- {
- "x": 130.0,
- "y": 40.0
- },
- {
- "x": 130.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "F4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F4"
- },
- "path": [
- {
- "x": 125.0,
- "y": 50.0
- },
- {
- "x": 125.0,
- "y": 140.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Cn+4"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Cn+4"
- },
- "path": [
- {
- "x": 120.0,
- "y": 60.0
- },
- {
- "x": 120.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "OVR"
- },
- "pin2": {
- "compId": 0,
- "pinName": "OVR"
- },
- "path": [
- {
- "x": 115.0,
- "y": 70.0
- },
- {
- "x": 115.0,
- "y": 220.0
- }
- ]
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 90.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "R",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "S",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "F",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 75.0
- },
- "name": "FN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "Cin",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 65.0
- },
- "name": "SN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Cout",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "RN",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 85.0
- },
- "name": "L",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "CinE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "CoutE",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.2,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 20.0
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 10.0,
- "y": 190.0
- },
- "id": "GUIxor"
- },
- {
- "pos": {
- "x": 10.0,
- "y": 290.0
- },
- "id": "GUIxor"
- },
- {
- "pos": {
- "x": 60.0,
- "y": 20.0
- },
- "id": "GUIfulladder"
- },
- {
- "pos": {
- "x": 60.0,
- "y": 55.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 135.0,
- "y": 20.0
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 90.0,
- "y": 70.0
- },
- "id": "GUImux1"
- },
- {
- "pos": {
- "x": 135.0,
- "y": 70.0
- },
- "id": "GUIxor"
- },
- {
- "pos": {
- "x": 49.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 54.0,
- "y": 69.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "Cin"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "CoutE"
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 75.0
- },
- {
- "x": 5.0,
- "y": 10.0
- },
- {
- "x": 130.0,
- "y": 10.0
- },
- {
- "x": 130.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "CinE"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 125.0
- },
- {
- "x": 7.5,
- "y": 35.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "R"
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "RN"
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "S"
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "SN"
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "FN"
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 130.0,
- "y": 375.0
- },
- {
- "x": 130.0,
- "y": 85.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "L"
- },
- "pin2": {
- "compId": 7,
- "pinName": "S0"
- },
- "path": [
- {
- "x": 87.5,
- "y": 425.0
- },
- {
- "x": 87.5,
- "y": 75.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": ""
- },
- "path": [
- {
- "x": 50.0,
- "y": 195.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 50.0,
- "y": 35.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 10,
- "pinName": ""
- },
- "path": [
- {
- "x": 55.0,
- "y": 295.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "C"
- },
- "path": [
- {
- "x": 55.0,
- "y": 45.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": "I0"
- },
- "path": [
- {
- "x": 100.0,
- "y": 25.0
- },
- {
- "x": 100.0,
- "y": 65.0
- },
- {
- "x": 85.0,
- "y": 65.0
- },
- {
- "x": 85.0,
- "y": 85.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Z"
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 7,
- "pinName": "I1"
- },
- "path": [
- {
- "x": 82.5,
- "y": 65.0
- },
- {
- "x": 82.5,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Cout"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "F"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901ALUOneBit",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 60.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "LSH",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "NSH",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "RSH",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I6",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "YF",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I7",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "RAMWE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 55.0
- },
- "name": "QWE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I8",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.25,
- "subComps": [
- {
- "pos": {
- "x": 15.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 15.0,
- "y": 150.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 50.0,
- "y": 130.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 80.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 80.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 80.0,
- "y": 145.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 110.0,
- "y": 105.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 115.0,
- "y": 210.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 14.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 24.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 64.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 9.0,
- "y": 104.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 154.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 44.0,
- "y": 54.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 39.0,
- "y": 134.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 99.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 104.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 74.0,
- "y": 159.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 109.0,
- "y": 214.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I8"
- },
- "pin2": {
- "compId": 14,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": ""
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I7"
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 10.0,
- "y": 55.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I6"
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": [
- {
- "x": 5.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 165.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 5.0
- },
- {
- "x": 40.0,
- "y": 5.0
- },
- {
- "x": 40.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": [
- {
- "x": 40.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 40.0,
- "y": 65.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 0,
- "pinName": "NSH"
- },
- "path": [
- {
- "x": 45.0,
- "y": 5.0
- },
- {
- "x": 135.0,
- "y": 5.0
- },
- {
- "x": 135.0,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": [
- {
- "x": 45.0,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": [
- {
- "x": 10.0,
- "y": 115.0
- },
- {
- "x": 45.0,
- "y": 115.0
- },
- {
- "x": 45.0,
- "y": 105.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 24,
- "pinName": ""
- },
- "path": [
- {
- "x": 40.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 40.0,
- "y": 145.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 25,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- },
- "path": [
- {
- "x": 75.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 75.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "RAMWE"
- },
- "path": [
- {
- "x": 125.0,
- "y": 60.0
- },
- {
- "x": 125.0,
- "y": 100.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 26,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A"
- },
- "path": [
- {
- "x": 75.0,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 27,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "LSH"
- },
- "path": [
- {
- "x": 125.0,
- "y": 140.0
- },
- {
- "x": 125.0,
- "y": 180.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A"
- },
- "path": [
- {
- "x": 75.0,
- "y": 150.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "RSH"
- },
- "path": [
- {
- "x": 130.0,
- "y": 20.0
- },
- {
- "x": 130.0,
- "y": 60.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 12,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 75.0,
- "y": 170.0
- },
- {
- "x": 105.0,
- "y": 170.0
- },
- {
- "x": 105.0,
- "y": 120.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": [
- {
- "x": 110.0,
- "y": 155.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "B"
- },
- "path": [
- {
- "x": 110.0,
- "y": 225.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "YF"
- }
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "QWE"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901DestDecode",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 60.0,
- "interfacePins": [
- {
- "location": {
- "x": 0.0,
- "y": 55.0
- },
- "name": "D4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "Q1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "Q2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "Q3",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "C",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "Q4",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "D1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "WE",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 35.0
- },
- "name": "D2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 45.0
- },
- "name": "D3",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.4,
- "subComps": [
- {
- "pos": {
- "x": 5.0,
- "y": 15.0
- },
- "id": "GUIand"
- },
- {
- "pos": {
- "x": 50.0,
- "y": 7.5
- },
- "id": "GUIdff"
- },
- {
- "pos": {
- "x": 50.0,
- "y": 32.5
- },
- "id": "GUIdff"
- },
- {
- "pos": {
- "x": 50.0,
- "y": 57.5
- },
- "id": "GUIdff"
- },
- {
- "pos": {
- "x": 50.0,
- "y": 82.5
- },
- "id": "GUIdff"
- },
- {
- "pos": {
- "x": 41.5,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 41.5,
- "y": 36.5
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 41.5,
- "y": 61.5
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "C"
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "WE"
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- }
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 6,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "C"
- },
- "path": [
- {
- "x": 42.5,
- "y": 12.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "C"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "C"
- },
- "path": [
- {
- "x": 42.5,
- "y": 87.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D1"
- },
- "pin2": {
- "compId": 2,
- "pinName": "D"
- },
- "path": [
- {
- "x": 17.5,
- "y": 62.5
- },
- {
- "x": 17.5,
- "y": 42.5
- },
- {
- "x": 45.0,
- "y": 42.5
- },
- {
- "x": 45.0,
- "y": 22.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D2"
- },
- "pin2": {
- "compId": 3,
- "pinName": "D"
- },
- "path": [
- {
- "x": 22.5,
- "y": 87.5
- },
- {
- "x": 22.5,
- "y": 47.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D3"
- },
- "pin2": {
- "compId": 4,
- "pinName": "D"
- },
- "path": [
- {
- "x": 27.5,
- "y": 112.5
- },
- {
- "x": 27.5,
- "y": 72.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "D4"
- },
- "pin2": {
- "compId": 5,
- "pinName": "D"
- },
- "path": [
- {
- "x": 32.5,
- "y": 137.5
- },
- {
- "x": 32.5,
- "y": 97.5
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q1"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q2"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q3"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Q"
- },
- "pin2": {
- "compId": 0,
- "pinName": "Q4"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "GUIAm2901QReg",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "width": 35.0,
- "height": 50.0,
- "interfacePins": [
- {
- "location": {
- "x": 35.0,
- "y": 45.0
- },
- "name": "RD",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 25.0
- },
- "name": "I0",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 15.0
- },
- "name": "I1",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 0.0,
- "y": 5.0
- },
- "name": "I2",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 5.0
- },
- "name": "SQ",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 35.0
- },
- "name": "SA",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 15.0
- },
- "name": "RA",
- "logicWidth": 1
- },
- {
- "location": {
- "x": 35.0,
- "y": 25.0
- },
- "name": "SB",
- "logicWidth": 1
- }
- ],
- "submodel": {
- "innerScale": 0.25,
- "subComps": [
- {
- "pos": {
- "x": 10.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 10.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 10.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 130.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 40.0,
- "y": 170.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 70.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 70.0,
- "y": 50.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 70.0,
- "y": 90.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 70.0,
- "y": 130.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 70.0,
- "y": 170.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 100.0,
- "y": 10.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 100.0,
- "y": 170.0
- },
- "id": "GUINandGate",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 4.0,
- "y": 144.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 99.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 6.5,
- "y": 104.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 31.5,
- "y": 54.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 64.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 34.0,
- "y": 134.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 36.5,
- "y": 99.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 59.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 99.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 64.0,
- "y": 139.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 94.0,
- "y": 19.0
- },
- "id": "WireCrossPoint",
- "params": 1
- },
- {
- "pos": {
- "x": 94.0,
- "y": 179.0
- },
- "id": "WireCrossPoint",
- "params": 1
- }
- ],
- "innerWires": [
- {
- "pin1": {
- "compId": 0,
- "pinName": "I2"
- },
- "pin2": {
- "compId": 16,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "A"
- },
- "path": [
- {
- "x": 5.0,
- "y": 5.0
- },
- {
- "x": 35.0,
- "y": 5.0
- },
- {
- "x": 35.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 17,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 17,
- "pinName": ""
- },
- "pin2": {
- "compId": 1,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 16,
- "pinName": ""
- },
- "pin2": {
- "compId": 18,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 18,
- "pinName": ""
- },
- "pin2": {
- "compId": 13,
- "pinName": "B"
- },
- "path": [
- {
- "x": 5.0,
- "y": 195.0
- },
- {
- "x": 65.0,
- "y": 195.0
- },
- {
- "x": 65.0,
- "y": 185.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I1"
- },
- "pin2": {
- "compId": 19,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 55.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 19,
- "pinName": ""
- },
- "pin2": {
- "compId": 2,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 65.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 0,
- "pinName": "I0"
- },
- "pin2": {
- "compId": 20,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "A"
- },
- "path": [
- {
- "x": 7.5,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 20,
- "pinName": ""
- },
- "pin2": {
- "compId": 21,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 3,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 21,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "B"
- },
- "path": [
- {
- "x": 7.5,
- "y": 112.5
- },
- {
- "x": 32.5,
- "y": 112.5
- },
- {
- "x": 32.5,
- "y": 105.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 1,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 22,
- "pinName": ""
- },
- "path": [
- {
- "x": 32.5,
- "y": 20.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 22,
- "pinName": ""
- },
- "pin2": {
- "compId": 6,
- "pinName": "A"
- },
- "path": [
- {
- "x": 32.5,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 2,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 23,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 4,
- "pinName": "B"
- },
- "path": [
- {
- "x": 35.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 23,
- "pinName": ""
- },
- "pin2": {
- "compId": 24,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 5,
- "pinName": "B"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 24,
- "pinName": ""
- },
- "pin2": {
- "compId": 25,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 7,
- "pinName": "A"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 25,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "A"
- },
- "path": [
- {
- "x": 35.0,
- "y": 175.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 3,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 26,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 9,
- "pinName": "B"
- },
- "path": [
- {
- "x": 37.5,
- "y": 35.0
- },
- {
- "x": 65.0,
- "y": 35.0
- },
- {
- "x": 65.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 26,
- "pinName": ""
- },
- "pin2": {
- "compId": 8,
- "pinName": "B"
- },
- "path": [
- {
- "x": 37.5,
- "y": 185.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 4,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 9,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 5,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 27,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "A"
- },
- "path": [
- {
- "x": 65.0,
- "y": 55.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 27,
- "pinName": ""
- },
- "pin2": {
- "compId": 10,
- "pinName": "B"
- },
- "path": [
- {
- "x": 65.0,
- "y": 65.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 6,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 28,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "A"
- },
- "path": [
- {
- "x": 65.0,
- "y": 95.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 28,
- "pinName": ""
- },
- "pin2": {
- "compId": 11,
- "pinName": "B"
- },
- "path": [
- {
- "x": 65.0,
- "y": 105.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 7,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 29,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "A"
- },
- "path": [
- {
- "x": 65.0,
- "y": 135.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 29,
- "pinName": ""
- },
- "pin2": {
- "compId": 12,
- "pinName": "B"
- },
- "path": [
- {
- "x": 65.0,
- "y": 145.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 8,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 13,
- "pinName": "A"
- }
- },
- {
- "pin1": {
- "compId": 9,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 30,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "A"
- },
- "path": [
- {
- "x": 95.0,
- "y": 15.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 30,
- "pinName": ""
- },
- "pin2": {
- "compId": 14,
- "pinName": "B"
- },
- "path": [
- {
- "x": 95.0,
- "y": 25.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 10,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "RA"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 11,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "SB"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 12,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "SA"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 13,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 31,
- "pinName": ""
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "A"
- },
- "path": [
- {
- "x": 95.0,
- "y": 175.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 31,
- "pinName": ""
- },
- "pin2": {
- "compId": 15,
- "pinName": "B"
- },
- "path": [
- {
- "x": 95.0,
- "y": 185.0
- }
- ]
- },
- {
- "pin1": {
- "compId": 14,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "SQ"
- },
- "path": []
- },
- {
- "pin1": {
- "compId": 15,
- "pinName": "Y"
- },
- "pin2": {
- "compId": 0,
- "pinName": "RD"
- },
- "path": []
- }
- ]
- },
- "symbolRendererSnippetID": "SimpleRectangularLikeSymbolRenderer",
- "symbolRendererParams": {
- "centerText": "Am2901SourceDecode",
- "horizontalComponentCenter": 17.5,
- "centerTextHeight": 5.0,
- "pinLabelHeight": 3.5,
- "pinLabelMargin": 0.5
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.editor;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-public class DialogManager
-{
- private Shell parent;
-
- public DialogManager(Shell parent)
- {
- this.parent = parent;
- }
-
- public void openWarningDialog(String title, String message)
- {
- MessageBox b = new MessageBox(parent, SWT.ICON_WARNING | SWT.OK);
- b.setText(title);
- b.setMessage(message);
- b.open();
- }
-
- public static class InteractiveDialog
- {
- private String[] finalInput;
- private final Display display;
- private final Shell shell;
- private final Button b1, b2;
- private Text[] textFields;
- private InteractiveDialog.InteractiveDialogState state;
-
- public InteractiveDialog(String title, String acceptLabel, String cancelLabel, String... inputs)
- {
- display = Display.getDefault();
- shell = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.ON_TOP | SWT.APPLICATION_MODAL);
- shell.setMinimumSize(500, 150);
- shell.setText(title);
- GridLayout layout = new GridLayout();
- layout.numColumns = 2;
- shell.setLayout(layout);
-
- this.textFields = new Text[inputs.length];
- for (int i = 0; i < inputs.length; i++)
- {
- Label textFieldName = new Label(shell, SWT.NONE);
- textFieldName.setText(inputs[i].concat(":"));
- GridData g = new GridData();
- g.grabExcessHorizontalSpace = true;
- g.horizontalAlignment = SWT.FILL;
- Text newTextField = new Text(shell, SWT.BORDER);
- newTextField.setLayoutData(g);
- textFields[i] = newTextField;
- }
- b1 = new Button(shell, SWT.PUSH);
- b1.addListener(SWT.Selection, e ->
- {
- state = InteractiveDialogState.ACCEPTED;
- buildFinalInput();
- dispose();
- });
- b1.setText(acceptLabel);
- b2 = new Button(shell, SWT.PUSH);
- b2.addListener(SWT.Selection, e ->
- {
- state = InteractiveDialogState.CANCELLED;
- buildFinalInput();
- dispose();
- });
- b2.setText(cancelLabel);
-
- state = InteractiveDialogState.ACTIVE;
-
- shell.pack();
- }
-
- public String getText()
- {
- return getText(0);
- }
-
- public String getText(int index)
- {
- if (!shell.isDisposed())
- return textFields[index].getText();
- else
- return finalInput[index];
- }
-
- public void open()
- {
- shell.open();
- while (!shell.isDisposed())
- if (!display.readAndDispatch())
- display.sleep();
- }
-
- public void dispose()
- {
- shell.dispose();
- }
-
- public InteractiveDialog.InteractiveDialogState getState()
- {
- return state;
- }
-
- private void buildFinalInput()
- {
- finalInput = new String[textFields.length];
- for (int i = 0; i < textFields.length; i++)
- finalInput[i] = textFields[i].getText();
- }
-
- public static enum InteractiveDialogState
- {
- ACTIVE, ACCEPTED, CANCELLED;
- }
- }
-
- public static void openAddPinDialog(Editor editor, double x, double y)
- {
-
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor;
-
-import org.eclipse.swt.graphics.Color;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-import net.mograsim.preferences.Preferences;
-
-public class EditableSubmodelComponent extends DeserializedSubmodelComponent
-{
- private static final double labelFontHeight = 5;
- private static final double pinNameFontHeight = 3;
- private String label;
-
- public EditableSubmodelComponent(ViewModelModifiable model, String label)
- {
- super(model);
- this.label = label;
- setSubmodelScale(0.2);
- addSubmodelInterface(new MovablePin(this, "A Pin", 1, 0, 10));
-
- }
-
- public ViewModelModifiable getSubmodelModifiable()
- {
- return submodelModifiable;
- }
-
- @Override
- protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
- {
- Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
- if (foreground != null)
- gc.setForeground(foreground);
- gc.drawRectangle(getBounds());
- }
-
- @Override
- protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
- {
- Font oldFont = gc.getFont();
- gc.setFont(new Font(oldFont.getName(), labelFontHeight, oldFont.getStyle()));
- Point textExtent = gc.textExtent(label);
- Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
- if (textColor != null)
- gc.setForeground(textColor);
- gc.drawText(label, getPosX() + (getWidth() - textExtent.x) / 2, getPosY() + (getHeight() - textExtent.y) / 2,
- true);
- gc.setFont(new Font(oldFont.getName(), pinNameFontHeight, oldFont.getStyle()));
- for (String name : pinsUnmodifiable.keySet())
- {
- Pin p = pinsUnmodifiable.get(name);
- Point pos = p.getPos();
- gc.drawText(name, pos.x, pos.y, true);
- }
- gc.setFont(oldFont);
- }
-
- public void setSubmodelScale(double scale)
- {
- super.setSubmodelScale(scale);
- }
-
- public double getSubmodelScale()
- {
- return super.getSubmodelScale();
- }
-
- public void setSize(double width, double height)
- {
- super.setSize(width, height);
- }
-
- public String getLabel()
- {
- return label;
- }
-
- public void setLabel(String label)
- {
- this.label = label;
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.editor.handles.ComponentHandle;
-import net.mograsim.logic.ui.editor.handles.Handle;
-import net.mograsim.logic.ui.editor.handles.HandleManager;
-import net.mograsim.logic.ui.editor.handles.PinHandle;
-import net.mograsim.logic.ui.editor.states.StateManager;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public final class Editor
-{
- final Selection selection = new Selection();
- final Set<ComponentInfo> copyBuffer = new HashSet<>();
- public final DeserializedSubmodelComponent toBeEdited;
- public final HandleManager handleManager;
- final static Map<GUIComponent, String> identifierPerComponent = new HashMap<>();
- public final EditorGUI gui;
- public final StateManager stateManager;
- private final SaveLoadManager saveManager;
- Snapping snapping = Snapping.ABSOLUTE;
- private double snapX = 5, snapY = 5;
- public final DialogManager dialogManager;
-
- public Editor(DeserializedSubmodelComponent toBeEdited)
- {
- this.toBeEdited = toBeEdited;
- handleManager = new HandleManager(this);
- gui = new EditorGUI(this);
- stateManager = new StateManager(this);
- handleManager.init();
- saveManager = new SaveLoadManager(this);
- dialogManager = new DialogManager(gui.shell);
-
- toBeEdited.submodel.addComponentRemovedListener(c -> identifierPerComponent.remove(c));
-
- gui.open();
- }
-
- public ViewModelModifiable getSubmodel()
- {
- return toBeEdited.getSubmodelModifiable();
- }
-
- public Selection getSelection()
- {
- return selection;
- }
-
- //TODO: Remove this error prone method: Relative offset may change between multiple moves,
- //because Handles have different ways of responding to reqMove(...), causing strange behaviour
- @Deprecated
- public void moveSelection(double x, double y)
- {
- Point ref = selection.getTopLeft();
- Point snapped = new Point(x, y);
- applySnapping(snapped);
-
- for (Handle c : selection)
- {
- double newX, newY;
- newX = snapped.x + c.getPosX() - ref.x;
- newY = snapped.y + c.getPosY() - ref.y;
- c.reqMove(newX, newY);
- }
- }
-
- public void moveHandles(double x, double y, Map<Handle, Point> handleOffsetMap)
- {
- Point snapped = new Point(x, y);
- applySnapping(snapped);
-
- for (Handle c : handleOffsetMap.keySet())
- {
- Point offset = handleOffsetMap.get(c);
- double newX, newY;
- newX = snapped.x + offset.x;
- newY = snapped.y + offset.y;
- c.reqMove(newX, newY);
- }
- }
-
- public void deleteSelection()
- {
- selection.forEach(h -> h.reqDelete());
- selection.clear();
- }
-
- public void copy()
- {
- copyBuffer.clear();
- Point refPoint = selection.getTopLeft();
- for (Handle h : selection)
- {
- Optional<ComponentInfo> cInfo = h.reqCopy(refPoint);
- if(cInfo.isPresent())
- copyBuffer.add(cInfo.get());
- }
- }
-
- public void paste(double x, double y)
- {
- selection.clear();
- for (ComponentInfo info : copyBuffer)
- {
- GUIComponent comp = addComponent(info.identifier, info.params);
- ComponentHandle h = handleManager.getHandle(comp);
- h.reqMove(info.relX, info.relY);
- selection.add(h);
- }
- moveSelection(x, y);
- }
-
- public void save()
- {
- saveManager.save();
- }
-
- public void addComponent(double x, double y)
- {
- GUIComponent c = addComponent(gui.getAddListSelected(), new JsonObject());
- selection.clear();
- selection.add(handleManager.getHandle(c));
- moveSelection(x, y);
- }
-
- private GUIComponent addComponent(String identifier, JsonElement params)
- {
- GUIComponent comp = IndirectGUIComponentCreator.createComponent(toBeEdited.getSubmodelModifiable(), identifier,
- params);
- identifierPerComponent.put(comp, identifier);
- return comp;
- }
-
- public static String getIdentifier(GUIComponent c)
- {
- return identifierPerComponent.get(c);
- }
-
- public void duplicate()
- {
- copy();
- Point origin = selection.getTopLeft();
- paste(origin.x + 20, origin.y + 20);
- }
-
- private void applySnapping(Point newP)
- {
- switch (snapping)
- {
- case OFF:
- break;
- case ABSOLUTE:
- newP.x -= newP.x % snapX;
- newP.y -= newP.y % snapY;
- break;
- }
- }
-
- public static class ComponentInfo
- {
- public final double relX, relY;
- public final String identifier;
- public final JsonElement params;
-
- public ComponentInfo(double relX, double relY, String identifier, JsonElement params)
- {
- this.relX = relX;
- this.relY = relY;
- this.identifier = identifier;
- this.params = params;
- }
- }
-
- public Point getCanvasMousePosition()
- {
- //TODO
- org.eclipse.swt.graphics.Point canvasLoc = gui.logicCanvas.getLocation(),
- mouseLoc = gui.display.getCursorLocation(), shellLoc = gui.shell.getLocation();
- return new Point(mouseLoc.x - shellLoc.x - canvasLoc.x, mouseLoc.y - shellLoc.y - canvasLoc.y);
- }
-
- public Point getWorldMousePosition()
- {
- return gui.logicCanvas.displayToWorldCoords(getCanvasMousePosition());
- }
-
- public void addWire(PinHandle a, PinHandle b)
- {
- new GUIWire(toBeEdited.getSubmodelModifiable(), a.getPin(), b.getPin(), new Point[0]);
- }
-
- public static enum Snapping
- {
- OFF, ABSOLUTE;
- }
-
- public static void main(String[] args)
- {
- SaveLoadManager.openLoadDialog();
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor;
-
-import java.util.Collection;
-
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Composite;
-
-import net.haspamelodica.swt.helper.gcs.TranslatedGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.LogicUICanvas;
-import net.mograsim.logic.ui.editor.handles.Handle;
-import net.mograsim.preferences.Preferences;
-
-public class EditorCanvas extends LogicUICanvas
-{
- private Collection<Handle> handles;
-
- public EditorCanvas(Composite parent, int style, Editor editor)
- {
- super(parent, style, editor.toBeEdited.submodel);
-
- handles = editor.handleManager.getHandles();
- editor.handleManager.addHandleAddedListener(h ->
- h.addRedrawListener(this::redrawThreadsafe));
- //Is this even necessary? The Handle should be finalized by the gc
- editor.handleManager.addHandleRemovedListener(h -> h.removeRedrawListener(this::redrawThreadsafe));
-
- addZoomedRenderer(gc ->
- {
- Rectangle visibleRegion = new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom);
- Color background = Preferences.current().getColor("net.mograsim.logic.ui.color.background");
- if (background != null)
- setBackground(background);// this.setBackground, not gc.setBackground to have the background fill the
- // canvas
-
- TranslatedGC tgc = new TranslatedGC(gc, 0.0d, 0.0d, 1 / editor.toBeEdited.getSubmodelScale(), false);
- editor.toBeEdited.outlineRenderer.render(tgc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
-
- handles.forEach(h -> h.render(gc, visibleRegion));
- });
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Shell;
-
-import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay;
-import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class EditorGUI
-{
- final Display display;
- final Shell shell;
- public final EditorCanvas logicCanvas;
- private final List addList;
-
- public EditorGUI(Editor editor)
- {
- display = Display.getDefault();
- shell = new Shell(display);
-
- //Layout
- GridLayout layout = new GridLayout();
- shell.setLayout(layout);
- layout.numColumns = 2;
-
- GridData d = new GridData();
- d.grabExcessVerticalSpace = true;
- d.verticalAlignment = SWT.FILL;
- addList = new List(shell, SWT.FILL);
- addList.setLayoutData(d);
- refreshAddList();
-
- d = new GridData();
- d.grabExcessHorizontalSpace = true;
- d.horizontalAlignment = SWT.FILL;
- d.grabExcessVerticalSpace = true;
- d.verticalAlignment = SWT.FILL;
-
- logicCanvas = new EditorCanvas(shell, SWT.TRAIL, editor);
- logicCanvas.setLayoutData(d);
-
-
- new EditorUserInput(editor, this);
- ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(logicCanvas);
- userInput.buttonDrag = 3;
- userInput.buttonZoom = 2;
- userInput.enableUserInput();
- new ZoomableCanvasOverlay(logicCanvas, null).enableScale();
- }
-
- public void refreshAddList()
- {
- addList.setItems(IndirectGUIComponentCreator.getStandardComponentIDs().toArray(String[]::new));
- addList.select(0);
- }
-
- public String getAddListSelected()
- {
- String[] selection = addList.getSelection();
- if(selection.length == 0)
- throw new IllegalStateException("Selection in the Add Component List may never be empty!");
- return selection[0];
- }
-
- public void open()
- {
- shell.open();
- while (!shell.isDisposed())
- if (!display.readAndDispatch())
- display.sleep();
- }
-
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-
-public class EditorUserInput
-{
- public EditorUserInput(Editor editor, EditorGUI gui)
- {
- gui.logicCanvas.addMouseListener(new MouseListener()
- {
- @Override
- public void mouseDoubleClick(MouseEvent e)
- {
- // TODO Auto-generated method stub
- }
-
- @Override
- public void mouseDown(MouseEvent e)
- {
- Point clicked = editor.gui.logicCanvas.displayToWorldCoords(e.x, e.y);
- switch (e.button)
- {
- case 1:
- editor.handleManager.click(clicked, e.stateMask);
- break;
- }
-
- }
-
- @Override
- public void mouseUp(MouseEvent e) {}
- });
-
- gui.logicCanvas.addMouseMoveListener((e) ->
- {
- Point dest = editor.gui.logicCanvas.displayToWorldCoords(e.x, e.y);
- editor.stateManager.mouseMoved(dest.x, dest.y);
- });
-
- gui.logicCanvas.addKeyListener(new KeyListener()
- {
-
- @Override
- public void keyReleased(KeyEvent e)
- {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void keyPressed(KeyEvent e)
- {
- switch (e.keyCode)
- {
- case 'c':
- if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
- editor.stateManager.copy();
- break;
- case 'v':
- if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
- editor.stateManager.paste();
- break;
- case 'd':
- if ((e.stateMask & SWT.SHIFT) == SWT.SHIFT)
- editor.stateManager.duplicate();
- break;
- case 'g':
- editor.stateManager.grab();
- break;
- case 'r':
- editor.stateManager.delete();
- break;
- case 's':
- if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
- editor.save();
- break;
- case 'a':
- if ((e.stateMask & SWT.SHIFT) == SWT.SHIFT)
- editor.stateManager.add();
- break;
- case 'h':
- editor.stateManager.boxSelect();
- break;
- }
-
- }
- });
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.editor;
-
-import java.io.IOException;
-
-import net.mograsim.logic.ui.editor.DialogManager.InteractiveDialog;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-import net.mograsim.logic.ui.serializing.SubmodelComponentDeserializer;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-public class SaveLoadManager
-{
- private String savePath = null;
- private Editor editor;
-
- public SaveLoadManager(Editor editor)
- {
- this.editor = editor;
- }
-
- public void save()
- {
- if (savePath == null)
- openSaveAsDialog();
- else
- innerSave();
- }
-
- public void openSaveAsDialog()
- {
- InteractiveDialog d = new InteractiveDialog("Save as...", "Save", "Cancel", "Path");
- d.open();
-
- if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(d.getState()))
- {
- savePath = d.getText();
- innerSave();
- }
- }
-
- private void innerSave()
- {
- try
- {
- JsonHandler.writeJson(editor.toBeEdited.calculateParams(c ->
- {
- if (Editor.identifierPerComponent.containsKey(c))
- return Editor.identifierPerComponent.get(c);
- return "class:" + c.getClass().getCanonicalName();
- }), savePath);
- } catch (IOException e)
- {
- savePath = null;
- System.err.println("Failed to save component!");
- e.printStackTrace();
- }
- }
-
- public static void openLoadDialog()
- {
- InteractiveDialog load = new InteractiveDialog("Load Component...", "Load", "Cancel", "Path");
- load.open();
- if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(load.getState()))
- {
- new Editor((DeserializedSubmodelComponent) SubmodelComponentDeserializer
- .create(new ViewModelModifiable(), load.getText()));
- }
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.DoubleBinaryOperator;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.editor.handles.Handle;
-
-public class Selection implements Iterable<Handle>
-{
- private Set<Handle> selection = new HashSet<>();
-
- public Map<Handle, Point> calculateOffsets()
- {
- Map<Handle, Point> offsets = new HashMap<>();
- Point ref = getTopLeft();
- selection.forEach(h -> offsets.put(h, new Point(h.getPosX() - ref.x, h.getPosY() - ref.y)));
- return offsets;
- }
-
- public Rectangle getBounds()
- {
- Point pos1 = getTopLeft();
- Point pos2 = getBottomRight();
- return new Rectangle(pos1.x, pos1.y, pos2.x - pos1.x, pos2.y - pos1.y);
- }
-
- public double getWidth()
- {// TODO: Compute this more efficiently
- return getTopRight().x - getTopLeft().x;
- }
-
- public double getHeight()
- {
- return getBottomLeft().y - getTopLeft().y;
- }
-
- public Point getTopLeft()
- {
- return getCorner(Double.MAX_VALUE, Double::min, r -> 0, Double.MAX_VALUE, Double::min, r -> 0);
- }
-
- public Point getTopRight()
- {
- return getCorner(-Double.MAX_VALUE, Double::max, r -> r.width, Double.MAX_VALUE, Double::min, r -> 0);
- }
-
- public Point getBottomLeft()
- {
- return getCorner(Double.MAX_VALUE, Double::min, r -> 0, -Double.MAX_VALUE, Double::max, r -> r.height);
- }
-
- public Point getBottomRight()
- {
- return getCorner(-Double.MAX_VALUE, Double::max, r -> r.width, -Double.MAX_VALUE, Double::max, r -> r.height);
- }
-
- public Point getCorner(double xIdentity, DoubleBinaryOperator xOp, Offset xOffset, double yIdentity,
- DoubleBinaryOperator yOp, Offset yOffset)
- {
- double x = xIdentity, y = yIdentity;
- for (Handle c : selection)
- {
- Rectangle bounds = c.getBounds();
- x = xOp.applyAsDouble(x, bounds.x + xOffset.computeOffset(bounds));
- y = yOp.applyAsDouble(y, bounds.y + yOffset.computeOffset(bounds));
- }
- return new Point(x, y);
- }
-
- private static interface Offset
- {
- public double computeOffset(Rectangle bounds);
- }
-
- public void add(Handle h)
- {
- selection.add(h);
- h.onSelect();
- }
-
- public void remove(Handle h)
- {
- selection.remove(h);
- h.onDeselect();
- }
-
- public void clear()
- {
- selection.forEach(h -> h.onDeselect());
- selection.clear();
- }
-
- public int size()
- {
- return selection.size();
- }
-
- public boolean contains(Handle h)
- {
- return selection.contains(h);
- }
-
- public void addAll(Collection<Handle> handles)
- {
- handles.forEach(h -> h.onSelect());
- selection.addAll(handles);
- }
-
- @Override
- public Iterator<Handle> iterator()
- {
- return selection.iterator();
- }
-
- @Override
- public String toString()
- {
- return selection.toString();
- }
-
- public boolean isEmpty()
- {
- return selection.isEmpty();
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.handles;
-
-import java.util.Optional;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.Editor.ComponentInfo;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-
-public class ComponentHandle extends Handle
-{
- public final GUIComponent parent;
- private final static double POS_OFFSET = 2.0d;
- private final static double LENGTH_OFFSET = POS_OFFSET * 2;
- boolean selected = false;
-
- public ComponentHandle(GUIComponent parent)
- {
- this.parent = parent;
- Rectangle bounds = parent.getBounds();
- setSize(bounds.width, bounds.height);
- parent.addComponentResizedListener((c) ->
- {
- Rectangle pBounds = c.getBounds();
- setSize(pBounds.width, pBounds.height);
- });
- moveTo(parent.getPosX(), parent.getPosY());
- }
-
- @Override
- protected void moveTo(double x, double y)
- {
- super.moveTo(x, y);
- parent.moveTo(x, y);
- }
-
- @Override
- protected void render(GeneralGC gc)
- {
- if (selected)
- {
- gc.setLineWidth(2);
- gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
- Rectangle bounds = getBounds();
- bounds.x -= POS_OFFSET;
- bounds.y -= POS_OFFSET;
- bounds.width += LENGTH_OFFSET;
- bounds.height += LENGTH_OFFSET;
- gc.drawRectangle(bounds);
- }
- }
-
- @Override
- public void reqMove(double x, double y)
- {
- moveTo(x, y);
- }
-
- @Override
- public void onSelect()
- {
- selected = true;
- callRedrawListeners();
- }
-
- @Override
- public void onDeselect()
- {
- selected = false;
- callRedrawListeners();
- }
-
- @Override
- public void reqDelete()
- {
- parent.destroy();
- }
-
- @Override
- public Optional<ComponentInfo> reqCopy(Point refPoint)
- {
- return Optional.of(new ComponentInfo(parent.getPosX() - refPoint.x, parent.getPosY() - refPoint.y,
- Editor.getIdentifier(parent), parent.getParams()));
- }
-
- @Override
- public HandleType getType()
- {
- return HandleType.COMPONENT;
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.editor.handles;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-
-public class CornerHandle extends Handle
-{
- private final static int LENGTH = 5;
- private final DeserializedSubmodelComponent toBeEdited;
- private boolean selected;
-
- public CornerHandle(DeserializedSubmodelComponent toBeEdited)
- {
- super();
- this.toBeEdited = toBeEdited;
- setSize(LENGTH, LENGTH);
- initPos();
- }
-
- @Override
- protected void render(GeneralGC gc)
- {
- gc.setBackground(Display.getCurrent().getSystemColor(selected ? SWT.COLOR_YELLOW : SWT.COLOR_DARK_GREEN));
- gc.fillRectangle(getPosX(), getPosY(), LENGTH, LENGTH);
- }
-
- private void initPos()
- {
- Rectangle bounds = toBeEdited.getBounds();
- double subScale = toBeEdited.getSubmodelScale();
- moveTo(bounds.width / subScale, bounds.height / subScale);
- }
-
- @Override
- public void reqMove(double x, double y)
- {
- moveTo(x, y);
- }
-
- @Override
- public void onSelect()
- {
- selected = true;
- callRedrawListeners();
- }
-
- @Override
- public void onDeselect()
- {
- selected = false;
- callRedrawListeners();
- }
-
- @Override
- protected void moveTo(double x, double y)
- {
- super.moveTo(x, y);
- double subScale = toBeEdited.getSubmodelScale();
- toBeEdited.setSize(x * subScale, y * subScale);
- }
-
- @Override
- public HandleType getType()
- {
- return HandleType.CORNER;
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.editor.handles;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Optional;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.editor.Editor.ComponentInfo;
-import net.mograsim.logic.ui.editor.states.EditorState;
-
-public abstract class Handle
-{
- private final Rectangle bounds;
- private final Collection<Runnable> redrawListeners, destroyListeners;
-
- public Handle()
- {
- redrawListeners = new ArrayList<>();
- destroyListeners = new ArrayList<>();
- bounds = new Rectangle(0, 0, 0, 0);
- callRedrawListeners();
- }
-
- final public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- if (bounds.intersects(visibleRegion))
- render(gc);
- }
-
- protected abstract void render(GeneralGC gc);
-
- protected void setSize(double width, double height)
- {
- bounds.width = width;
- bounds.height = height;
- callRedrawListeners();
- }
-
- protected void moveTo(double x, double y)
- {
- bounds.x = x;
- bounds.y = y;
- callRedrawListeners();
- }
-
- public Rectangle getBounds()
- {
- return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
- }
-
- public void addRedrawListener(Runnable listener)
- {
- redrawListeners.add(listener);
- }
-
- public void removeRedrawListener(Runnable listener)
- {
- redrawListeners.remove(listener);
- }
-
- protected void callRedrawListeners()
- {
- redrawListeners.forEach(l -> l.run());
- }
-
- public double getPosX()
- {
- return bounds.x;
- }
-
- public double getPosY()
- {
- return bounds.y;
- }
-
- void destroy()
- {
- destroyListeners.forEach(l -> l.run());
- }
-
- public void addDestroyListener(Runnable listener)
- {
- redrawListeners.add(listener);
- }
-
- public void removeDestroyListener(Runnable listener)
- {
- redrawListeners.remove(listener);
- }
-
- public boolean contains(double x, double y)
- {
- return bounds.contains(x, y);
- }
-
- public boolean contains(Point p)
- {
- return contains(p.x, p.y);
- }
-
- /**
- * Register a mouse click
- * @param x Coordinate of the click in the world, not the display context
- * @param y Coordinate of the click in the world, not the display context
- * @return true if the click was consumed, false otherwise
- */
- public boolean click(double x, double y, int stateMask, EditorState state)
- {
- if(contains(x, y))
- return state.clickedHandle(new HandleClickInfo(this, stateMask));
- return false;
- }
-
- //@formatter:off
- public void reqMove(double x, double y) {}
- public void reqDelete() {}
- public Optional<ComponentInfo> reqCopy(Point refPoint) { return Optional.empty(); }
- public void onSelect() {}
- public void onDeselect() {}
- //@formatter:on
-
- public abstract HandleType getType();
-
- public static enum HandleType
- {
- COMPONENT, STATIC_PIN, INTERFACE_PIN, WIRE_POINT, WIRE, CORNER;
- }
-
- public static class HandleClickInfo
- {
- public final int stateMask;
- public final Handle clicked;
-
- HandleClickInfo(Handle clicked, int stateMask)
- {
- this.clicked = clicked;
- this.stateMask = stateMask;
- }
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.handles;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Consumer;
-import java.util.stream.Collectors;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.states.EditorState;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-
-public class HandleManager
-{
- private final Map<Pin, StaticPinHandle> handlePerPin;
- private final Map<Pin, InterfacePinHandle> handlePerInterfacePin;
- private final Map<GUIWire, List<WirePointHandle>> pointHandlesPerWire;
- private final Map<GUIWire, WireHandle> handlePerWire;
- private final Set<Handle> handles;
- private final Set<WirePointHandle> wirePointHandles;
- private final Map<GUIComponent, ComponentHandle> handlePerComp;
-
- private final Collection<Consumer<Handle>> handleAddedListeners;
- private final Collection<Consumer<Handle>> handleRemovedListeners;
- private final Editor editor;
- private boolean initialized = false;
-
- private CornerHandle cornerHandle;
-
- public HandleManager(Editor editor)
- {
- this.editor = editor;
- handlePerPin = new HashMap<>();
- handlePerInterfacePin = new HashMap<>();
- pointHandlesPerWire = new HashMap<>();
- handlePerComp = new HashMap<>();
- handles = new HashSet<>();
- wirePointHandles = new HashSet<>();
- handlePerWire = new HashMap<>();
-
- handleAddedListeners = new ArrayList<>();
- handleRemovedListeners = new ArrayList<>();
-
- ViewModelModifiable model = editor.getSubmodel();
-
- model.addComponentAddedListener(c -> registerComponent(c));
-
- model.addComponentRemovedListener(c ->
- {
- removeComponentHandle(c);
- });
-
- model.addWireAddedListener(w ->
- {
- registerWire(w);
- });
-
- model.addWireRemovedListener(w ->
- {
- removeWireHandle(w);
- removeWirePointHandles(w);
- });
- }
-
- ////////////////////////////////////////
- // -- Setting up initial handles -- ///
- //////////////////////////////////////
-
- public void init()
- {
- if (initialized)
- System.err.println("Warning! HandleManager was already initialized.");
- else
- {
- ViewModelModifiable model = editor.getSubmodel();
-
- Iterator<GUIComponent> cIt = model.getComponents().iterator();
- // First GUIComponent is the Submodel Interface
- registerInterfaceComponent(cIt.next());
- cIt.forEachRemaining(c -> registerComponent(c));
- model.getWires().forEach(w -> registerWire(w));
- addHandle(cornerHandle = new CornerHandle(editor.toBeEdited));
- }
- }
-
- private void registerInterfaceComponent(GUIComponent c)
- {
- c.getPins().values().forEach(p -> addInterfacePinHandle(p));
- c.addPinAddedListener(p -> addInterfacePinHandle(p));
- c.addPinRemovedListener(p -> removeInterfacePinHandle(p));
- }
-
- private void registerComponent(GUIComponent c)
- {
- addComponentHandle(c);
-
- c.getPins().values().forEach(p -> addPinHandle(p));
-
- c.addPinAddedListener(p -> addPinHandle(p));
- c.addPinRemovedListener(p -> removePinHandle(p));
- }
-
- private void registerWire(GUIWire wire)
- {
- wire.addPathChangedListener((w, diff) ->
- {
- if(diff != 0)
- {
- if(diff > 0)
- {
- for(int i = 0; i < diff; i++)
- addWirePointHandle(w);
- }
- else
- {
- for(int i = 0; i > diff; i--)
- {
- removeLastWirePointHandle(wire);
- }
- }
-
- List<WirePointHandle> wpHandles = pointHandlesPerWire.get(w);
- int size = wpHandles.size();
- for(int i = 0; i < size; i++)
- {
- wpHandles.get(i).setIndex(i);
- }
- }
- pointHandlesPerWire.get(w).forEach(h -> h.updatePos());
- });
- addWireHandle(wire);
- if (wire.getPath() == null)
- return;
- for (int i = 0; i < wire.getPath().length; i++)
- {
- addWirePointHandle(wire);
- }
- }
-
- /////////////////////////////////////
- // -- Adding/Removing handles -- ///
- ///////////////////////////////////
-
- private void addComponentHandle(GUIComponent c)
- {
- ComponentHandle h = new ComponentHandle(c);
- handlePerComp.put(c, h);
- addHandle(h);
- }
-
- private void removeComponentHandle(GUIComponent c)
- {
- ComponentHandle h = handlePerComp.get(c);
- handlePerComp.remove(c);
- removeHandle(h);
- }
-
- private void addPinHandle(Pin owner)
- {
- StaticPinHandle h = new StaticPinHandle(owner);
- handlePerPin.put(owner, h);
- addHandle(h);
- }
-
- private void removePinHandle(Pin owner)
- {
- StaticPinHandle h = handlePerPin.get(owner);
- handlePerPin.remove(owner);
- removeHandle(h);
- }
-
- private void addInterfacePinHandle(Pin p)
- {
- //The following is not an alternative to the cast, because the new pin is not yet in the map, when the listener is called
- //editor.toBeEdited.getSubmodelMovablePins().get(p.name);
- MovablePin pM = (MovablePin) p;
- InterfacePinHandle h = new InterfacePinHandle(pM, editor.toBeEdited);
- handlePerInterfacePin.put(pM, h);
- addHandle(h);
- }
-
- private void removeInterfacePinHandle(Pin p)
- {
- InterfacePinHandle h = handlePerInterfacePin.get(p);
- handlePerInterfacePin.remove(p);
- removeHandle(h);
- }
-
- private void addWirePointHandle(GUIWire w)
- {
- List<WirePointHandle> wireHandles = pointHandlesPerWire.get(w);
- WirePointHandle h;
- if (wireHandles != null)
- wireHandles.add(h = new WirePointHandle(w, wireHandles.size()));
- else
- {
- wireHandles = new ArrayList<>();
- h = new WirePointHandle(w, 0);
- wireHandles.add(h);
- pointHandlesPerWire.put(h.parent, wireHandles);
- }
- this.wirePointHandles.add(h);
- addHandle(h);
- }
-
- private void removeLastWirePointHandle(GUIWire owner)
- {
- Handle h = pointHandlesPerWire.get(owner).remove(0);
- wirePointHandles.remove(h);
- removeHandle(h);
- }
-
- private void removeWirePointHandles(GUIWire owner)
- {
- if(!pointHandlesPerWire.containsKey(owner))
- return;
- pointHandlesPerWire.get(owner).forEach(h ->
- {
- wirePointHandles.remove(h);
- removeHandle(h);
- });
- pointHandlesPerWire.remove(owner);
- }
-
- private void addWireHandle(GUIWire w)
- {
- WireHandle h = new WireHandle(w);
- handlePerWire.put(w, h);
- addHandle(h);
- }
-
- private void removeWireHandle(GUIWire w)
- {
- WireHandle h = handlePerWire.get(w);
- handlePerWire.remove(w);
- removeHandle(h);
- }
-
- private void addHandle(Handle h)
- {
- handles.add(h);
- callHandleAddedListeners(h);
- }
-
- private void removeHandle(Handle h)
- {
- handles.remove(h);
- callHandleRemovedListeners(h);
- h.destroy();
- }
-
- public StaticPinHandle getHandle(Pin parent)
- {
- return handlePerPin.get(parent);
- }
-
- public ComponentHandle getHandle(GUIComponent parent)
- {
- return handlePerComp.get(parent);
- }
-
- public WireHandle getHandle(GUIWire parent)
- {
- return handlePerWire.get(parent);
- }
-
- public Handle getInterfacePinHandle(Pin p)
- {
- return handlePerInterfacePin.get(p);
- }
-
- /**
- * @return A Collection of the registered {@link WirePointHandle}s of the specified wire
- */
- public Collection<WirePointHandle> getWirePointHandles(GUIWire parent)
- {
- return pointHandlesPerWire.get(parent).stream().collect(Collectors.toSet());
- }
-
- /**
- * @return An unmodifiable view of all registered {@link Handle}s
- */
- public Collection<Handle> getHandles()
- {
- return Collections.unmodifiableCollection(handles);
- }
-
- /**
- * @return An unmodifiable view of all registered {@link StaticPinHandle}s
- */
- public Collection<StaticPinHandle> getPinHandles()
- {
- return Collections.unmodifiableCollection(handlePerPin.values());
- }
-
- /**
- * @return An unmodifiable view of all registered {@link InterfacePinHandle}s
- */
- public Collection<InterfacePinHandle> getInterfacePinHandles()
- {
- return Collections.unmodifiableCollection(handlePerInterfacePin.values());
- }
-
- /**
- * @return An unmodifiable view of all registered {@link ComponentHandle}s
- */
- public Collection<ComponentHandle> getComponentHandles()
- {
- return Collections.unmodifiableCollection(handlePerComp.values());
- }
-
- /**
- * @return An unmodifiable view of all registered {@link WireHandle}s
- */
- public Collection<WireHandle> getWireHandles()
- {
- return Collections.unmodifiableCollection(handlePerWire.values());
- }
-
- /**
- * @return An unmodifiable view of all registered {@link WirePointHandle}s
- */
- public Collection<WirePointHandle> getWirePointHandles()
- {
- return Collections.unmodifiableSet(wirePointHandles);
- }
-
- public void click(Point clicked, int stateMask)
- {
- EditorState entryState = editor.stateManager.getState();
-
- if (!cornerHandle.click(clicked.x, clicked.y, stateMask, entryState))
- if (!click(handlePerPin.values(), clicked, entryState, stateMask))
- if (!click(handlePerInterfacePin.values(), clicked, entryState, stateMask))
- if (!click(getWirePointHandles(), clicked, entryState, stateMask))
- if (!click(handlePerComp.values(), clicked, entryState, stateMask))
- if (!click(getWireHandles(), clicked, entryState, stateMask))
- entryState.clickedEmpty(clicked, stateMask);
- entryState.clicked(clicked, stateMask);
- }
-
- private boolean click(Collection<? extends Handle> handles, Point clicked, EditorState state, int stateMask)
- {
- for (Handle h : handles)
- if (h.click(clicked.x, clicked.y, stateMask, state))
- return true;
- return false;
- }
-
- public void addHandleAddedListener(Consumer<Handle> c)
- {
- handleAddedListeners.add(c);
- }
-
- private void callHandleAddedListeners(Handle added)
- {
- handleAddedListeners.forEach(l -> l.accept(added));
- }
-
- public void removeHandleAddedListener(Consumer<Handle> c)
- {
- handleAddedListeners.remove(c);
- }
-
- public void addHandleRemovedListener(Consumer<Handle> c)
- {
- handleRemovedListeners.add(c);
- }
-
- private void callHandleRemovedListeners(Handle removed)
- {
- handleRemovedListeners.forEach(l -> l.accept(removed));
- }
-
- public void removeHandleRemovedListener(Consumer<Handle> c)
- {
- handleRemovedListeners.remove(c);
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.handles;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent;
-
-public class InterfacePinHandle extends PinHandle
-{
- private final static int CIRCLE_DIAM = 4, CIRCLE_RADIUS = CIRCLE_DIAM / 2, SELECTED_CIRCLE_OFFSET = 1,
- SELECTED_CIRCLE_DIAM = SELECTED_CIRCLE_OFFSET * 2 + CIRCLE_DIAM;
- private final MovablePin parent;
- private final DeserializedSubmodelComponent owner;
- private boolean selected = false;
-
- public InterfacePinHandle(MovablePin parent, DeserializedSubmodelComponent pinOwner)
- {
- super();
- this.parent = parent;
- this.owner = pinOwner;
- setSize(CIRCLE_DIAM, CIRCLE_DIAM);
- initPos();
- }
-
- private void initPos()
- {
- Point pos = parent.getPos();
- moveTo(pos.x - CIRCLE_RADIUS, pos.y - CIRCLE_RADIUS);
- }
-
- @Override
- protected void render(GeneralGC gc)
- {
- double x = getPosX(), y = getPosY();
-
- gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
- gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
- gc.drawText(parent.name, x + CIRCLE_DIAM, y + CIRCLE_DIAM, true);
- if (selected)
- {
- gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
- gc.drawOval(x - SELECTED_CIRCLE_OFFSET, y - SELECTED_CIRCLE_OFFSET, SELECTED_CIRCLE_DIAM,
- SELECTED_CIRCLE_DIAM);
- }
- gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
- gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM);
- }
-
- @Override
- public void reqMove(double x, double y)
- {
- moveTo(x, y);
- }
-
- @Override
- public void onSelect()
- {
- selected = true;
- callRedrawListeners();
- }
-
- @Override
- public void onDeselect()
- {
- selected = false;
- callRedrawListeners();
- }
-
- @Override
- public void reqDelete()
- {
- owner.removeSubmodelInterface(parent.name);
- }
-
- @Override
- protected void moveTo(double x, double y)
- {
- super.moveTo(x, y);
- parent.setRelPos(getCenterX(), getCenterY());
- }
-
- @Override
- public double getCenterX()
- {
- return getPosX() + CIRCLE_RADIUS;
- }
-
- @Override
- public double getCenterY()
- {
- return getPosY() + CIRCLE_RADIUS;
- }
-
- @Override
- public HandleType getType()
- {
- return HandleType.INTERFACE_PIN;
- }
-
- @Override
- public Pin getPin()
- {
- return parent;
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.editor.handles;
-
-import net.mograsim.logic.ui.model.wires.Pin;
-
-public abstract class PinHandle extends Handle
-{
- public PinHandle()
- {
- super();
- }
-
- public abstract Pin getPin();
- public abstract double getCenterX();
- public abstract double getCenterY();
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.handles;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.wires.Pin;
-
-public class StaticPinHandle extends PinHandle
-{
- private final static int CIRCLE_DIAM = 2;
- private final static int CIRCLE_RADIUS = 1;
- private final Pin parent;
-
- public StaticPinHandle(Pin parent)
- {
- super();
- this.parent = parent;
- setSize(CIRCLE_DIAM, CIRCLE_DIAM);
- parent.addPinMovedListener((p) -> updatePos());
- updatePos();
- }
-
- @Override
- protected void render(GeneralGC gc)
- {
- gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN));
- gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM);
- }
-
- private void updatePos()
- {
- Point pos = parent.getPos();
- moveTo(pos.x - CIRCLE_RADIUS, pos.y - CIRCLE_RADIUS);
- }
-
- @Override
- public double getCenterX()
- {
- return getPosX() + CIRCLE_RADIUS;
- }
-
- @Override
- public double getCenterY()
- {
- return getPosY() + CIRCLE_RADIUS;
- }
-
- @Override
- public HandleType getType()
- {
- return HandleType.STATIC_PIN;
- }
-
- @Override
- public Pin getPin()
- {
- return parent;
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.editor.handles;
-
-import java.util.Optional;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.editor.states.EditorState;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.GUIWire.PathChangedListener;
-
-public class WireHandle extends Handle implements PathChangedListener
-{
- private boolean selected = false;
- private final static double WIDTH = 2.0;
- private final static double WIDTH_SQUARED = WIDTH * WIDTH;
- public final GUIWire parent;
-
- public WireHandle(GUIWire parent)
- {
- this.parent = parent;
- parent.addPathChangedListener(this);
- updateBounds();
- }
-
- @Override
- void destroy()
- {
- super.destroy();
- parent.removePathChangedListener(this);
- }
-
- public void updateBounds()
- {
- Rectangle r = parent.getBounds();
- moveTo(r.x, r.y);
- setSize(r.width, r.height);
- }
-
- @Override
- public void render(GeneralGC gc)
- {
- if(selected)
- {
- gc.setLineWidth(WIDTH);
- gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_YELLOW));
- gc.drawPolyline(parent.getEffectivePath());
- }
- }
-
- @Override
- public void onSelect()
- {
- selected = true;
- callRedrawListeners();
- }
-
- @Override
- public void onDeselect()
- {
- selected = false;
- callRedrawListeners();
- }
-
- @Override
- public void reqDelete()
- {
- parent.destroy();
- }
-
- @Override
- public boolean contains(double x, double y)
- {
- return click(parent, x, y).isPresent();
- }
-
- @Override
- public boolean click(double x, double y, int stateMask, EditorState state)
- {
- Optional<WireClickData> op = click(parent, x, y);
- if(op.isEmpty())
- return false;
- WireClickData data = op.get();
- return state.clickedHandle(new WireHandleClickInfo(this, data.segment, data.pos, stateMask));
- }
-
- public static class WireHandleClickInfo extends HandleClickInfo
- {
- public final int segment;
- public final Point posOnWire;
- WireHandleClickInfo(WireHandle clicked, int segment, Point posOnWire, int stateMask)
- {
- super(clicked, stateMask);
- this.segment = segment;
- this.posOnWire = posOnWire;
- }
-
- }
-
- private static Optional<WireClickData> click(GUIWire w, double x, double y)
- {
- Rectangle modifiedBounds = w.getBounds();
- modifiedBounds.x -= WIDTH;
- modifiedBounds.y -= WIDTH;
- modifiedBounds.width += WIDTH * 2;
- modifiedBounds.height += WIDTH * 2;
- if (modifiedBounds.contains(x, y))
- {
- double[] effectivePath = w.getEffectivePath();
- for (int i = 3; i < effectivePath.length; i += 2)
- {
- double a1 = effectivePath[i - 3], a2 = effectivePath[i - 2], b1 = effectivePath[i - 1],
- b2 = effectivePath[i], r1 = b2 - a2, r2 = a1 - b1;
-
- double f = ((x - a1) * r2 + (a2 - y) * r1) / (-r2 * r2 - r1 * r1);
- if (f >= 0 && f <= 1)
- {
- double e1 = a1 + f * (b1 - a1), e2 = a2 + f * (b2 - a2);
- r1 = e1 - x;
- r2 = e2 - y;
- if (r1 * r1 + r2 * r2 <= WIDTH_SQUARED)
- return Optional.of(new WireClickData(new Point(e1, e2), (i / 2) - 1));
- }
- }
- }
- return Optional.empty();
- }
-
- private final static class WireClickData
- {
- WireClickData(Point pos, int segment)
- {
- this.pos = pos;
- this.segment = segment;
- }
-
- /**
- * Position on the wire that is closest to the click
- */
- public final Point pos;
- /**
- * Segment of the wire that the {@link Point} pos is on
- */
- public final int segment;
- }
-
- @Override
- public HandleType getType()
- {
- return HandleType.WIRE;
- }
-
- @Override
- public void pathChanged(GUIWire wire, int diff)
- {
- updateBounds();
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.handles;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-
-public class WirePointHandle extends Handle
-{
- private final static int END_OFFSET = 4;
- private boolean selected = false;
- public final GUIWire parent;
-
- private int pointIndex;
-
- public WirePointHandle(GUIWire parent, int pointIndex)
- {
- super();
- this.parent = parent;
- this.pointIndex = pointIndex;
- setSize(END_OFFSET, END_OFFSET);
- Point pathPoint = parent.getPathPoint(pointIndex);
- moveTo(pathPoint.x, pathPoint.y);
- }
-
- void updatePos()
- {
- Point p = parent.getPathPoint(pointIndex);
- moveTo(p.x, p.y);
- }
-
- @Override
- public void render(GeneralGC gc)
- {
- gc.setLineWidth(1.0);
- gc.setForeground(Display.getDefault().getSystemColor(selected ? SWT.COLOR_YELLOW : SWT.COLOR_BLUE));
- gc.drawLine(getPosX(), getPosY(), getPosX() + END_OFFSET, getPosY() + END_OFFSET);
- }
-
- @Override
- public void reqMove(double x, double y)
- {
- parent.setPathPoint(new Point(x, y), pointIndex);
- }
-
- @Override
- public void onSelect()
- {
- selected = true;
- callRedrawListeners();
- }
-
- @Override
- public void onDeselect()
- {
- selected = false;
- callRedrawListeners();
- }
-
- @Override
- public void reqDelete()
- {
- parent.removePathPoint(pointIndex);
- }
-
- @Override
- public HandleType getType()
- {
- return HandleType.WIRE_POINT;
- }
-
- /**
- * Sets the index of the {@link Point} within the parent {@link Wire}s path that is controlled by this handle
- * @param index Index of the Point in the Wires path.
- * @throws IndexOutOfBoundsException
- */
- public void setIndex(int index)
- {
- this.pointIndex = index;
- updatePos();
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.states;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.Selection;
-import net.mograsim.logic.ui.editor.handles.Handle;
-
-public class BoxSelectionState extends EditorState
-{
- private Point origin;
- private double mX, mY;
-
- private final ZoomedRenderer boxRenderer = gc ->
- {
- if (origin != null)
- {
- gc.setLineWidth(0.5);
- gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW));
- gc.drawRectangle(origin.x, origin.y, mX - origin.x, mY - origin.y);
- }
- };
-
- public BoxSelectionState(Editor editor, StateManager manager)
- {
- super(editor, manager);
- }
-
- @Override
- public void onEntry()
- {
- editor.gui.logicCanvas.addZoomedRenderer(boxRenderer);
- editor.gui.logicCanvas.redrawThreadsafe();
- }
-
- @Override
- public void onExit()
- {
- editor.gui.logicCanvas.removeZoomedRenderer(boxRenderer);
- editor.gui.logicCanvas.redrawThreadsafe();
- }
-
- @Override
- public void boxSelect()
- {
- manager.setState(new SelectionState(editor, manager));
- }
-
- @Override
- public void clicked(Point clicked, int stateMask)
- {
- if (origin == null)
- {
- origin = new Point(clicked.x, clicked.y);
- mX = clicked.x;
- mY = clicked.y;
- } else
- {
- Selection s = editor.getSelection();
- s.clear();
- boolean leftToRight = mX > origin.x, topToBottom = mY > origin.y;
- double x = leftToRight ? origin.x : mX, y = topToBottom ? origin.y : mY,
- width = leftToRight ? mX - origin.x : origin.x - mX,
- height = topToBottom ? mY - origin.y : origin.y - mY;
-
- Rectangle selected = new Rectangle(x, y, width, height);
- for (Handle h : editor.handleManager.getHandles())
- {
- Rectangle hBounds = h.getBounds();
- if (selected.contains(hBounds.x, hBounds.y)
- && selected.contains(hBounds.x + hBounds.width, hBounds.y + hBounds.height))
- {
- s.add(h);
- }
- }
- manager.setState(new SelectionState(editor, manager));
- }
- }
-
- @Override
- public void mouseMoved(double x, double y)
- {
- mX = x;
- mY = y;
- editor.gui.logicCanvas.redrawThreadsafe();
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.states;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.handles.PinHandle;
-import net.mograsim.logic.ui.editor.handles.Handle.HandleClickInfo;
-
-public class CreateWireState extends EditorState
-{
- private final PinHandle origin;
- private double mX, mY;
- private ZoomedRenderer drawLine;
-
- public CreateWireState(Editor session, StateManager manager, PinHandle origin)
- {
- super(session, manager);
- this.origin = origin;
- mX = origin.getCenterX();
- mY = origin.getCenterY();
- }
-
- @Override
- public void mouseMoved(double x, double y)
- {
- this.mX = x;
- this.mY = y;
- editor.gui.logicCanvas.redraw();
- }
-
- @Override
- public void onEntry()
- {
- editor.getSelection().clear();
- drawLine = gc ->
- {
- gc.setLineWidth(1);
- gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
- gc.drawLine((int) origin.getCenterX(), (int) origin.getCenterY(), (int) mX, (int) mY);
- };
- editor.gui.logicCanvas.addZoomedRenderer(drawLine);
- editor.gui.logicCanvas.redraw();
- }
-
- @Override
- public void onExit()
- {
- editor.gui.logicCanvas.removeZoomedRenderer(drawLine);
- editor.gui.logicCanvas.redraw();
- }
-
- @Override
- public boolean clickedHandle(HandleClickInfo handleClickInfo)
- {
- switch (handleClickInfo.clicked.getType())
- {
- case INTERFACE_PIN:
- case STATIC_PIN:
- try
- {
- editor.addWire(origin, (PinHandle) handleClickInfo.clicked);
- }
- catch (IllegalArgumentException e)
- {
- Shell tmp = new Shell(Display.getCurrent());
- editor.dialogManager.openWarningDialog("Warning!", e.getMessage());
- tmp.dispose();
- }
- break;
- default:
- return false;
- }
- return true;
- }
-
- @Override
- public void clicked(Point clicked, int stateMask)
- {
- manager.setState(new SelectionState(editor, manager));
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.states;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.handles.Handle.HandleClickInfo;
-import net.mograsim.logic.ui.editor.handles.InterfacePinHandle;
-
-public abstract class EditorState
-{
- protected final Editor editor;
- protected final StateManager manager;
-
- public EditorState(Editor session, StateManager manager)
- {
- this.editor = session;
- this.manager = manager;
- }
-
- //@formatter:off
- public void add() {}
- public void delete() {}
- public void copy() {}
- public void paste() {}
- public void duplicate() {}
- public void grab() {}
- public void mouseMoved(double x, double y) {}
- public void select(Point pos, boolean additive) {}
- public void boxSelect() {}
- public void onEntry() {}
- public void onExit() {}
- public void clicked(InterfacePinHandle interfacePinHandle, int stateMask) {}
- public void clickedEmpty(Point clicked, int stateMask) {}
- public void clicked(Point clicked, int stateMask) {}
- public boolean clickedHandle(HandleClickInfo handleClickInfo) { return false; }
- //@formatter:on
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.states;
-
-import java.util.Map;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.handles.Handle;
-
-public class GrabState extends EditorState
-{
- private Map<Handle, Point> offsets;
-
- public GrabState(Editor editor, StateManager manager)
- {
- super(editor, manager);
- }
-
- @Override
- public void onEntry()
- {
- offsets = editor.getSelection().calculateOffsets();
- }
-
- @Override
- public void grab()
- {
- manager.setState(new SelectionState(editor, manager));
- }
-
- @Override
- public void mouseMoved(double x, double y)
- {
- editor.moveHandles(x, y, offsets);
- }
-
- @Override
- public void clicked(Point clicked, int stateMask)
- {
- manager.setState(new SelectionState(editor, manager));
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.states;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.Selection;
-import net.mograsim.logic.ui.editor.DialogManager.InteractiveDialog;
-import net.mograsim.logic.ui.editor.handles.Handle;
-import net.mograsim.logic.ui.editor.handles.Handle.HandleClickInfo;
-import net.mograsim.logic.ui.editor.handles.PinHandle;
-import net.mograsim.logic.ui.editor.handles.WireHandle;
-import net.mograsim.logic.ui.editor.handles.WireHandle.WireHandleClickInfo;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-
-public class SelectionState extends EditorState
-{
- private final ZoomedRenderer outlineRenderer = gc ->
- {
- if (editor.getSelection().size() > 1)
- {
- gc.setLineWidth(1);
- gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW));
- gc.drawRectangle(editor.getSelection().getBounds());
- }
- };
-
- public SelectionState(Editor editor, StateManager manager)
- {
- super(editor, manager);
- }
-
- @Override
- public void add()
- {
- Point curserPos = editor.getWorldMousePosition();
- editor.addComponent(curserPos.x, curserPos.y);
- }
-
- @Override
- public void delete()
- {
- editor.deleteSelection();
- }
-
- @Override
- public void copy()
- {
- editor.copy();
- }
-
- @Override
- public void paste()
- {
- Point curserPos = editor.getWorldMousePosition();
- editor.paste(curserPos.x, curserPos.y);
- }
-
- @Override
- public void duplicate()
- {
- editor.duplicate();
- }
-
- @Override
- public void grab()
- {
- if (!editor.getSelection().isEmpty())
- manager.setState(new GrabState(editor, manager));
- }
-
- @Override
- public void boxSelect()
- {
- manager.setState(new BoxSelectionState(editor, manager));
- }
-
- @Override
- public void onEntry()
- {
- editor.gui.logicCanvas.addZoomedRenderer(outlineRenderer);
- editor.gui.logicCanvas.redrawThreadsafe();
- }
-
- @Override
- public void onExit()
- {
- editor.gui.logicCanvas.removeZoomedRenderer(outlineRenderer);
- editor.gui.logicCanvas.redrawThreadsafe();
- }
-
- @Override
- public void clickedEmpty(Point clicked, int stateMask)
- {
- editor.getSelection().clear();
- if ((stateMask & SWT.ALT) == SWT.ALT)
- {
- InteractiveDialog pinAdd = new InteractiveDialog("Add Pin...", "Add", "Cancel", "Name", "Logic Width");
- pinAdd.open();
- if (pinAdd.getState().equals(InteractiveDialog.InteractiveDialogState.ACCEPTED))
- {
- try
- {
- Pin p = editor.toBeEdited.addSubmodelInterface(new MovablePin(editor.toBeEdited, pinAdd.getText(),
- Integer.parseInt(pinAdd.getText(1)), clicked.x, clicked.y));
- editor.handleManager.getInterfacePinHandle(p).reqMove(clicked.x, clicked.y);
- } catch (NumberFormatException e)
- {
- editor.dialogManager.openWarningDialog("Failed to create Pin!", "Bit width must be a number!");
- }
- }
- }
- }
-
- @Override
- public boolean clickedHandle(HandleClickInfo handleClickInfo)
- {
- switch (handleClickInfo.clicked.getType())
- {
- case INTERFACE_PIN:
- if ((handleClickInfo.stateMask & SWT.CTRL) == SWT.CTRL)
- {
- manager.setState(new CreateWireState(editor, manager, (PinHandle) handleClickInfo.clicked));
- break;
- }
- case CORNER:
- case COMPONENT:
- case WIRE_POINT:
- boolean additive = (handleClickInfo.stateMask & SWT.SHIFT) == SWT.SHIFT;
- select(handleClickInfo.clicked, additive);
- break;
- case STATIC_PIN:
- if ((handleClickInfo.stateMask & SWT.CTRL) == SWT.CTRL)
- manager.setState(new CreateWireState(editor, manager, (PinHandle) handleClickInfo.clicked));
- else
- return false;
- break;
- case WIRE:
- if ((handleClickInfo.stateMask & SWT.CTRL) == SWT.CTRL)
- {
- WireHandleClickInfo info = (WireHandleClickInfo) handleClickInfo;
- WireHandle clicked = (WireHandle) info.clicked;
- clicked.parent.insertPathPoint(info.posOnWire, info.segment);
- } else
- {
- additive = (handleClickInfo.stateMask & SWT.SHIFT) == SWT.SHIFT;
- select(handleClickInfo.clicked, additive);
- }
- break;
- default:
- return false;
- }
- return true;
- }
-
- private void select(Handle h, boolean additive)
- {
- Selection sel = editor.getSelection();
- if (sel.contains(h))
- if (additive)
- sel.remove(h);
- else
- {
- if (editor.getSelection().size() > 1)
- {
- sel.clear();
- sel.add(h);
- } else
- sel.clear();
- }
- else
- {
- if (!additive)
- sel.clear();
- sel.add(h);
- }
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.editor.states;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.editor.Editor;
-import net.mograsim.logic.ui.editor.handles.Handle.HandleClickInfo;
-
-public class StateManager
-{
- private EditorState state;
-
- public StateManager(Editor session)
- {
- state = new SelectionState(session, this);
- state.onEntry();
- }
-
- public EditorState getState()
- {
- return state;
- }
-
- public void setState(EditorState state)
- {
- this.state.onExit();
- this.state = state;
- state.onEntry();
- }
-
- public void add()
- {
- state.add();
- }
-
- public void delete()
- {
- state.delete();
- }
-
- public void copy()
- {
- state.copy();
- }
-
- public void paste()
- {
- state.paste();
- }
-
- public void duplicate()
- {
- state.duplicate();
- }
-
- public void grab()
- {
- state.grab();
- }
-
- public void mouseMoved(double x, double y)
- {
- state.mouseMoved(x, y);
- }
-
- public void select(Point pos, boolean additive)
- {
- state.select(pos, additive);
- }
-
- public boolean clickedHandle(HandleClickInfo handleClickInfo)
- {
- return state.clickedHandle(handleClickInfo);
- }
-
- public void boxSelect()
- {
- state.boxSelect();
- }
-}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
- <attributes>
- <attribute name="module" value="true"/>
- </attributes>
- </classpathentry>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>net.mograsim.logic.ui</name>
- <comment></comment>
- <projects>
- <project>net.mograsim.logic.core</project>
- <project>SWTZoomableCanvas</project>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
+++ /dev/null
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
-org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
-org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
-org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
-org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
-org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
-org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=11
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.APILeak=warning
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
-org.eclipse.jdt.core.compiler.problem.deadCode=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
-org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=info
-org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
-org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
-org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
-org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
-org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
-org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
-org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=info
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=info
-org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
-org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
-org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
-org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
-org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=info
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedImport=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
-org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
-org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=11
-org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
-org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
-org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
-org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
-org.eclipse.jdt.core.formatter.align_with_spaces=false
-org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
-org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
-org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
-org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
-org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
-org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
-org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
-org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
-org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
-org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
-org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
-org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
-org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
-org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
-org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
-org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
-org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
-org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
-org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
-org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_after_package=1
-org.eclipse.jdt.core.formatter.blank_lines_before_field=0
-org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
-org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
-org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
-org.eclipse.jdt.core.formatter.blank_lines_before_method=1
-org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
-org.eclipse.jdt.core.formatter.blank_lines_before_package=0
-org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
-org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
-org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
-org.eclipse.jdt.core.formatter.brace_position_for_block=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_switch=next_line
-org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=next_line
-org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
-org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
-org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
-org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=true
-org.eclipse.jdt.core.formatter.comment.format_block_comments=true
-org.eclipse.jdt.core.formatter.comment.format_header=false
-org.eclipse.jdt.core.formatter.comment.format_html=true
-org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
-org.eclipse.jdt.core.formatter.comment.format_line_comments=true
-org.eclipse.jdt.core.formatter.comment.format_source_code=true
-org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
-org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
-org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
-org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
-org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
-org.eclipse.jdt.core.formatter.comment.line_length=140
-org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
-org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
-org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
-org.eclipse.jdt.core.formatter.compact_else_if=true
-org.eclipse.jdt.core.formatter.continuation_indentation=2
-org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
-org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
-org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
-org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
-org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
-org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
-org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_empty_lines=false
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
-org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
-org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
-org.eclipse.jdt.core.formatter.indentation.size=4
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert
-org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
-org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
-org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
-org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
-org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
-org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
-org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
-org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
-org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
-org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
-org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
-org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
-org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
-org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
-org.eclipse.jdt.core.formatter.join_lines_in_comments=true
-org.eclipse.jdt.core.formatter.join_wrapped_lines=true
-org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
-org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
-org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
-org.eclipse.jdt.core.formatter.lineSplit=140
-org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
-org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
-org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
-org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
-org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
-org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
-org.eclipse.jdt.core.formatter.tabulation.char=tab
-org.eclipse.jdt.core.formatter.tabulation.size=4
-org.eclipse.jdt.core.formatter.use_on_off_tags=true
-org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
-org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
-org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
-org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
-org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
-org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
+++ /dev/null
-eclipse.preferences.version=1
-editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
-formatter_profile=_MoGraSim
-formatter_settings_version=16
-sp_cleanup.add_default_serial_version_id=true
-sp_cleanup.add_generated_serial_version_id=false
-sp_cleanup.add_missing_annotations=true
-sp_cleanup.add_missing_deprecated_annotations=true
-sp_cleanup.add_missing_methods=false
-sp_cleanup.add_missing_nls_tags=false
-sp_cleanup.add_missing_override_annotations=true
-sp_cleanup.add_missing_override_annotations_interface_methods=true
-sp_cleanup.add_serial_version_id=false
-sp_cleanup.always_use_blocks=true
-sp_cleanup.always_use_parentheses_in_expressions=false
-sp_cleanup.always_use_this_for_non_static_field_access=false
-sp_cleanup.always_use_this_for_non_static_method_access=false
-sp_cleanup.convert_functional_interfaces=false
-sp_cleanup.convert_to_enhanced_for_loop=false
-sp_cleanup.correct_indentation=false
-sp_cleanup.format_source_code=true
-sp_cleanup.format_source_code_changes_only=false
-sp_cleanup.insert_inferred_type_arguments=false
-sp_cleanup.make_local_variable_final=true
-sp_cleanup.make_parameters_final=false
-sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_type_abstract_if_missing_method=false
-sp_cleanup.make_variable_declarations_final=false
-sp_cleanup.never_use_blocks=false
-sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=false
-sp_cleanup.organize_imports=false
-sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
-sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
-sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_redundant_modifiers=false
-sp_cleanup.remove_redundant_semicolons=false
-sp_cleanup.remove_redundant_type_arguments=false
-sp_cleanup.remove_trailing_whitespaces=false
-sp_cleanup.remove_trailing_whitespaces_all=true
-sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
-sp_cleanup.remove_unnecessary_casts=true
-sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
-sp_cleanup.remove_unused_local_variables=false
-sp_cleanup.remove_unused_private_fields=true
-sp_cleanup.remove_unused_private_members=false
-sp_cleanup.remove_unused_private_methods=true
-sp_cleanup.remove_unused_private_types=true
-sp_cleanup.sort_members=false
-sp_cleanup.sort_members_all=false
-sp_cleanup.use_anonymous_class_creation=false
-sp_cleanup.use_blocks=false
-sp_cleanup.use_blocks_only_for_return_and_throw=false
-sp_cleanup.use_lambda=true
-sp_cleanup.use_parentheses_in_expressions=false
-sp_cleanup.use_this_for_non_static_field_access=false
-sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
-sp_cleanup.use_this_for_non_static_method_access=false
-sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+++ /dev/null
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Bundle-Name
-Bundle-SymbolicName: net.mograsim.logic.ui;singleton:=true
-Bundle-Version: 0.1.0.qualifier
-Export-Package: net.mograsim.logic.ui,
- net.mograsim.logic.ui.examples,
- net.mograsim.logic.ui.model,
- net.mograsim.logic.ui.model.components,
- net.mograsim.logic.ui.model.components.atomic,
- net.mograsim.logic.ui.model.components.submodels,
- net.mograsim.logic.ui.model.wires,
- net.mograsim.logic.ui.modeladapter,
- net.mograsim.logic.ui.modeladapter.componentadapters,
- net.mograsim.logic.ui.serializing,
- net.mograsim.logic.ui.serializing.snippets,
- net.mograsim.logic.ui.serializing.snippets.outlinerenderers,
- net.mograsim.logic.ui.serializing.snippets.symbolrenderers,
- net.mograsim.logic.ui.util
-Bundle-RequiredExecutionEnvironment: JavaSE-11
-Require-Bundle: org.eclipse.swt;bundle-version="3.0.0";visibility:=reexport,
- SWTZoomableCanvas;bundle-version="1.0.0";visibility:=reexport,
- net.mograsim.logic.core;bundle-version="0.1.0";visibility:=reexport,
- com.google.gson;bundle-version="2.8.2";visibility:=reexport,
- net.mograsim.preferences;bundle-version="0.1.0"
-Automatic-Module-Name: net.mograsim.logic.ui
-Bundle-Vendor: Mograsim Team
+++ /dev/null
-#Properties file for net.mograsim.logic.ui
-Bundle-Vendor = Mograsim Team
-Bundle-Name = Mograsim logic user interface
\ No newline at end of file
+++ /dev/null
-source.. = src/
-bin.includes = META-INF/,\
- .,\
- OSGI-INF/
+++ /dev/null
-package era.mi.gui.components;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import era.mi.logic.components.Merger;
-import era.mi.logic.wires.Wire.ReadEnd;
-import era.mi.logic.wires.Wire.ReadWriteEnd;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public class GUIMerger extends Merger implements GUIComponent
-{
- private final int inputCount;
- private final double height;
- private final List<ReadEnd> connectedWireEnds;
- private final List<Point> WireEndConnectionPoints;
-
- public GUIMerger(ReadWriteEnd union, ReadEnd... inputs)
- {
- super(union, inputs);
-
- List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();
- List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();
-
- this.inputCount = inputs.length;
- this.height = (inputCount - 1) * 10;
-
- {
- connectedWireEndsModifiable.addAll(Arrays.asList(inputs));
- double inputHeight = 0;
- for (int i = 0; i < inputCount; i++, inputHeight += 10)
- WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));
- }
-
- connectedWireEndsModifiable.add(union);
- WireEndConnectionPointsModifiable.add(new Point(20, height / 2));
-
- this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
- this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
- }
-
- @Override
- public Rectangle getBounds()
- {
- return new Rectangle(0, 0, 20, height);
- }
-
- @Override
- public void render(GeneralGC gc)
- {
- double inputHeight = 0;
- for (int i = 0; i < inputCount; i++, inputHeight += 10)
- gc.drawLine(0, inputHeight, 10, inputHeight);
- gc.drawLine(10, 0, 10, height);
- gc.drawLine(10, height / 2, 20, height / 2);
- }
-
- @Override
- public int getConnectedWireEndsCount()
- {
- return connectedWireEnds.size();
- }
-
- @Override
- public ReadEnd getConnectedWireEnd(int connectionIndex)
- {
- return connectedWireEnds.get(connectionIndex);
- }
-
- @Override
- public Point getWireEndConnectionPoint(int connectionI)
- {
- return WireEndConnectionPoints.get(connectionI);
- }
-}
\ No newline at end of file
+++ /dev/null
-package era.mi.gui.components;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import era.mi.logic.components.Mux;
-import era.mi.logic.wires.Wire.ReadEnd;
-import era.mi.logic.wires.Wire.ReadWriteEnd;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public class GUIMux extends Mux implements GUIComponent
-{
- private final double height;
- private final List<ReadEnd> connectedWireEnds;
- private final List<Point> WireEndConnectionPoints;
-
- public GUIMux(int processTime, ReadWriteEnd out, ReadEnd select, ReadEnd... inputs)
- {
- super(processTime, out, select, inputs);
-
- double height = inputs.length * 5;
- if (height < 10)
- height = 10;
- this.height = height;
-
- List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();
- List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();
-
- connectedWireEndsModifiable.add(out);
- WireEndConnectionPointsModifiable.add(new Point(20, 10 + height / 2));
-
- connectedWireEndsModifiable.add(select);
- WireEndConnectionPointsModifiable.add(new Point(10, 5));
-
- {
- connectedWireEndsModifiable.addAll(Arrays.asList(inputs));
- double inputHeightIncrement = (height + 20) / inputs.length;
- double inputHeight = inputHeightIncrement / 2;
- for (int i = 0; i < inputs.length; i++, inputHeight += inputHeightIncrement)
- WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));
- }
-
- this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
- this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
- }
-
- @Override
- public Rectangle getBounds()
- {
- return new Rectangle(0, 0, 20, height + 20);
- }
-
- @Override
- public void render(GeneralGC gc)
- {
- gc.drawPolygon(new double[] { 0, 0, 20, 10, 20, height + 10, 0, height + 20 });
- }
-
- @Override
- public int getConnectedWireEndsCount()
- {
- return connectedWireEnds.size();
- }
-
- @Override
- public ReadEnd getConnectedWireEnd(int connectionIndex)
- {
- return connectedWireEnds.get(connectionIndex);
- }
-
- @Override
- public Point getWireEndConnectionPoint(int connectionI)
- {
- return WireEndConnectionPoints.get(connectionI);
- }
-}
\ No newline at end of file
+++ /dev/null
-package era.mi.gui.components;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import era.mi.gui.ViewModel;
-import era.mi.logic.components.Splitter;
-import era.mi.logic.wires.Wire.ReadEnd;
-import era.mi.logic.wires.Wire.ReadWriteEnd;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public class GUISplitter extends GUIComponent
-{
- public GUISplitter(ViewModel model)
- {
- super(model);
-
- this.outputCount = outputs.length;
- this.height = (outputCount - 1) * 10;
-
- connectedWireEndsModifiable.add(input);
- WireEndConnectionPointsModifiable.add(new Point(0, height / 2));
-
- {
- connectedWireEndsModifiable.addAll(Arrays.asList(outputs));
- double outputHeight = 0;
- for (int i = 0; i < outputCount; i++, outputHeight += 10)
- WireEndConnectionPointsModifiable.add(new Point(20, outputHeight));
- }
-
- this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);
- this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);
- }
-
- @Override
- public Rectangle getBounds()
- {
- return new Rectangle(0, 0, 20, height);
- }
-
- @Override
- public void render(GeneralGC gc)
- {
- gc.drawLine(0, height / 2, 10, height / 2);
- gc.drawLine(10, 0, 10, height);
- double outputHeight = 0;
- for (int i = 0; i < outputCount; i++, outputHeight += 10)
- gc.drawLine(10, outputHeight, 20, outputHeight);
- }
-
- @Override
- public int getConnectedWireEndsCount()
- {
- return connectedWireEnds.size();
- }
-
- @Override
- public ReadEnd getConnectedWireEnd(int connectionIndex)
- {
- return connectedWireEnds.get(connectionIndex);
- }
-
- @Override
- public Point getWireEndConnectionPoint(int connectionI)
- {
- return WireEndConnectionPoints.get(connectionI);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicLong;
-
-import net.mograsim.logic.core.timeline.Timeline;
-
-//TODO maybe move to logic core?
-public class LogicExecuter
-{
- // TODO replace with LogicModel when it exists
- private final Timeline timeline;
-
- private final AtomicBoolean shouldBeRunningLive;
- private final AtomicBoolean isRunningLive;
- private final AtomicLong nextExecSimulTime;
- private final Thread simulationThread;
-
- public LogicExecuter(Timeline timeline)
- {
- this.timeline = timeline;
-
- timeline.setTimeFunction(System::currentTimeMillis);
- shouldBeRunningLive = new AtomicBoolean();
- isRunningLive = new AtomicBoolean();
- nextExecSimulTime = new AtomicLong();
- simulationThread = new Thread(() ->
- {
- isRunningLive.set(true);
- synchronized (isRunningLive)
- {
- isRunningLive.notify();
- }
- try
- {
- while (shouldBeRunningLive.get())
- {
- // always execute to keep timeline from "hanging behind" for too long
- long current = System.currentTimeMillis();
- timeline.executeUntil(timeline.laterThan(current), current + 10);
- long sleepTime;
- if (timeline.hasNext())
- sleepTime = timeline.nextEventTime() - current;
- else
- sleepTime = 10000;
- try
- {
- nextExecSimulTime.set(current + sleepTime);
- if (sleepTime > 0)
- Thread.sleep(sleepTime);
- }
- catch (@SuppressWarnings("unused") InterruptedException e)
- {// do nothing; it is normal execution flow to be interrupted
- }
- }
- }
- finally
- {
- isRunningLive.set(false);
- synchronized (isRunningLive)
- {
- isRunningLive.notify();
- }
- }
- });
- timeline.addEventAddedListener(event ->
- {
- if (isRunningLive.get())
- if (Timeline.timeCmp(event.getTiming(), nextExecSimulTime.get()) < 0)
- simulationThread.interrupt();
- });
- }
-
- public void executeNextStep()
- {
- timeline.executeNext();
- }
-
- public synchronized void startLiveExecution()
- {
- if (shouldBeRunningLive.get())
- return;
- shouldBeRunningLive.set(true);
- simulationThread.start();
- waitForIsRunning(true);
- }
-
- public synchronized void stopLiveExecution()
- {
- if (!shouldBeRunningLive.get())
- return;
- shouldBeRunningLive.set(false);
- simulationThread.interrupt();
- waitForIsRunning(false);
- }
-
- private void waitForIsRunning(boolean expectedState)
- {
- while (isRunningLive.get() ^ expectedState)
- try
- {
- synchronized (isRunningLive)
- {
- isRunningLive.wait();
- }
- }
- catch (@SuppressWarnings("unused") InterruptedException e)
- {// no need to do anything
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelInterface;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.preferences.Preferences;
-
-/**
- * Simulation visualizer canvas.
- *
- * @author Daniel Kirschten
- */
-public class LogicUICanvas extends ZoomableCanvas
-{
- private static final boolean OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL = false;
-
- private final ViewModel model;
-
- public LogicUICanvas(Composite parent, int style, ViewModel model)
- {
- super(parent, style);
-
- this.model = model;
-
- LogicUIRenderer renderer = new LogicUIRenderer(model);
- addZoomedRenderer(gc ->
- {
- Color background = Preferences.current().getColor("net.mograsim.logic.ui.color.background");
- if (background != null)
- setBackground(background);// this.setBackground, not gc.setBackground to have the background fill the canvas
- renderer.render(gc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
- });
- model.addRedrawListener(this::redrawThreadsafe);
-
- addListener(SWT.MouseDown, this::mouseDown);
-
- if (OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL)
- openDebugSetHighLevelStateShell(model);
- }
-
- private void mouseDown(Event e)
- {
- if (e.button == 1)
- {
- Point click = displayToWorldCoords(e.x, e.y);
- for (GUIComponent component : model.getComponents())
- if (component.getBounds().contains(click) && component.clicked(click.x, click.y))
- {
- redraw();
- break;
- }
- }
- }
-
- private void openDebugSetHighLevelStateShell(ViewModel model)
- {
- Shell debugShell = new Shell();
- debugShell.setLayout(new GridLayout(2, false));
- new Label(debugShell, SWT.NONE).setText("Target component: ");
- Combo componentSelector = new Combo(debugShell, SWT.DROP_DOWN | SWT.READ_ONLY);
- componentSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- List<GUIComponent> componentsByItemIndex = new ArrayList<>();
- model.addComponentAddedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
- model.addComponentRemovedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
- recalculateComponentSelector(componentsByItemIndex, componentSelector, model);
- new Label(debugShell, SWT.NONE).setText("Target state ID: ");
- Text stateIDText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
- stateIDText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- new Label(debugShell, SWT.NONE).setText("Value type: ");
- Composite radioGroup = new Composite(debugShell, SWT.NONE);
- radioGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- GridLayout radioGroupLayout = new GridLayout(2, false);
- radioGroupLayout.marginHeight = 0;
- radioGroupLayout.marginWidth = 0;
- radioGroup.setLayout(radioGroupLayout);
- Button radioBit = new Button(radioGroup, SWT.RADIO);
- radioBit.setText("Single bit");
- Button radioBitVector = new Button(radioGroup, SWT.RADIO);
- radioBitVector.setText("Bitvector");
- new Label(debugShell, SWT.NONE).setText("Value string representation: \n(Bit vectors: MSBit...LSBit)");
- Text valueText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER);
- valueText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- Button send = new Button(debugShell, SWT.PUSH);
- send.setText("Send!");
- Button get = new Button(debugShell, SWT.PUSH);
- get.setText("Get!");
- Text output = new Text(debugShell, SWT.READ_ONLY);
- output.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
- Listener sendAction = e ->
- {
- try
- {
- int componentIndex = componentSelector.getSelectionIndex();
- if (componentIndex < 0 || componentIndex >= componentsByItemIndex.size())
- throw new RuntimeException("No component selected");
- GUIComponent target = componentsByItemIndex.get(componentIndex);
- String valueString = valueText.getText();
- Object value;
- if (radioBit.getSelection())
- value = Bit.parse(valueString);
- else if (radioBitVector.getSelection())
- value = BitVector.parseMSBFirst(valueString);
- else
- throw new RuntimeException("No value type selected");
- target.setHighLevelState(stateIDText.getText(), value);
- output.setText("Success!");
- }
- catch (Exception x)
- {
- output.setText(x.getClass().getSimpleName() + (x.getMessage() == null ? "" : ": " + x.getMessage()));
- }
- };
- Listener getAction = e ->
- {
- try
- {
- if (componentSelector.getSelectionIndex() >= componentsByItemIndex.size())
- throw new RuntimeException("No valid component selected");
- output.setText("Success! Value: \r\n"
- + componentsByItemIndex.get(componentSelector.getSelectionIndex()).getHighLevelState(stateIDText.getText()));
- }
- catch (Exception x)
- {
- output.setText(x.getClass().getSimpleName() + (x.getMessage() == null ? "" : ": " + x.getMessage()));
- }
- };
- send.addListener(SWT.Selection, sendAction);
- valueText.addListener(SWT.DefaultSelection, sendAction);
- get.addListener(SWT.Selection, getAction);
- stateIDText.addListener(SWT.DefaultSelection, getAction);
- debugShell.open();
- }
-
- private void recalculateComponentSelector(List<GUIComponent> componentsByItemIndex, Combo componentSelector, ViewModel model)
- {
- componentsByItemIndex.clear();
- componentSelector.setItems();
- addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model);
- }
-
- private void addComponentSelectorItems(List<GUIComponent> componentsByItemIndex, String base, Combo componentSelector, ViewModel model)
- {
- for (GUIComponent c : model.getComponents())
- if (!(c instanceof WireCrossPoint || c instanceof SubmodelInterface))
- {
- String item = base + c.getClass().getSimpleName();
- componentsByItemIndex.add(c);
- componentSelector.add(item);
- if (c instanceof SubmodelComponent)
- addComponentSelectorItems(componentsByItemIndex, item + " -> ", componentSelector, ((SubmodelComponent) c).submodel);
- }
- }
-
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui;
-
-import org.eclipse.swt.SWT;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-
-public class LogicUIRenderer
-{
- private static final boolean DRAW_PINS = false;
-
- private final ViewModel model;
-
- public LogicUIRenderer(ViewModel model)
- {
- this.model = model;
- }
-
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- gc.setAntialias(SWT.ON);
- gc.setClipping(visibleRegion);
- gc.setLineWidth(.5);
- model.getWires().forEach(w ->
- {
- Rectangle bounds = w.getBounds();
- double lw = gc.getLineWidth();
- if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
- w.render(gc);
- });
- model.getComponents().forEach(c -> renderComponent(gc, c, visibleRegion));
- }
-
- private static void renderComponent(GeneralGC gc, GUIComponent component, Rectangle visibleRegion)
- {
- Rectangle bounds = component.getBounds();
- double lw = gc.getLineWidth();
- if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
- {
- component.render(gc, visibleRegion);
- if (DRAW_PINS)
- {
- gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN));
- for (Pin p : component.getPins().values())
- {
- Point pos = p.getPos();
- gc.fillOval(pos.x - 1, pos.y - 1, 2, 2);
- }
- }
- }
- }
-
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-
-import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay;
-import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
-import net.mograsim.logic.ui.model.ViewModel;
-
-/**
- * Standalone simulation visualizer graphical user interface.
- *
- * @author Daniel Kirschten
- */
-public class LogicUIStandaloneGUI implements Runnable
-{
- private final Display display;
- private final Shell shell;
- private final LogicUICanvas ui;
-
- public LogicUIStandaloneGUI(ViewModel model)
- {
- display = new Display();
- shell = new Shell(display);
- shell.setLayout(new FillLayout());
- ui = new LogicUICanvas(shell, SWT.NONE, model);
-
- ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(ui);
- userInput.buttonDrag = 3;
- userInput.buttonZoom = 2;
- userInput.enableUserInput();
- new ZoomableCanvasOverlay(ui, null).enableScale();
- }
-
- public LogicUICanvas getLogicUICanvas()
- {
- return ui;
- }
-
- /**
- * Opens the UI shell. Returns when the shell is closed.
- */
- @Override
- public void run()
- {
- shell.open();
- while (!shell.isDisposed())
- if (!display.readAndDispatch())
- display.sleep();
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui;
-
-import java.util.function.Consumer;
-
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-
-public class SimpleLogicUIStandalone
-{
- public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel)
- {
- LogicModelParameters params = new LogicModelParameters();
- params.gateProcessTime = 50;
- params.wireTravelTime = 10;
- executeVisualisation(setupViewModel, params);
- }
-
- public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, LogicModelParameters params)
- {
- // setup view model
- ViewModelModifiable viewModel = new ViewModelModifiable();
- setupViewModel.accept(viewModel);
-
- // convert to logic model
- Timeline timeline = ViewLogicModelAdapter.convert(viewModel, params);
-
- // initialize UI and executer
- LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(viewModel);
- LogicExecuter exec = new LogicExecuter(timeline);
-
- // run it
- exec.startLiveExecution();
- ui.run();
- exec.stopLiveExecution();
- }
-
- private SimpleLogicUIStandalone()
- {
- throw new UnsupportedOperationException("No SimpleLogicUIStandalone instances");
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.examples;
-
-import net.mograsim.logic.ui.SimpleLogicUIStandalone;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-
-public class ClickableSubmodelComponentsTest
-{
- public static void main(String[] args)
- {
- SimpleLogicUIStandalone.executeVisualisation(ClickableSubmodelComponentsTest::createExample);
- }
-
- public static void createExample(ViewModelModifiable model)
- {
- SimpleRectangularSubmodelComponent comp = new SimpleRectangularSubmodelComponent(model, 1, "")
- {
- {
- setSubmodelScale(.4);
- setOutputPins("O0");
-
- GUIManualSwitch sw = new GUIManualSwitch(submodelModifiable);
- GUIBitDisplay bd = new GUIBitDisplay(submodelModifiable);
-
- sw.moveTo(10, 5);
- bd.moveTo(50, 5);
-
- }
- };
- comp.moveTo(10, 10);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.examples;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.SimpleLogicUIStandalone;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.atomic.GUINotGate;
-import net.mograsim.logic.ui.model.components.atomic.GUIOrGate;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-
-public class RSLatchExample
-{
- public static void main(String[] args)
- {
- SimpleLogicUIStandalone.executeVisualisation(RSLatchExample::createRSLatchExample);
- }
-
- @SuppressWarnings("unused") // for GUIWires being created
- public static void createRSLatchExample(ViewModelModifiable model)
- {
- GUIManualSwitch rIn = new GUIManualSwitch(model);
- rIn.moveTo(100, 100);
- GUIManualSwitch sIn = new GUIManualSwitch(model);
- sIn.moveTo(100, 200);
-
- GUIOrGate or1 = new GUIOrGate(model, 1);
- or1.moveTo(160, 102.5);
- new GUIWire(model, rIn.getOutputPin(), or1.getPin("A"));
-
- GUIOrGate or2 = new GUIOrGate(model, 1);
- or2.moveTo(160, 192.5);
- new GUIWire(model, sIn.getOutputPin(), or2.getPin("B"));
-
- GUINotGate not1 = new GUINotGate(model, 1);
- not1.moveTo(200, 107.5);
- new GUIWire(model, or1.getPin("Y"), not1.getPin("A"));
-
- GUINotGate not2 = new GUINotGate(model, 1);
- not2.moveTo(200, 197.5);
- new GUIWire(model, or2.getPin("Y"), not2.getPin("A"));
-
- WireCrossPoint p1 = new WireCrossPoint(model, 1);
- p1.moveCenterTo(250, 112.5);
- new GUIWire(model, not1.getPin("Y"), p1);
- new GUIWire(model, p1, or2.getPin("A"), new Point(250, 130), new Point(140, 185), new Point(140, 197.5));
-
- WireCrossPoint p2 = new WireCrossPoint(model, 1);
- p2.moveCenterTo(250, 202.5);
- new GUIWire(model, not2.getPin("Y"), p2);
- new GUIWire(model, p2, or1.getPin("B"), new Point(250, 185), new Point(140, 130), new Point(140, 117.5));
-
- WireCrossPoint o1 = new WireCrossPoint(model, 1);
- o1.moveCenterTo(270, 112.5);
- new GUIWire(model, p1, o1);
-
- WireCrossPoint o2 = new WireCrossPoint(model, 1);
- o2.moveCenterTo(270, 202.5);
- new GUIWire(model, p2, o2);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.function.Consumer;
-
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-
-public class ViewModel
-{
- private final List<GUIComponent> components;
- private final List<GUIComponent> componentsUnmodifiable;
- private final List<GUIWire> wires;
- private final List<GUIWire> wiresUnmodifiable;
-
- private final List<Consumer<? super GUIComponent>> componentAddedListeners;
- private final List<Consumer<? super GUIComponent>> componentRemovedListeners;
- private final List<Consumer<? super GUIWire>> wireAddedListeners;
- private final List<Consumer<? super GUIWire>> wireRemovedListeners;
- private final List<Runnable> redrawListeners;
-
- private final Runnable redrawListenerForSubcomponents;
-
- protected ViewModel()
- {
- components = new ArrayList<>();
- componentsUnmodifiable = Collections.unmodifiableList(components);
- wires = new ArrayList<>();
- wiresUnmodifiable = Collections.unmodifiableList(wires);
-
- componentAddedListeners = new ArrayList<>();
- componentRemovedListeners = new ArrayList<>();
- wireAddedListeners = new ArrayList<>();
- wireRemovedListeners = new ArrayList<>();
- redrawListeners = new ArrayList<>();
-
- redrawListenerForSubcomponents = this::callRedrawListeners;
- }
-
- /**
- * Adds the given component to the list of components and calls all componentAddedListeners. Don't call this method from application
- * code as it is automatically called in {@link GUIComponent}'s constructor.
- */
- protected void componentCreated(GUIComponent component)
- {
- if (components.contains(component))
- throw new IllegalStateException("Don't add the same component twice!");
- components.add(component);
- callComponentAddedListeners(component);
- component.addRedrawListener(redrawListenerForSubcomponents);
- callRedrawListeners();
- }
-
- /**
- * Removes the given component from the list of components and calls all componentRemovedListeners. Don't call this method from
- * application code as it is automatically called in {@link GUIComponent#destroy()}.
- */
- protected void componentDestroyed(GUIComponent component)
- {
- if (!components.contains(component))
- throw new IllegalStateException("Don't remove the same component twice!");
- components.remove(component);
- callComponentRemovedListeners(component);
- component.removeRedrawListener(redrawListenerForSubcomponents);
- callRedrawListeners();
- }
-
- /**
- * Adds the given wire to the list of wires and calls all wireAddedListeners. Don't call this method from application code as it is
- * automatically called in {@link GUIWire}'s constructor(s).
- */
- protected void wireCreated(GUIWire wire)
- {
- if (wires.contains(wire))
- throw new IllegalStateException("Don't add the same wire twice!");
- wires.add(wire);
- callWireAddedListeners(wire);
- wire.addRedrawListener(redrawListenerForSubcomponents);
- callRedrawListeners();
- }
-
- /**
- * Removes the given wire from the list of wires and calls all wireRemovedListeners. Don't call this method from application code as it
- * is automatically called in {@link GUIWire#destroy()}.
- */
- protected void wireDestroyed(GUIWire wire)
- {
- if (!wires.contains(wire))
- throw new IllegalStateException("Don't remove the same wire twice!");
- wires.remove(wire);
- callWireRemovedListeners(wire);
- wire.removeRedrawListener(redrawListenerForSubcomponents);
- callRedrawListeners();
- }
-
- public List<GUIComponent> getComponents()
- {
- return componentsUnmodifiable;
- }
-
- public List<GUIWire> getWires()
- {
- return wiresUnmodifiable;
- }
-
- // @formatter:off
- public void addComponentAddedListener (Consumer<? super GUIComponent> listener) {componentAddedListeners .add (listener);}
- public void addComponentRemovedListener (Consumer<? super GUIComponent> listener) {componentRemovedListeners.add (listener);}
- public void addWireAddedListener (Consumer<? super GUIWire > listener) {wireAddedListeners .add (listener);}
- public void addWireRemovedListener (Consumer<? super GUIWire > listener) {wireRemovedListeners .add (listener);}
- public void addRedrawListener (Runnable listener) {redrawListeners .add (listener);}
-
- public void removeComponentAddedListener (Consumer<? super GUIComponent> listener) {componentAddedListeners .remove(listener);}
- public void removeComponentRemovedListener(Consumer<? super GUIComponent> listener) {componentRemovedListeners.remove(listener);}
- public void removeWireAddedListener (Consumer<? super GUIWire > listener) {wireAddedListeners .remove(listener);}
- public void removeWireRemovedListener (Consumer<? super GUIWire > listener) {wireRemovedListeners .remove(listener);}
- public void removeRedrawListener (Runnable listener) {redrawListeners .remove(listener);}
-
- private void callComponentAddedListeners (GUIComponent c) {componentAddedListeners .forEach(l -> l.accept(c));}
- private void callComponentRemovedListeners(GUIComponent c) {componentRemovedListeners.forEach(l -> l.accept(c));}
- private void callWireAddedListeners (GUIWire w ) {wireAddedListeners .forEach(l -> l.accept(w));}
- private void callWireRemovedListeners (GUIWire w ) {wireRemovedListeners .forEach(l -> l.accept(w));}
- private void callRedrawListeners ( ) {redrawListeners .forEach(l -> l.run( ));}
- // @formatter:on
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model;
-
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-
-public class ViewModelModifiable extends ViewModel
-{
- @Override
- public void componentCreated(GUIComponent component)
- {
- super.componentCreated(component);
- }
-
- @Override
- public void componentDestroyed(GUIComponent component)
- {
- super.componentDestroyed(component);
- }
-
- @Override
- public void wireCreated(GUIWire wire)
- {
- super.wireCreated(wire);
- }
-
- @Override
- public void wireDestroyed(GUIWire wire)
- {
- super.wireDestroyed(wire);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Consumer;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.wires.Pin;
-
-/**
- * The base class for all GUI components.<br>
- * A <code>GUIComponent</code> has a position and size. The size can only be modified by subclasses.<br>
- *
- * @author Daniel Kirschten
- */
-public abstract class GUIComponent
-{
- /**
- * The model this component is a part of.
- */
- protected final ViewModelModifiable model;
- private final Rectangle bounds;
- /**
- * The list of all pins of this component by name.
- */
- private final Map<String, Pin> pinsByName;
- /**
- * An unmodifiable view of {@link #pinsByName}.
- */
- protected final Map<String, Pin> pinsUnmodifiable;
-
- private final List<Consumer<? super GUIComponent>> componentMovedListeners;
- private final List<Consumer<? super GUIComponent>> componentResizedListeners;
- private final List<Consumer<? super Pin>> pinAddedListeners;
- private final List<Consumer<? super Pin>> pinRemovedListeners;
- private final List<Runnable> redrawListeners;
-
- private final Runnable redrawListenerForSubcomponents;
- // creation and destruction
-
- public GUIComponent(ViewModelModifiable model)
- {
- this.model = model;
- this.bounds = new Rectangle(0, 0, 0, 0);
- this.pinsByName = new HashMap<>();
- this.pinsUnmodifiable = Collections.unmodifiableMap(pinsByName);
-
- this.componentMovedListeners = new ArrayList<>();
- this.componentResizedListeners = new ArrayList<>();
- this.pinAddedListeners = new ArrayList<>();
- this.pinRemovedListeners = new ArrayList<>();
- this.redrawListeners = new ArrayList<>();
-
- redrawListenerForSubcomponents = this::requestRedraw;
-
- model.componentCreated(this);
- }
-
- /**
- * Destroys this component. This method implicitly calls {@link ViewModelModifiable#componentDestroyed(GUIComponent)
- * componentDestroyed()} for the model this component is a part of.
- *
- * @author Daniel Kirschten
- */
- public void destroy()
- {
- pinsByName.values().forEach(p -> pinRemovedListeners.forEach(l -> l.accept(p)));
- model.componentDestroyed(this);
- }
-
- // pins
-
- /**
- * Adds the given pin to this component and calls pinAddedListeners and redrawListeners.
- *
- * @throws IllegalArgumentException if the pin doesn't belong to this component
- * @throws IllegalArgumentException if there already is a pin with the given name
- *
- * @author Daniel Kirschten
- */
- protected void addPin(Pin pin)
- {
- if (pin.component != this)
- throw new IllegalArgumentException("Can't add a pin not belonging to this component!");
- if (pinsByName.containsKey(pin.name))
- throw new IllegalArgumentException("Duplicate pin name: " + pin.name);
- pinsByName.put(pin.name, pin);
- callPinAddedListeners(pin);
- pin.addRedrawListener(redrawListenerForSubcomponents);
- requestRedraw();
- }
-
- /**
- * Removes the given pin from this component and calls pinAddedListeners and redrawListeners.
- *
- * @throws NullPointerException if there was no pin with this name
- *
- * @author Daniel Kirschten
- */
- protected void removePin(String name)
- {
- Pin pin = pinsByName.remove(name);
- callPinRemovedListeners(pin);
- pin.removeRedrawListener(redrawListenerForSubcomponents);
- requestRedraw();
- }
-
- /**
- * Returns a collection of pins of this component.
- *
- * @author Daniel Kirschten
- */
- public Map<String, Pin> getPins()
- {
- return pinsUnmodifiable;
- }
-
- /**
- * Returns the pin with the given name of this component.
- *
- * @throws IllegalArgumentException if there is no pin with the given name
- *
- * @author Daniel Kirschten
- */
- public Pin getPin(String name)
- {
- Pin pin = pinsByName.get(name);
- if (pin == null)
- throw new IllegalArgumentException("No pin with the name " + name);
- return pin;
- }
-
- // high-level access
-
- /**
- * Sets the given high-level state to the given value. <br>
- * A high level state ID consists of parts separated by dots ('.').<br>
- * The last part (the part after the last dot) is called "atomic high level state ID". The parts before that part are called
- * "subcomponent ID"s.<br>
- * If there is no dot in a high level state ID, the whole high level state ID is called atomic.<br>
- * Note that subcomponent IDs don't have to correspond to actual subcomponents. For example, a RAM component may supply subcomponent IDs
- * "c0000", "c0001" ... "cFFFF" without actually having a subcomponent for each cell. It also is allowed for an atomic high level state
- * ID to be delegated to a subcomponent.
- *
- * @author Daniel Kirschten
- */
- @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden
- public void setHighLevelState(String stateID, Object newState)
- {
- throw new IllegalArgumentException("No high level state with ID " + stateID);
- }
-
- /**
- * Gets the current value of the given high-level state. <br>
- * See {@link #setHighLevelState(String, Object)} for an explanation of high-level state IDs.
- *
- * @author Daniel Kirschten
- */
- @SuppressWarnings("static-method") // this method is intended to be overridden
- public Object getHighLevelState(String stateID)
- {
- throw new IllegalArgumentException("No high level state with ID " + stateID);
- }
-
- // "graphical" operations
-
- /**
- * Sets the position of this component and calls componentMovedListeners and redrawListeners.
- *
- * @author Daniel Kirschten
- */
- public void moveTo(double x, double y)
- {
- bounds.x = x;
- bounds.y = y;
- callComponentMovedListeners();
- requestRedraw();
- }
-
- /**
- * Sets the size of this component and calls redrawListeners.
- *
- * @author Daniel Kirschten
- */
- protected void setSize(double width, double height)
- {
- bounds.width = width;
- bounds.height = height;
- callComponentResizedListener();
- requestRedraw();
- }
-
- /**
- * Returns the bounds of this component. Is a bit slower than {@link #getPosX()}, {@link #getPosY()}, {@link #getWidth},
- * {@link #getHeight}, because new objects are created.
- *
- * @author Daniel Kirschten
- */
- public final Rectangle getBounds()
- {
- return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
- }
-
- /**
- * Returns the x coordinate of the position of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
- *
- * @author Daniel Kirschten
- */
- public double getPosX()
- {
- return bounds.x;
- }
-
- /**
- * Returns the y coordinate of the position of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
- *
- * @author Daniel Kirschten
- */
- public double getPosY()
- {
- return bounds.y;
- }
-
- /**
- * Returns the (graphical) width of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
- *
- * @author Daniel Kirschten
- */
- public double getWidth()
- {
- return bounds.width;
- }
-
- /**
- * Returns the height of this component. Is a bit faster than {@link #getBounds()} because no objects are created.
- *
- * @author Daniel Kirschten
- */
- public double getHeight()
- {
- return bounds.height;
- }
-
- /**
- * Called when this component is clicked. Absolute coordinates of the click are given. Returns true if this component consumed this
- * click.
- *
- * @author Daniel Kirschten
- */
- @SuppressWarnings({ "static-method", "unused" }) // this method is inteded to be overridden
- public boolean clicked(double x, double y)
- {
- return false;
- }
-
- /**
- * Render this component to the given gc, in absoulute coordinates.
- *
- * @author Daniel Kirschten
- */
- public abstract void render(GeneralGC gc, Rectangle visibleRegion);
-
- // serializing
-
- @SuppressWarnings("static-method") // this method is intended to be overridden
- public JsonElement getParams()
- {
- return JsonNull.INSTANCE;
- }
-
- // listeners
-
- /**
- * Calls redraw listeners.
- *
- * @author Daniel Kirschten
- */
- protected void requestRedraw()
- {
- callRedrawListeners();
- }
-
- // @formatter:off
- public void addComponentMovedListener (Consumer<? super GUIComponent> listener) {componentMovedListeners .add (listener);}
- public void addComponentResizedListener (Consumer<? super GUIComponent> listener) {componentResizedListeners.add (listener);}
- public void addPinAddedListener (Consumer<? super Pin > listener) {pinAddedListeners .add (listener);}
- public void addPinRemovedListener (Consumer<? super Pin > listener) {pinRemovedListeners .add (listener);}
- public void addRedrawListener (Runnable listener) {redrawListeners .add (listener);}
-
- public void removeComponentMovedListener (Consumer<? super GUIComponent> listener) {componentMovedListeners .remove(listener);}
- public void removeComponentResizedListener (Consumer<? super GUIComponent> listener) {componentResizedListeners.remove(listener);}
- public void removePinAddedListener (Consumer<? super Pin > listener) {pinAddedListeners .remove(listener);}
- public void removePinRemovedListener (Consumer<? super Pin > listener) {pinRemovedListeners .remove(listener);}
- public void removeRedrawListener (Runnable listener) {redrawListeners .remove(listener);}
-
- private void callComponentMovedListeners ( ) {componentMovedListeners .forEach(l -> l.accept(this));}
- private void callComponentResizedListener( ) {componentResizedListeners.forEach(l -> l.accept(this));}
- private void callPinAddedListeners (Pin p) {pinAddedListeners .forEach(l -> l.accept(p ));}
- private void callPinRemovedListeners (Pin p) {pinRemovedListeners .forEach(l -> l.accept(p ));}
- private void callRedrawListeners ( ) {redrawListeners .forEach(l -> l.run( ));}
- // @formatter:on
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.atomic;
-
-import net.mograsim.logic.core.components.gates.AndGate;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIAndGate extends SimpleRectangularGUIGate
-{
- public GUIAndGate(ViewModelModifiable model, int logicWidth)
- {
- super(model, logicWidth, "&", false);
- setInputCount(2);// TODO make variable
- }
-
- static
- {
- ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUIAndGate.class, AndGate::new));
- IndirectGUIComponentCreator.setComponentProvider(GUIAndGate.class.getCanonicalName(), (m, p) -> new GUIAndGate(m, p.getAsInt()));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.atomic;
-
-import org.eclipse.swt.graphics.Color;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.core.LogicObserver;
-import net.mograsim.logic.core.components.BitDisplay;
-import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.BitDisplayAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-import net.mograsim.preferences.Preferences;
-
-public class GUIBitDisplay extends GUIComponent
-{
- private static final double width = 20;
- private static final double height = 15;
- private static final double fontHeight = 5;
-
- private final Pin inputPin;
-
- private final LogicObserver logicObs;
- private BitDisplay bitDisplay;
-
- public GUIBitDisplay(ViewModelModifiable model)
- {
- super(model);
- logicObs = (i) -> requestRedraw();
-
- setSize(width, height);
- addPin(this.inputPin = new Pin(this, "", 1, 0, height / 2));
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
- if (foreground != null)
- gc.setForeground(foreground);
- gc.drawRectangle(getBounds());
- String label = bitDisplay == null ? BitVectorFormatter.formatAsString(null)
- : BitVectorFormatter.formatAsString(bitDisplay.getDisplayedValue());
- Font oldFont = gc.getFont();
- Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
- gc.setFont(labelFont);
- Point textExtent = gc.textExtent(label);
- Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
- if (textColor != null)
- gc.setForeground(textColor);
- gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
- gc.setFont(oldFont);
- }
-
- public void setLogicModelBinding(BitDisplay bitDisplay)
- {
- if (this.bitDisplay != null)
- this.bitDisplay.deregisterObserver(logicObs);
- this.bitDisplay = bitDisplay;
- if (bitDisplay != null)
- bitDisplay.registerObserver(logicObs);
- }
-
- public boolean hasLogicModelBinding()
- {
- return bitDisplay != null;
- }
-
- public BitDisplay getBitDisplay()
- {
- return bitDisplay;
- }
-
- public Pin getInputPin()
- {
- return inputPin;
- }
-
- static
- {
- ViewLogicModelAdapter.addComponentAdapter(new BitDisplayAdapter());
- IndirectGUIComponentCreator.setComponentProvider(GUIBitDisplay.class.getCanonicalName(), (m, p) -> new GUIBitDisplay(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.atomic;
-
-import org.eclipse.swt.graphics.Color;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.core.LogicObservable;
-import net.mograsim.logic.core.LogicObserver;
-import net.mograsim.logic.core.components.ManualSwitch;
-import net.mograsim.logic.core.types.Bit;
-import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.ManualSwitchAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-import net.mograsim.preferences.Preferences;
-
-public class GUIManualSwitch extends GUIComponent
-{
- private static final double width = 20;
- private static final double height = 15;
- private static final double fontHeight = 5;
-
- private final Pin outputPin;
-
- private final LogicObserver logicObs;
- private ManualSwitch logicSwitch;
- private ReadEnd end;
-
- public GUIManualSwitch(ViewModelModifiable model)
- {
- super(model);
- logicObs = (i) -> requestRedraw();
-
- setSize(width, height);
- addPin(this.outputPin = new Pin(this, "", 1, width, height / 2));
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- // TODO maybe draw switch state too?
- Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
- if (foreground != null)
- gc.setForeground(foreground);
- gc.drawRectangle(getBounds());
- String label = BitVectorFormatter.formatValueAsString(end);
- Font oldFont = gc.getFont();
- Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
- gc.setFont(labelFont);
- Point textExtent = gc.textExtent(label);
- Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
- if (textColor != null)
- gc.setForeground(textColor);
- gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
- gc.setFont(oldFont);
- }
-
- public void setLogicModelBinding(ManualSwitch logicSwitch, ReadEnd end)
- {
- deregisterLogicObs(this.end);
- deregisterLogicObs(this.logicSwitch);
- this.logicSwitch = logicSwitch;
- this.end = end;
- registerLogicObs(end);
- registerLogicObs(logicSwitch);
- }
-
- public boolean hasLogicModelBinding()
- {
- return logicSwitch != null;
- }
-
- @Override
- public void setHighLevelState(String stateID, Object newState)
- {
- switch (stateID)
- {
- case "out":
- if (logicSwitch != null)
- logicSwitch.setToValueOf((Bit) newState);
- break;
- default:
- super.setHighLevelState(stateID, newState);
- break;
- }
- }
-
- @Override
- public Object getHighLevelState(String stateID)
- {
- switch (stateID)
- {
- case "out":
- if (logicSwitch != null)
- return logicSwitch.getValue();
- return null;
- default:
- return super.getHighLevelState(stateID);
- }
- }
-
- private void registerLogicObs(LogicObservable observable)
- {
- if (observable != null)
- observable.registerObserver(logicObs);
- }
-
- private void deregisterLogicObs(LogicObservable observable)
- {
- if (observable != null)
- observable.deregisterObserver(logicObs);
- }
-
- @Override
- public boolean clicked(double x, double y)
- {
- if (logicSwitch != null)
- logicSwitch.toggle();
- return true;
- }
-
- public ManualSwitch getManualSwitch()
- {
- return logicSwitch;
- }
-
- public Pin getOutputPin()
- {
- return outputPin;
- }
-
- static
- {
- ViewLogicModelAdapter.addComponentAdapter(new ManualSwitchAdapter());
- IndirectGUIComponentCreator.setComponentProvider(GUIManualSwitch.class.getName(), (m, p) -> new GUIManualSwitch(m));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.atomic;
-
-import net.mograsim.logic.core.components.gates.NandGate;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUINandGate extends SimpleRectangularGUIGate
-{
- public GUINandGate(ViewModelModifiable model, int logicWidth)
- {
- super(model, logicWidth, "&", true);
- setInputCount(2);// TODO make variable
- }
-
- static
- {
- ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUINandGate.class, NandGate::new));
- IndirectGUIComponentCreator.setComponentProvider(GUINandGate.class.getCanonicalName(), (m, p) -> new GUINandGate(m, p.getAsInt()));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.atomic;
-
-import net.mograsim.logic.core.components.gates.NotGate;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUINotGate extends SimpleRectangularGUIGate
-{
- public GUINotGate(ViewModelModifiable model, int logicWidth)
- {
- super(model, logicWidth, "1", true);
- setInputCount(1);
- }
-
- static
- {
- ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUINotGate.class, (t, p, o, i) -> new NotGate(t, p, i[0], o)));
- IndirectGUIComponentCreator.setComponentProvider(GUINotGate.class.getCanonicalName(), (m, p) -> new GUINotGate(m, p.getAsInt()));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.atomic;
-
-import net.mograsim.logic.core.components.gates.OrGate;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.SimpleGateAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-
-public class GUIOrGate extends SimpleRectangularGUIGate
-{
- public GUIOrGate(ViewModelModifiable model, int logicWidth)
- {
- super(model, logicWidth, "\u22651", false);// ">=1"
- setInputCount(2);
- }
-
- static
- {
- ViewLogicModelAdapter.addComponentAdapter(new SimpleGateAdapter<>(GUIOrGate.class, OrGate::new));
- IndirectGUIComponentCreator.setComponentProvider(GUIOrGate.class.getCanonicalName(), (m, p) -> new GUIOrGate(m, p.getAsInt()));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.atomic;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.graphics.Color;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.preferences.Preferences;
-
-public class SimpleRectangularGUIGate extends GUIComponent
-{
- private static final double width = 20;
- private static final double pinDistance = 10;
- private static final double fontHeight = 5;
- private static final double invertedCircleDiam = 3.5;
-
- private final String label;
- protected final int logicWidth;
- private final boolean isInverted;
- private final double rectWidth;
-
- private MovablePin outputPin;
- private final List<Pin> inputPins;
-
- protected SimpleRectangularGUIGate(ViewModelModifiable model, int logicWidth, String label, boolean isInverted)
- {
- super(model);
- this.label = label;
- this.logicWidth = logicWidth;
- this.isInverted = isInverted;
- this.rectWidth = width - (isInverted ? invertedCircleDiam : 0);
- this.outputPin = new MovablePin(this, "Y", logicWidth, width, 0);
- addPin(outputPin);
- this.inputPins = new ArrayList<>();
- setInputCount(1);
- }
-
- protected void setInputCount(int inputCount)
- {
- int oldInputCount = inputPins.size();
- setSize(width, inputCount * pinDistance);
- if (oldInputCount > inputCount)
- while (inputPins.size() > inputCount)
- removePin(inputPins.remove(inputCount).name);
- else if (oldInputCount < inputCount)
- for (int i = oldInputCount; i < inputCount; i++)
- {
- // TODO what for more than 24 input pins?
- Pin pin = new Pin(this, String.valueOf((char) ('A' + i)), logicWidth, 0, pinDistance / 2 + i * pinDistance);
- inputPins.add(pin);
- addPin(pin);
- }
- outputPin.setRelPos(width, inputCount * pinDistance / 2);
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
- if (foreground != null)
- gc.setForeground(foreground);
- double height = (getPins().size() - 1) * pinDistance;
- gc.drawRectangle(getPosX(), getPosY(), rectWidth, height);
- if (isInverted)
- gc.drawOval(getPosX() + rectWidth, getPosY() + (height - invertedCircleDiam) / 2, invertedCircleDiam, invertedCircleDiam);
- Font oldFont = gc.getFont();
- Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
- gc.setFont(labelFont);
- Point textExtent = gc.textExtent(label);
- Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
- if (textColor != null)
- gc.setForeground(textColor);
- gc.drawText(label, getPosX() + (rectWidth - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
- gc.setFont(oldFont);
- }
-
- // serializing
-
- /**
- * {@link SimpleRectangularGUIGate}s implementation returns a {@link JsonPrimitive} of type int containing the {@link #logicWidth} of
- * this component.
- *
- * @see GUIComponent#getParams()
- */
- @Override
- public JsonElement getParams()
- {
- return new JsonPrimitive(logicWidth);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.atomic;
-
-import org.eclipse.swt.graphics.Color;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
-import net.mograsim.logic.ui.modeladapter.componentadapters.NoLogicAdapter;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-import net.mograsim.preferences.Preferences;
-
-//TODO clean size calculation mess
-public class TextComponent extends GUIComponent
-{
- private final String text;
-
- public TextComponent(ViewModelModifiable model, String text)
- {
- super(model);
- this.text = text;
- // If size is unset, it defaults to 0, which could prohibit this component from being rendered, which would prohibit the size being
- // set to a better guess
- setSize(1, 1);
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- Point textExtent = gc.textExtent(text);
- setSize(textExtent.x, textExtent.y);
-
- Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
- if (textColor != null)
- gc.setForeground(textColor);
- gc.drawText(text, getPosX(), getPosY(), true);
- }
-
- // serializing
-
- @Override
- public JsonElement getParams()
- {
- return new JsonPrimitive(text);
- }
-
- static
- {
- ViewLogicModelAdapter.addComponentAdapter(new NoLogicAdapter<>(TextComponent.class));
- IndirectGUIComponentCreator.setComponentProvider(TextComponent.class.getName(), (m, p) -> new TextComponent(m, p.getAsString()));
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.model.components.submodels;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.function.Function;
-
-import org.eclipse.swt.graphics.Color;
-
-import com.google.gson.JsonObject;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer;
-import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams;
-import net.mograsim.preferences.Preferences;
-
-public class SimpleRectangularSubmodelComponent extends SubmodelComponent
-{
- private static final double width = 35;
- private static final double pinDistance = 10;
- private static final double pinNameMargin = .5;
- private static final double labelFontHeight = 5;
- private static final double pinNameFontHeight = 3.5;
-
- private final String label;
- protected final int logicWidth;
-
- private final List<String> inputPinNames;
- private final List<String> inputPinNamesUnmodifiable;
- private final List<String> outputPinNames;
- private final List<String> outputPinNamesUnmodifiable;
-
- private Renderer symbolRenderer;
-
- public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label)
- {
- super(model);
- this.label = label;
- this.logicWidth = logicWidth;
- this.inputPinNames = new ArrayList<>();
- this.inputPinNamesUnmodifiable = Collections.unmodifiableList(inputPinNames);
- this.outputPinNames = new ArrayList<>();
- this.outputPinNamesUnmodifiable = Collections.unmodifiableList(outputPinNames);
-
- SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams();
- rendererParams.centerText = label;
- rendererParams.centerTextHeight = labelFontHeight;
- rendererParams.horizontalComponentCenter = getWidth() / 2;
- rendererParams.pinLabelHeight = pinNameFontHeight;
- rendererParams.pinLabelMargin = pinNameMargin;
- symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams);
- }
-
- protected void setInputPins(String... pinNames)
- {
- setIOPins(0, inputPinNames, outputPinNames, pinNames);
- }
-
- protected void setOutputPins(String... pinNames)
- {
- setIOPins(width, outputPinNames, inputPinNames, pinNames);
- }
-
- private void setIOPins(double relX, List<String> pinNamesListThisSide, List<String> pinNamesListOtherSide, String... newPinNames)
- {
- int inputCount = newPinNames.length;
- List<String> newPinNamesList = Arrays.asList(newPinNames);
- if (new HashSet<>(newPinNamesList).size() != inputCount)
- throw new IllegalArgumentException("Pin names contain duplicates");
- for (String pinName : newPinNamesList)
- if (pinNamesListOtherSide.contains(pinName))
- throw new IllegalArgumentException("Can't add pin. There is a pin on the other side with the same name: " + pinName);
- super.setSize(width, Math.max(inputCount, pinNamesListOtherSide.size()) * pinDistance);
- for (int i = 0; i < inputCount; i++)
- {
- String pinName = newPinNames[i];
- int oldPinIndex = pinNamesListThisSide.indexOf(pinName);
- if (oldPinIndex == -1)
- super.addSubmodelInterface(new MovablePin(this, pinName, logicWidth, relX, pinDistance / 2 + i * pinDistance));
- else
- getSupermodelMovablePin(pinName).setRelPos(relX, pinDistance / 2 + i * pinDistance);
- }
- for (String pinName : pinNamesListThisSide)
- if (!newPinNamesList.contains(pinName))
- super.removeSubmodelInterface(pinName);
- pinNamesListThisSide.clear();
- pinNamesListThisSide.addAll(newPinNamesList);
- }
-
- public List<String> getInputPinNames()
- {
- return inputPinNamesUnmodifiable;
- }
-
- public List<String> getOutputPinNames()
- {
- return outputPinNamesUnmodifiable;
- }
-
- @Override
- protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
- {
- symbolRenderer.render(gc, visibleRegion);
- }
-
- @Override
- protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
- {
- Color foreground = Preferences.current().getColor("net.mograsim.logic.ui.color.foreground");
- if (foreground != null)
- gc.setForeground(foreground);
- gc.drawRectangle(getBounds());
- }
-
- // serializing
-
- @Override
- public SubmodelComponentParams calculateParams(Function<GUIComponent, String> getIdentifier)
- {
- SubmodelComponentParams params = super.calculateParams(getIdentifier);
- JsonObject symbolRendererParams = new JsonObject();
- symbolRendererParams.addProperty("centerText", label);
- symbolRendererParams.addProperty("horizontalComponentCenter", getWidth() / 2);
- symbolRendererParams.addProperty("centerTextHeight", labelFontHeight);
- symbolRendererParams.addProperty("pinLabelHeight", pinNameFontHeight);
- symbolRendererParams.addProperty("pinLabelMargin", pinNameMargin);
- params.symbolRendererSnippetID = "SimpleRectangularLikeSymbolRenderer";
- params.symbolRendererParams = symbolRendererParams;
- return params;
- }
-
- @Override
- protected Pin addSubmodelInterface(MovablePin supermodelPin)
- {
- throw new UnsupportedOperationException(
- "Can't add submodel interfaces to a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
- }
-
- @Override
- protected void removeSubmodelInterface(String name)
- {
- throw new UnsupportedOperationException(
- "Can't remove submodel interfaces of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
- }
-
- @Override
- protected void setSize(double width, double height)
- {
- throw new UnsupportedOperationException(
- "Can't set the size of a SimpleRectangularSubmodelComponent directly, call setInputPins / setOutputPins instead");
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.submodels;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.function.Function;
-
-import net.haspamelodica.swt.helper.gcs.GCConfig;
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.gcs.TranslatedGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.LogicUIRenderer;
-import net.mograsim.logic.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.InterfacePinParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters.InnerComponentParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams.InnerPinParams;
-
-/**
- * A {@link GUIComponent} consisting of another model. A <code>SubmodelComponent</code> can have so-called "interface pins" connecting the
- * inner and outer models.
- */
-public abstract class SubmodelComponent extends GUIComponent
-{
- /**
- * A modifiable view of {@link #submodel}.
- */
- protected final ViewModelModifiable submodelModifiable;
- /**
- * The model this {@link SubmodelComponent} consists of.
- */
- public final ViewModel submodel;
- /**
- * The list of all submodel interface pins of this {@link SubmodelComponent} on the submodel side.
- */
- private final Map<String, MovablePin> submodelPins;
- /**
- * An unmodifiable view of {@link #submodelPins}.
- */
- private final Map<String, MovablePin> submodelMovablePinsUnmodifiable;
- /**
- * An unmodifiable view of {@link #submodelPins} where pins are not movable.
- */
- private final Map<String, Pin> submodelUnmovablePinsUnmodifiable;
- /**
- * The list of all submodel interface pins of this {@link SubmodelComponent} on the supermodel side.
- */
- private final Map<String, MovablePin> supermodelPins;
- /**
- * An unmodifiable view of {@link #supermodelPins}.
- */
- private final Map<String, MovablePin> supermodelMovablePinsUnmodifiable;
- /**
- * An unmodifiable view of {@link #supermodelPins} where pins are not movable.
- */
- private final Map<String, Pin> supermodelUnmovablePinsUnmodifiable;
- /**
- * A pseudo-component containing all submodel interface pins on the submodel side.
- */
- private final SubmodelInterface submodelInterface;
-
- /**
- * The list of all high level state IDs this component supports without delegating to subcomponents.
- */
- private final Set<String> highLevelAtomicStates;
- /**
- * A map of high level state subcomponent IDs to the {@link GUIComponent} high level state access requests are delegated to.
- */
- private final Map<String, GUIComponent> subcomponentsByHighLevelStateSubcomponentID;
-
- /**
- * The factor by which the submodel is scaled when rendering.
- */
- private double submodelScale;
- /**
- * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel starts to
- * be visible.
- */
- private double maxVisibleRegionFillRatioForAlpha0;
- /**
- * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel is fully
- * visible.
- */
- private double minVisibleRegionFillRatioForAlpha1;
- /**
- * The renderer used for rendering the submodel.
- */
- private final LogicUIRenderer renderer;
-
- // creation and destruction
-
- public SubmodelComponent(ViewModelModifiable model)
- {
- super(model);
- this.submodelModifiable = new ViewModelModifiable();
- this.submodel = submodelModifiable;
- this.submodelPins = new HashMap<>();
- this.submodelMovablePinsUnmodifiable = Collections.unmodifiableMap(submodelPins);
- this.submodelUnmovablePinsUnmodifiable = Collections.unmodifiableMap(submodelPins);
- this.supermodelPins = new HashMap<>();
- this.supermodelMovablePinsUnmodifiable = Collections.unmodifiableMap(supermodelPins);
- this.supermodelUnmovablePinsUnmodifiable = Collections.unmodifiableMap(supermodelPins);
- this.submodelInterface = new SubmodelInterface(submodelModifiable);
-
- this.highLevelAtomicStates = new HashSet<>();
- this.subcomponentsByHighLevelStateSubcomponentID = new HashMap<>();
-
- this.submodelScale = 1;
- this.maxVisibleRegionFillRatioForAlpha0 = 0.4;
- this.minVisibleRegionFillRatioForAlpha1 = 0.8;
- this.renderer = new LogicUIRenderer(submodelModifiable);
-
- submodelModifiable.addRedrawListener(this::requestRedraw);
- }
-
- // pins
-
- /**
- * Adds a new submodel interface pin.
- *
- * @param supermodelPin the submodel interface pin on the supermodel side
- *
- * @return the submodel interface pin on the submodel side
- *
- * @author Daniel Kirschten
- */
- protected Pin addSubmodelInterface(MovablePin supermodelPin)
- {
- super.addPin(supermodelPin);// do this first to be fail-fast if the supermodel does not belong to this component
-
- String name = supermodelPin.name;
- MovablePin submodelPin = new MovablePin(submodelInterface, name, supermodelPin.logicWidth, supermodelPin.getRelX() / submodelScale,
- supermodelPin.getRelY() / submodelScale);
-
- submodelPin.addPinMovedListener(p ->
- {
- double newRelX = p.getRelX() * submodelScale;
- double newRelY = p.getRelY() * submodelScale;
- if (supermodelPin.getRelX() != newRelX || supermodelPin.getRelY() != newRelY)
- supermodelPin.setRelPos(newRelX, newRelY);
- });
- supermodelPin.addPinMovedListener(p ->
- {
- double newRelX = p.getRelX() / submodelScale;
- double newRelY = p.getRelY() / submodelScale;
- if (submodelPin.getRelX() != newRelX || submodelPin.getRelY() != newRelY)
- submodelPin.setRelPos(newRelX, newRelY);
- });
-
- submodelInterface.addPin(submodelPin);
-
- submodelPins.put(name, submodelPin);
- supermodelPins.put(name, supermodelPin);
-
- // no need to call requestRedraw() because addPin() will request a redraw
- return submodelPin;
- }
-
- /**
- * Removes a submodel interface pin.
- *
- * @author Daniel Kirschten
- */
- protected void removeSubmodelInterface(String name)
- {
- super.removePin(name);// do this first to be fail-fast if this component doesn't have a pin with the given name
- Pin submodelPin = submodelPins.remove(name);
- submodelInterface.removePin(submodelPin.name);
- supermodelPins.remove(name);
-
- // no need to call requestRedraw() because removePin() will request a redraw
- }
-
- /**
- * Returns a collection of submodel interface pins on the submodel side of this component.
- *
- * @author Daniel Kirschten
- */
- public Map<String, Pin> getSubmodelPins()
- {
- return submodelUnmovablePinsUnmodifiable;
- }
-
- /**
- * Returns the submodel interface pin with the given name on the submodel side of this component.
- *
- * @author Daniel Kirschten
- */
- public Pin getSubmodelPin(String name)
- {
- return getSubmodelMovablePin(name);
- }
-
- /**
- * Returns a collection of movable submodel interface pins on the submodel side of this component.
- *
- * @author Daniel Kirschten
- */
- protected Map<String, MovablePin> getSubmodelMovablePins()
- {
- return submodelMovablePinsUnmodifiable;
- }
-
- /**
- * Returns the movable submodel interface pin with the given name on the submodel side of this component.
- *
- * @author Daniel Kirschten
- */
- protected MovablePin getSubmodelMovablePin(String name)
- {
- return submodelPins.get(name);
- }
-
- /**
- * Returns a collection of submodel interface pins on the supermodel side of this component.
- *
- * @author Daniel Kirschten
- */
- public Map<String, Pin> getSupermodelPins()
- {
- return supermodelUnmovablePinsUnmodifiable;
- }
-
- /**
- * Returns the submodel interface pin with the given name on the supermodel side of this component.
- *
- * @author Daniel Kirschten
- */
- public Pin getSupermodelPin(String name)
- {
- return getSupermodelMovablePin(name);
- }
-
- /**
- * Returns a collection of movable submodel interface pins on the supermodel side of this component.
- *
- * @author Daniel Kirschten
- */
- protected Map<String, MovablePin> getSupermodelMovablePins()
- {
- return supermodelMovablePinsUnmodifiable;
- }
-
- /**
- * Returns the movable submodel interface pin with the given name on the supermodel side of this component.
- *
- * @author Daniel Kirschten
- */
- protected MovablePin getSupermodelMovablePin(String name)
- {
- return supermodelPins.get(name);
- }
-
- // high-level access
-
- /**
- * Adds the given subcomponent ID to the set of allowed subcomponent IDs and links the given {@link GUIComponent} as the delegate target
- * for this subcomponent ID. <br>
- * Note that this method does not affect whether {@link #setSubcomponentHighLevelState(String, String, Object)
- * set}/{@link #getSubcomponentHighLevelState(String, String)} will be called. <br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about subcomponent IDs.
- *
- * @author Daniel Kirschten
- */
- protected void addHighLevelStateSubcomponentID(String subcomponentID, GUIComponent subcomponent)
- {
- checkHighLevelStateIDPart(subcomponentID);
- subcomponentsByHighLevelStateSubcomponentID.put(subcomponentID, subcomponent);
- }
-
- /**
- * Removes the given subcomponent ID from the set of allowed subcomponent IDs. <br>
- * Note that this method does not affect whether {@link #setSubcomponentHighLevelState(String, String, Object)
- * set}/{@link #getSubcomponentHighLevelState(String, String)} will be called.<br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about subcomponent IDs.
- *
- * @author Daniel Kirschten
- */
- protected void removeHighLevelStateSubcomponentID(String subcomponentID)
- {
- subcomponentsByHighLevelStateSubcomponentID.remove(subcomponentID);
- }
-
- /**
- * Adds the given atomic state ID to the set of allowed atomic state IDs. <br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
- *
- * @author Daniel Kirschten
- */
- protected void addAtomicHighLevelStateID(String stateID)
- {
- checkHighLevelStateIDPart(stateID);
- highLevelAtomicStates.add(stateID);
- }
-
- /**
- * Removes the given atomic state ID from the set of allowed atomic state IDs. <br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
- *
- * @author Daniel Kirschten
- */
- protected void removeAtomicHighLevelStateID(String stateID)
- {
- highLevelAtomicStates.remove(stateID);
- }
-
- @Override
- public final void setHighLevelState(String stateID, Object newState)
- {
- int indexOfDot = stateID.indexOf('.');
- if (indexOfDot == -1)
- if (highLevelAtomicStates.contains(stateID))
- setAtomicHighLevelState(stateID, newState);
- else
- super.setHighLevelState(stateID, newState);
- else
- setSubcomponentHighLevelState(stateID.substring(0, indexOfDot), stateID.substring(indexOfDot + 1), newState);
- }
-
- /**
- * This method is called in {@link #setHighLevelState(String, Object)} when the state ID is not atomic. The default implementation uses
- * the information given to {@link #addHighLevelStateSubcomponentID(String, GUIComponent)
- * add}/{@link #removeHighLevelStateSubcomponentID(String)} to decide which subcomponent to delegate to.<br>
- * Note that {@link #addHighLevelStateSubcomponentID(String, GUIComponent) add}/{@link #removeHighLevelStateSubcomponentID(String)}
- * don't affect whether this method will be called.
- *
- * @author Daniel Kirschten
- */
- protected void setSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID, Object newState)
- {
- GUIComponent subcomponent = subcomponentsByHighLevelStateSubcomponentID.get(subcomponentID);
- if (subcomponent != null)
- subcomponent.setHighLevelState(subcomponentHighLevelStateID, newState);
- else
- super.setHighLevelState(subcomponentID + "." + subcomponentHighLevelStateID, newState);
- }
-
- /**
- * This method is called in {@link #setHighLevelState(String, Object)} when the state ID is atomic and in the set of allowed atomic
- * state IDs. <br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
- *
- * @author Daniel Kirschten
- */
- @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden
- protected void setAtomicHighLevelState(String stateID, Object newState)
- {
- throw new IllegalStateException("Unknown high level state ID: " + stateID);
- }
-
- @Override
- public final Object getHighLevelState(String stateID)
- {
- int indexOfDot = stateID.indexOf('.');
- if (indexOfDot == -1)
- {
- if (highLevelAtomicStates.contains(stateID))
- return getAtomicHighLevelState(stateID);
- return super.getHighLevelState(stateID);
- }
- return getSubcomponentHighLevelState(stateID.substring(0, indexOfDot), stateID.substring(indexOfDot + 1));
- }
-
- /**
- * This method is called in {@link #getHighLevelState(String, Object)} when the state ID is not atomic. The default implementation uses
- * the information given to {@link #addHighLevelStateSubcomponentID(String, GUIComponent)
- * add}/{@link #removeHighLevelStateSubcomponentID(String)} to decide which subcomponent to delegate to. <br>
- * Note that {@link #addHighLevelStateSubcomponentID(String, GUIComponent) add}/{@link #removeHighLevelStateSubcomponentID(String)}
- * don't affect whether this method will be called.
- *
- * @author Daniel Kirschten
- */
- protected Object getSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID)
- {
- GUIComponent subcomponent = subcomponentsByHighLevelStateSubcomponentID.get(subcomponentID);
- if (subcomponent != null)
- return subcomponent.getHighLevelState(subcomponentHighLevelStateID);
- return super.getHighLevelState(subcomponentID + "." + subcomponentHighLevelStateID);
- }
-
- /**
- * This method is called in {@link SubmodelComponent#getHighLevelState(String)} when the state ID is in the set of allowed atomic state
- * IDs. <br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
- *
- * @author Daniel Kirschten
- */
- @SuppressWarnings("static-method") // this method is intended to be overridden
- protected Object getAtomicHighLevelState(String stateID)
- {
- throw new IllegalStateException("Unknown high level state ID: " + stateID);
- }
-
- private static void checkHighLevelStateIDPart(String stateIDPart)
- {
- if (stateIDPart.indexOf('.') != -1)
- throw new IllegalArgumentException("Illegal high level state ID part (contains dot): " + stateIDPart);
-
- }
-
- // "graphical" operations
-
- /**
- * Sets the factor by which the submodel is scaled when rendering and calls redrawListeners. Note that the submodel interface pins will
- * stay at their position relative to the supermodel, which means they will move relative to the submodel.
- *
- * @author Daniel Kirschten
- */
- protected void setSubmodelScale(double submodelScale)
- {
- this.submodelScale = submodelScale;
-
- for (Entry<String, MovablePin> e : supermodelPins.entrySet())
- getSubmodelMovablePin(e.getKey()).setRelPos(e.getValue().getRelX() * submodelScale, e.getValue().getRelY() * submodelScale);
-
- requestRedraw();// needed if there is no submodel interface pin
- }
-
- /**
- * Returns the current factor by which the submodel is scaled when rendering.
- *
- * @author Daniel Kirschten
- */
- protected double getSubmodelScale()
- {
- return submodelScale;
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- GCConfig conf = new GCConfig(gc);
- TranslatedGC tgc = new TranslatedGC(gc, getPosX(), getPosY(), submodelScale, true);
- conf.reset(tgc);
- double visibleRegionFillRatio = Math.max(getWidth() / visibleRegion.width, getHeight() / visibleRegion.height);
- double alphaFactor = map(visibleRegionFillRatio, maxVisibleRegionFillRatioForAlpha0, minVisibleRegionFillRatioForAlpha1, 0, 1);
- alphaFactor = Math.max(0, Math.min(1, alphaFactor));
- // we need to take the old alpha into account to support nested submodules better.
- int oldAlpha = gc.getAlpha();
- int submodelAlpha = Math.max(0, Math.min(255, (int) (oldAlpha * alphaFactor)));
- int labelAlpha = Math.max(0, Math.min(255, (int) (oldAlpha * (1 - alphaFactor))));
- if (submodelAlpha != 0)
- {
- gc.setAlpha(submodelAlpha);
- renderer.render(tgc, visibleRegion.translate(getPosX() / submodelScale, getPosY() / submodelScale, 1 / submodelScale));
- }
- if (labelAlpha != 0)
- {
- gc.setAlpha(labelAlpha);
- renderSymbol(gc, visibleRegion);
- }
- conf.reset(gc);
- // draw the outline after all other operations to make interface pins look better
- renderOutline(gc, visibleRegion);
- }
-
- // TODO make this a path
- /**
- * Render the outline of this {@link SubmodelComponent}, e.g. the graphical elements that should stay visible if the submodel is drawn.
- *
- * @author Daniel Kirschten
- */
- protected abstract void renderOutline(GeneralGC gc, Rectangle visibleRegion);
-
- /**
- * Render the symbol of this {@link SubmodelComponent}, e.g. the things that should be hidden if the submodel is drawn.
- *
- * @author Daniel Kirschten
- */
- protected abstract void renderSymbol(GeneralGC gc, Rectangle visibleRegion);
-
- private static double map(double val, double valMin, double valMax, double mapMin, double mapMax)
- {
- return mapMin + (val - valMin) * (mapMax - mapMin) / (valMax - valMin);
- }
-
- @Override
- public boolean clicked(double x, double y)
- {
- double scaledX = (x - getPosX()) / submodelScale;
- double scaledY = (y - getPosY()) / submodelScale;
- for (GUIComponent component : submodel.getComponents())
- if (component.getBounds().contains(scaledX, scaledY) && component.clicked(scaledX, scaledY))
- return true;
- return false;
- }
-
- // serializing
-
- // TODO move the methods below to serializing classes
-
- public SubmodelComponentParams calculateParams()
- {
- return calculateParams(c -> "class:" + c.getClass().getCanonicalName());
- }
-
- /**
- * @return {@link SubmodelComponentParams}, which describe this {@link SubmodelComponent}.
- */
- public SubmodelComponentParams calculateParams(Function<GUIComponent, String> getIdentifier)
- {
- SubmodelComponentParams params = new SubmodelComponentParams();
- params.submodel = calculateSubmodelParams(getIdentifier);
-
- params.width = getWidth();
- params.height = getHeight();
-
- InterfacePinParams[] iPins = new InterfacePinParams[getPins().size()];
- int i = 0;
- for (Pin p : getPins().values())
- {
- InterfacePinParams iPinParams = new InterfacePinParams();
- iPins[i] = iPinParams;
- iPinParams.location = p.getRelPos();
- iPinParams.name = p.name;
- iPinParams.logicWidth = p.logicWidth;
- i++;
- }
- params.interfacePins = iPins;
- return params;
- }
-
- private SubmodelParameters calculateSubmodelParams(Function<GUIComponent, String> getIdentifier)
- {
- SubmodelParameters params = new SubmodelParameters();
- params.innerScale = getSubmodelScale();
-
- List<GUIComponent> compList = submodel.getComponents();
- Iterator<GUIComponent> componentIt = compList.iterator();
- componentIt.next(); // Skip inner SubmodelInterface
- InnerComponentParams[] comps = new InnerComponentParams[compList.size() - 1];
- int i = 0;
- while (componentIt.hasNext())
- {
- GUIComponent component = componentIt.next();
- InnerComponentParams inner = new InnerComponentParams();
- comps[i] = inner;
- inner.pos = new Point(component.getPosX(), component.getPosY());
- inner.id = getIdentifier.apply(component);
- inner.params = component.getParams();
- i++;
- }
- params.subComps = comps;
-
- List<GUIWire> wireList = submodel.getWires();
- InnerWireParams wires[] = new InnerWireParams[wireList.size()];
- i = 0;
- for (GUIWire wire : wireList)
- {
- InnerWireParams inner = new InnerWireParams();
- wires[i] = inner;
- InnerPinParams pin1Params = new InnerPinParams(), pin2Params = new InnerPinParams();
-
- pin1Params.pinName = wire.getPin1().name;
- pin1Params.compId = compList.indexOf(wire.getPin1().component);
- pin2Params.pinName = wire.getPin2().name;
- pin2Params.compId = compList.indexOf(wire.getPin2().component);
- inner.pin1 = pin1Params;
- inner.pin2 = pin2Params;
- inner.path = wire.getPath();
- i++;
- }
- params.innerWires = wires;
- return params;
- }
-
- // operations no longer supported
-
- @Override
- protected void addPin(Pin pin)
- {
- throw new UnsupportedOperationException("Can't add pins to a SubmodelComponent directly, call addSubmodelInterface instead");
- }
-
- @Override
- protected void removePin(String name)
- {
- throw new UnsupportedOperationException("Can't remove pins of a SubmodelComponent directly, call removeSubmodelInterface instead");
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.components.submodels;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-
-public class SubmodelInterface extends GUIComponent
-{
- public SubmodelInterface(ViewModelModifiable model)
- {
- super(model);
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {// nothing to do here
- }
-
- /**
- * {@inheritDoc}<br>
- * This method is only marked public in {@link SubmodelInterface} for {@link SubmodelComponent} to be able to add / remove pins to /
- * from a SubmodelInterface.<br>
- *
- * @see GUIComponent#removePin(Pin)
- *
- * @author Daniel Kirschten
- */
- @Override
- public void addPin(Pin pin)
- {
- super.addPin(pin);
- }
-
- /**
- * {@inheritDoc}<br>
- * This method is only marked public in {@link SubmodelInterface} for {@link SubmodelComponent} to be able to add / remove pins to /
- * from a SubmodelInterface.<br>
- *
- * @see GUIComponent#removePin(Pin)
- *
- * @author Daniel Kirschten
- */
- @Override
- protected void removePin(String name)
- {
- super.removePin(name);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.wires;
-
-public interface ConnectionPoint
-{
- /**
- * Retrieves the {@link Pin}, that is used by the {@link GUIWire} to connect to.
- *
- * @return the {@link Pin} for the wire to connect to.
- *
- * @author Christian Femers
- */
- Pin getPin();
-}
+++ /dev/null
-package net.mograsim.logic.ui.model.wires;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.swt.SWT;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.core.LogicObserver;
-import net.mograsim.logic.core.types.BitVector;
-import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-
-/**
- * A wire connecting exactly two {@link Pin}s.
- *
- * @author Daniel Kirschten
- */
-public class GUIWire
-{
-
- private final Set<PathChangedListener> pathChangedListeners;
-
- /**
- * The model this wire is a part of.
- */
- private final ViewModelModifiable model;
- /**
- * The logical width of this wire. Is equal to the logical with of {@link #pin1} and {@link #pin2}.
- */
- public final int logicWidth;
- /**
- * The {@link Pin} on one side of this wire, usually the signal source.
- */
- private Pin pin1;
- /**
- * The {@link Pin} on one side of this wire, usually the signal target.
- */
- private Pin pin2;
- /**
- * The user-defined path between {@link #pin1} and {@link #pin2}.<br>
- * Special cases: <code>null</code> means "choose an interpolation as fits", and an empty array means "direct connection without any
- * interpolation".
- */
- private Point[] path;
- /**
- * The bounds of this wire, excluding line width (and line joins, if the line join is {@link SWT#JOIN_MITER})
- */
- private final Rectangle bounds;
- /**
- * The effective path of this wire, including automatic interpolation and the position of both {@link Pin}s. Is never null.
- */
- protected double[] effectivePath;
-
- private final List<Runnable> redrawListeners;
-
- /**
- * A LogicObserver calling redrawListeners. Used for logic model bindings.
- */
- private final LogicObserver logicObs;
- /**
- * A ReadEnd of the logic wire this GUI wire currently is bound to.
- */
- private ReadEnd end;
-
- // creation and destruction
-
- /**
- * Creates a new {@link GUIWire} with automatic interpolation.
- *
- * @author Daniel Kirschten
- */
- public GUIWire(ViewModelModifiable model, ConnectionPoint pin1, ConnectionPoint pin2)
- {
- this(model, pin1, pin2, (Point[]) null);
- }
-
- /**
- * Creates a new {@link GUIWire} without automatic interpolation.
- *
- * @author Daniel Kirschten
- */
- public GUIWire(ViewModelModifiable model, ConnectionPoint pin1, ConnectionPoint pin2, Point... path)
- {
- this(model, pin1.getPin(), pin2.getPin(), path);
- }
-
- /**
- * Creates a new {@link GUIWire} without automatic interpolation.
- *
- * @author Daniel Kirschten
- */
- GUIWire(ViewModelModifiable model, Pin pin1, Pin pin2, Point... path)
- {
- pathChangedListeners = new HashSet<>();
- logicObs = (i) -> callRedrawListeners();
- this.model = model;
- this.logicWidth = pin1.logicWidth;
- if (pin2.logicWidth != pin1.logicWidth)
- throw new IllegalArgumentException("Can't connect pins of different logic width");
-
- this.pin1 = pin1;
- this.pin2 = pin2;
-
- this.path = path == null ? null : Arrays.copyOf(path, path.length);
- this.bounds = new Rectangle(0, 0, -1, -1);
-
- redrawListeners = new ArrayList<>();
-
- pin1.addPinMovedListener(p -> pinMoved());
- pin2.addPinMovedListener(p -> pinMoved());
-
- recalculateEffectivePath();
-
- model.wireCreated(this);
- }
-
- /**
- * Destroys this wire. This method implicitly calls {@link ViewModelModifiable#wireDestroyed(GUIWire) wireDestroyed()} for the model
- * this component is a part of.
- *
- * @author Daniel Kirschten
- */
- public void destroy()
- {
- model.wireDestroyed(this);
- }
-
- // pins
-
- /**
- * Returns the {@link Pin} on one side of this wire, usually the signal source.
- *
- * @author Daniel Kirschten
- */
- public Pin getPin1()
- {
- return pin1;
- }
-
- /**
- * Returns the {@link Pin} on one side of this wire, usually the signal target.
- *
- * @author Daniel Kirschten
- */
- public Pin getPin2()
- {
- return pin2;
- }
-
- /**
- * Called when {@link #pin1} or {@link #pin2} were moved.
- *
- * @author Daniel Kirschten
- */
- private void pinMoved()
- {
- recalculateEffectivePath();
- callRedrawListeners();
- }
-
- // "graphical" operations
-
- /**
- * Recalculates {@link #effectivePath} "from scratch". Also updates {@link #bounds}.
- *
- * @author Daniel Kirschten
- */
- private void recalculateEffectivePath()
- {
- Point pos1 = pin1.getPos(), pos2 = pin2.getPos();
-
- double boundsX1 = Math.min(pos1.x, pos2.x);
- double boundsY1 = Math.min(pos1.y, pos2.y);
- double boundsX2 = Math.max(pos1.x, pos2.x);
- double boundsY2 = Math.max(pos1.y, pos2.y);
-
- if (path == null)
- effectivePath = new double[] { pos1.x, pos1.y, (pos1.x + pos2.x) / 2, pos1.y, (pos1.x + pos2.x) / 2, pos2.y, pos2.x, pos2.y };
- else
- {
- effectivePath = new double[path.length * 2 + 4];
- effectivePath[0] = pos1.x;
- effectivePath[1] = pos1.y;
- for (int srcI = 0, dstI = 2; srcI < path.length; srcI++, dstI += 2)
- {
- double pathX = path[srcI].x;
- double pathY = path[srcI].y;
- effectivePath[dstI + 0] = pathX;
- effectivePath[dstI + 1] = pathY;
- if (pathX < boundsX1)
- boundsX1 = pathX;
- if (pathX > boundsX2)
- boundsX2 = pathX;
- if (pathY < boundsY1)
- boundsY1 = pathY;
- if (pathY > boundsY2)
- boundsY2 = pathY;
- }
- effectivePath[effectivePath.length - 2] = pos2.x;
- effectivePath[effectivePath.length - 1] = pos2.y;
- }
-
- bounds.x = boundsX1;
- bounds.y = boundsY1;
- bounds.width = boundsX2 - boundsX1;
- bounds.height = boundsY2 - boundsY1;
- }
-
- /**
- * Returns the bounds of this wire, excluding line width (and line joins, if the line join is {@link SWT#JOIN_MITER})
- *
- * @author Daniel Kirschten
- */
- public Rectangle getBounds()
- {
- return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);
- }
-
- /**
- * Render this wire to the given gc, in absoulute coordinates.
- *
- * @author Daniel Kirschten
- */
- public void render(GeneralGC gc)
- {
- ColorDefinition wireColor = BitVectorFormatter.formatAsColor(end);
- if (wireColor != null)
- gc.setForeground(ColorManager.current().toColor(wireColor));
- gc.drawPolyline(effectivePath);
- }
-
- /**
- * The user-defined path between {@link #pin1} and {@link #pin2}. Note that this is not neccessarily equal to the effective path drawn
- * in {@link #render(GeneralGC)}.<br>
- * Special cases: <code>null</code> means "choose an interpolation as fits", and an empty array means "direct connection without any
- * interpolation".
- *
- * @author Daniel Kirschten
- */
- public Point[] getPath()
- {
- return path == null ? null : path.clone();
- }
-
- // logic model binding
-
- /**
- * Binds this {@link GUIWire} to the given {@link ReadEnd}: The color of this {@link GUIWire} will now depend on the state of the given
- * {@link ReadEnd}, and further changes of the given {@link ReadEnd} will result in readrawListeners being called.<br>
- * The argument can be null, in which case the old binding is stopped.
- *
- * @author Daniel Kirschten
- */
- public void setLogicModelBinding(ReadEnd end)
- {
- if (this.end != null)
- this.end.deregisterObserver(logicObs);
- this.end = end;
- if (end != null)
- end.registerObserver(logicObs);
- }
-
- /**
- * Returns whether this {@link GUIWire} has a logic model binding or not.
- *
- * @author Daniel Kirschten
- */
- public boolean hasLogicModelBinding()
- {
- return end != null;
- }
-
- /**
- * If this {@link GUIWire} has a logic model binding, delegates to {@link Wire#forceValues(BitVector)} for the {@link Wire}
- * corresponding to this {@link GUIWire}.
- *
- * @author Daniel Kirschten
- */
- public void forceWireValues(BitVector values)
- {
- end.getWire().forceValues(values);
- }
-
- /**
- * If this {@link GUIWire} has a logic model binding, delegates to {@link ReadEnd#getValues()} for the {@link ReadEnd} corresponding to
- * this {@link GUIWire}.
- *
- * @author Daniel Kirschten
- */
- public BitVector getWireValues()
- {
- return end.getValues();
- }
-
- // listeners
-
- // @formatter:off
- public void addRedrawListener (Runnable listener) {redrawListeners .add (listener);}
-
- public void removeRedrawListener(Runnable listener) {redrawListeners .remove(listener);}
-
- private void callRedrawListeners() {redrawListeners.forEach(l -> l.run());}
-
- public void addPathChangedListener(PathChangedListener l) { pathChangedListeners.add(l); }
-
- public void removePathChangedListener(PathChangedListener l) { pathChangedListeners.remove(l); }
-
- public void callPathChangedListeners(int diff) { pathChangedListeners.forEach(l -> l.pathChanged(this, diff)); }
-
- @FunctionalInterface
- public static interface PathChangedListener
- {
- /**
- * Called whenever the {@link Wire}'s path changes
- *
- * @param wire The wire which had its path changed
- * @param diff The length difference between before and after the path change.
- */
- public void pathChanged(GUIWire wire, int diff);
- }
- // @formatter:on
-
- @Override
- public String toString()
- {
- return "GUIWire [" + pin1 + "---" + pin2 + ", value=" + (end == null ? "null" : end.getValues()) + "]";
- }
-
- public void setPath(Point[] path)
- {
- int diff = (path == null ? 0 : path.length) - (this.path == null ? 0 : this.path.length);
- this.path = path == null ? null : path.clone();
- recalculateEffectivePath();
- callPathChangedListeners(diff);
- callRedrawListeners();
- }
-
- public void setPathPoint(Point p, int index)
- {
- path[index] = p;
- recalculateEffectivePath();
- callPathChangedListeners(0);
- callRedrawListeners();
- }
-
- public void insertPathPoint(Point p, int index)
- {
- Point[] path = getPath();
- if (path == null)
- setPath(new Point[] { p });
- else
- {
- Point[] newPath = new Point[path.length + 1];
- System.arraycopy(path, 0, newPath, 0, index);
- if (index < path.length)
- System.arraycopy(path, index, newPath, index + 1, path.length - index);
- newPath[index] = p;
- setPath(newPath);
- }
- }
-
- public void removePathPoint(int index)
- {
- Point[] path = getPath();
- Point[] newPath = new Point[path.length - 1];
- System.arraycopy(path, 0, newPath, 0, index);
- if (index < path.length - 1)
- System.arraycopy(path, index + 1, newPath, index, path.length - index - 1);
- setPath(newPath);
- }
-
- /**
- * @throws IndexOutOfBoundsException
- */
- public Point getPathPoint(int index)
- {
- return path[index];
- }
-
- public int getPathLength()
- {
- return path.length;
- }
-
- public double[] getEffectivePath()
- {
- return effectivePath.clone();
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.wires;
-
-import net.mograsim.logic.ui.model.components.GUIComponent;
-
-/**
- * Exactly like {@link Pin}, but {@link #setRelPos(double, double) setRelPos(...)} is public.
- *
- * @author Daniel Kirschten
- */
-public class MovablePin extends Pin
-{
- public MovablePin(GUIComponent component, String name, int logicWidth, double relX, double relY)
- {
- super(component, name, logicWidth, relX, relY);
- }
-
- @Override
- public void setRelPos(double relX, double relY)
- {
- super.setRelPos(relX, relY);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.wires;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Consumer;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-
-/**
- * A connection interface between a GUIComponent and the rest of a ViewModel. Pins usually are created by {@link GUIComponent}s themselves.
- * <br>
- * A pin has a name identifying it. Pin names are unique for a {@link GUIComponent}: Every pin of a {@link GUIComponent} has a different
- * name, but different {@link GUIComponent}s can have pins with the same name.
- *
- * @author Daniel Kirschten
- */
-public class Pin implements ConnectionPoint
-{
- /**
- * The {@link GUIComponent} this pin belongs to
- */
- public final GUIComponent component;
- /**
- * The name identifying this pin. Is unique for a {@link GUIComponent}.
- */
- public final String name;
- /**
- * The logical width of this pin. Denotes how many bits this pin consists of.
- */
- public final int logicWidth;
-
- /**
- * The X position of this pin, relative to its component's location.
- */
- protected double relX;
- /**
- * The Y position of this pin, relative to its component's location.
- */
- protected double relY;
-
- private final List<Consumer<? super Pin>> pinMovedListeners;
- private final List<Runnable> redrawListeners;
-
- // creation and destruction
-
- /**
- * Creates a new pin. Usually it is not needed to call this constructor manually, as {@link GUIComponent}s create their pins themselves.
- *
- * @author Daniel Kirschten
- */
- public Pin(GUIComponent component, String name, int logicWidth, double relX, double relY)
- {
- this.component = component;
- this.name = name;
- this.logicWidth = logicWidth;
- this.relX = relX;
- this.relY = relY;
-
- this.pinMovedListeners = new ArrayList<>();
- this.redrawListeners = new ArrayList<>();
-
- component.addComponentMovedListener(c -> callPinMovedListeners());
- }
-
- // "graphical" operations
-
- /**
- * Returns the X position of this pin relative to the position of its component.
- *
- * @author Daniel Kirschten
- */
- public double getRelX()
- {
- return relX;
- }
-
- /**
- * Returns the Y position of this pin relative to the position of its component.
- *
- * @author Daniel Kirschten
- */
- public double getRelY()
- {
- return relY;
- }
-
- /**
- * Returns the position of this pin relative to the position of its component.
- *
- * @author Daniel Kirschten
- */
- public Point getRelPos()
- {
- return new Point(relX, relY);
- }
-
- /**
- * Returns the absolute position of this pin.
- *
- * @author Daniel Kirschten
- */
- public Point getPos()
- {
- return new Point(relX + component.getPosX(), relY + component.getPosY());
- }
-
- /**
- * Sets the position of this pin relative to the position of its component.
- *
- * @author Daniel Kirschten
- */
- protected void setRelPos(double relX, double relY)
- {
- this.relX = relX;
- this.relY = relY;
- callPinMovedListeners();
- callRedrawListeners();
- }
-
- // listeners
-
- // @formatter:off
- public void addPinMovedListener (Consumer<? super Pin> listener){pinMovedListeners.add (listener);}
- public void addRedrawListener (Runnable listener){redrawListeners .add (listener);}
-
- public void removePinMovedListener(Consumer<? super Pin> listener){pinMovedListeners.remove(listener);}
- public void removeRedrawListener (Runnable listener){redrawListeners .remove(listener);}
-
- private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));}
- private void callRedrawListeners () {redrawListeners .forEach(l -> l.run ( ));}
- // @formatter:on
-
- @Override
- public String toString()
- {
- return "Pin [" + name + ", point=" + getPos() + "]";
- }
-
- @Override
- public Pin getPin()
- {
- return this;
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.model.wires;
-
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.core.LogicObserver;
-import net.mograsim.logic.core.types.BitVectorFormatter;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-
-/**
- * A {@link GUIComponent} with only one pin. Is used to create wires connecting more than two pins. <br>
- * Example: There are three pins <code>P1</code>, <code>P2</code>, <code>P3</code> that need to be connected. Solution: Create a
- * WireCrossPoint (<code>WCP</code>) and create the GUIWires <code>P1</code>-<code>WCP</code>, <code>P2</code>-<code>WCP</code>,
- * <code>P3</code>-<code>WCP</code>.<br>
- * Cross points are drawn as circles. The pin of cross points is in the center of this circle.
- *
- * @author Daniel Kirschten
- */
-public class WireCrossPoint extends GUIComponent implements ConnectionPoint
-{
- private static final int CIRCLE_RADIUS = 1;
- private static final int CIRCLE_DIAM = CIRCLE_RADIUS * 2;
-
- /**
- * The (single) pin of this cross point.
- */
- private final Pin pin;
-
- /**
- * A {@link LogicObserver} calling {@link #requestRedraw()}.
- */
- private final LogicObserver logicObs;
- /**
- * The {@link ReadEnd} currently bound to this cross point.
- */
- private ReadEnd end;
-
- // creation and destruction
-
- public WireCrossPoint(ViewModelModifiable model, int logicWidth)
- {
- super(model);
- logicObs = (i) -> requestRedraw();
-
- setSize(CIRCLE_DIAM, CIRCLE_DIAM);
- addPin(this.pin = new Pin(this, "", logicWidth, CIRCLE_RADIUS, CIRCLE_RADIUS));
- }
-
- // pins
-
- @Override
- public Pin getPin()
- {
- return pin;
- }
-
- // "graphical" operations
-
- /**
- * Moves the center (and therefore the pin) of this {@link WireCrossPoint} to the given location.
- *
- * @author Daniel Kirschten
- */
- public void moveCenterTo(double x, double y)
- {
- moveTo(x - CIRCLE_RADIUS, y - CIRCLE_RADIUS);
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- ColorDefinition wireColor = BitVectorFormatter.formatAsColor(end);
- if (wireColor != null)
- gc.setBackground(ColorManager.current().toColor(wireColor));
- gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM);
- }
-
- // logic model binding
-
- /**
- * Binds this {@link WireCrossPoint} to the given {@link ReadEnd}: The color of this {@link WireCrossPoint} will now depend on the state
- * of the given {@link ReadEnd}, and further changes of the given {@link ReadEnd} will result in readrawListeners being called.<br>
- * The argument can be null, in which case the old binding is stopped.
- *
- * @author Daniel Kirschten
- */
- public void setLogicModelBinding(ReadEnd end)
- {
- if (this.end != null)
- this.end.deregisterObserver(logicObs);
- this.end = end;
- if (end != null)
- end.registerObserver(logicObs);
- }
-
- /**
- * Returns whether this {@link WireCrossPoint} has a logic model binding or not.
- */
- public boolean hasLogicModelBinding()
- {
- return end != null;
- }
-
- // serializing
-
- @Override
- public JsonElement getParams()
- {
- return new JsonPrimitive(pin.logicWidth);
- }
-
- static
- {
- IndirectGUIComponentCreator.setComponentProvider(WireCrossPoint.class.getCanonicalName(),
- (m, p) -> new WireCrossPoint(m, p.getAsInt()));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.modeladapter;
-
-public class LogicModelParameters
-{
- public int wireTravelTime;
- public int gateProcessTime;
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.modeladapter;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelInterface;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.modeladapter.componentadapters.ComponentAdapter;
-
-public class ViewLogicModelAdapter
-{
- private final static Map<Class<? extends GUIComponent>, ComponentAdapter<? extends GUIComponent>> componentAdapters = new HashMap<>();
-
- public static void addComponentAdapter(ComponentAdapter<? extends GUIComponent> componentAdapter)
- {
- componentAdapters.put(componentAdapter.getSupportedClass(), componentAdapter);
- }
-
- public static Timeline convert(ViewModel viewModel, LogicModelParameters params)
- {
- // TODO replace Timeline with LogicModel as soon as it exists
- Timeline timeline = new Timeline(10);
-
- convert(viewModel, params, timeline, Map.of());
-
- return timeline;
- }
-
- private static void convert(ViewModel viewModel, LogicModelParameters params, Timeline timeline, Map<Pin, Wire> externalWires)
- {
- Map<Pin, Wire> logicWiresPerPin = convertWires(getAllPins(viewModel), viewModel.getWires(), externalWires, params, timeline);
- Map<Pin, Wire> logicWiresPerPinUnmodifiable = Collections.unmodifiableMap(logicWiresPerPin);
-
- for (GUIComponent guiComp : viewModel.getComponents())
- {
- if (guiComp instanceof SubmodelComponent)
- {
- SubmodelComponent guiCompCasted = (SubmodelComponent) guiComp;
- Map<String, Pin> supermodelPins = guiCompCasted.getSupermodelPins();
- Map<Pin, Wire> externalWiresForSubmodel = supermodelPins.entrySet().stream()
- .collect(Collectors.toMap(e -> guiCompCasted.getSubmodelPin(e.getKey()), e -> logicWiresPerPin.get(e.getValue())));
- convert(guiCompCasted.submodel, params, timeline, externalWiresForSubmodel);
- } else if (guiComp instanceof WireCrossPoint)
- {
- WireCrossPoint guiCompCasted = (WireCrossPoint) guiComp;
- guiCompCasted.setLogicModelBinding(logicWiresPerPin.get(guiCompCasted.getPin()).createReadOnlyEnd());
- } else if (!(guiComp instanceof SubmodelInterface))// nothing to do for SubmodelInterfaces
- createAndLinkComponent(timeline, params, guiComp, logicWiresPerPinUnmodifiable, componentAdapters.get(guiComp.getClass()));
- }
- }
-
- private static Set<Pin> getAllPins(ViewModel viewModel)
- {
- return viewModel.getComponents().stream().flatMap(component -> component.getPins().values().stream()).collect(Collectors.toSet());
- }
-
- private static Map<Pin, Wire> convertWires(Set<Pin> allPins, List<GUIWire> wires, Map<Pin, Wire> externalWires,
- LogicModelParameters params, Timeline timeline)
- {
- Map<Pin, Set<Pin>> connectedPinGroups = getConnectedPinGroups(allPins, wires);
- Map<Pin, Wire> logicWiresPerPin = createLogicWires(params, timeline, connectedPinGroups, externalWires);
- setGUIWiresLogicModelBinding(wires, logicWiresPerPin);
- return logicWiresPerPin;
- }
-
- private static Map<Pin, Wire> createLogicWires(LogicModelParameters params, Timeline timeline, Map<Pin, Set<Pin>> connectedPinGroups,
- Map<Pin, Wire> externalWires)
- {
- Map<Pin, Wire> logicWiresPerPin = new HashMap<>();
- Map<Set<Pin>, Wire> logicWiresPerPinGroup = new HashMap<>();
- for (Entry<Pin, Set<Pin>> e : connectedPinGroups.entrySet())
- logicWiresPerPin.put(e.getKey(), logicWiresPerPinGroup.computeIfAbsent(e.getValue(), set ->
- {
- Wire externalWire = null;
- for (Pin p : set)
- {
- Wire externalWireCandidate = externalWires.get(p);
- if (externalWireCandidate != null)
- if (externalWire == null)
- externalWire = externalWireCandidate;
- else if (externalWire.length == externalWireCandidate.length)
- Wire.fuse(externalWire, externalWireCandidate);
- else
- throw new IllegalArgumentException(
- "Two pins to external wires with different logicWidths can't be connected directly");
- }
- return externalWire == null ? new Wire(timeline, e.getKey().logicWidth, params.wireTravelTime) : externalWire;
- }));
- return logicWiresPerPin;
- }
-
- private static void setGUIWiresLogicModelBinding(List<GUIWire> wires, Map<Pin, Wire> logicWiresPerPin)
- {
- Map<Wire, ReadEnd> guiWireSharedReadEnd = logicWiresPerPin.values().stream().distinct()
- .collect(Collectors.toMap(Function.identity(), Wire::createReadOnlyEnd));
- for (GUIWire guiWire : wires)
- guiWire.setLogicModelBinding(guiWireSharedReadEnd.get(logicWiresPerPin.get(guiWire.getPin1())));
- }
-
- private static Map<Pin, Set<Pin>> getConnectedPinGroups(Set<Pin> allPins, List<GUIWire> wires)
- {
- Map<Pin, Set<Pin>> connectedPinsPerPin = new HashMap<>();
-
- for (Pin p : allPins)
- {
- HashSet<Pin> connectedPins = new HashSet<>();
- connectedPins.add(p);
- connectedPinsPerPin.put(p, connectedPins);
- }
-
- wires.forEach(wire ->
- {
- Pin pin1 = wire.getPin1();
- Pin pin2 = wire.getPin2();
-
- Set<Pin> pin1ConnectedPins = connectedPinsPerPin.get(pin1);
- Set<Pin> pin2ConnectedPins = connectedPinsPerPin.get(pin2);
-
- pin1ConnectedPins.addAll(pin2ConnectedPins);
- pin1ConnectedPins.add(pin1);
- pin1ConnectedPins.add(pin2);
-
- pin2ConnectedPins.forEach(pin -> connectedPinsPerPin.put(pin, pin1ConnectedPins));
- });
- return connectedPinsPerPin;
- }
-
- @SuppressWarnings("unchecked")
- private static <G extends GUIComponent> void createAndLinkComponent(Timeline timeline, LogicModelParameters params,
- GUIComponent guiComponent, Map<Pin, Wire> logicWiresPerPin, ComponentAdapter<G> adapter)
- {
- if (adapter == null)
- throw new IllegalArgumentException("Unknown component class: " + guiComponent.getClass());
- adapter.createAndLinkComponent(timeline, params, (G) guiComponent, logicWiresPerPin);
- }
-
- private ViewLogicModelAdapter()
- {
- throw new UnsupportedOperationException("No ViewLogicModelConverter instances");
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.modeladapter.componentadapters;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.components.BitDisplay;
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-
-public class BitDisplayAdapter implements ComponentAdapter<GUIBitDisplay>
-{
- @Override
- public Class<GUIBitDisplay> getSupportedClass()
- {
- return GUIBitDisplay.class;
- }
-
- @Override
- public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIBitDisplay guiComponent,
- Map<Pin, Wire> logicWiresPerPin)
- {
- ReadEnd end = logicWiresPerPin.get(guiComponent.getInputPin()).createReadOnlyEnd();
- BitDisplay bitDisplay = new BitDisplay(timeline, end);
- guiComponent.setLogicModelBinding(bitDisplay);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.modeladapter.componentadapters;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-
-public interface ComponentAdapter<G extends GUIComponent>
-{
- public Class<G> getSupportedClass();
-
- public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map<Pin, Wire> logicWiresPerPin);
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.modeladapter.componentadapters;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.components.ManualSwitch;
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-
-public class ManualSwitchAdapter implements ComponentAdapter<GUIManualSwitch>
-{
- @Override
- public Class<GUIManualSwitch> getSupportedClass()
- {
- return GUIManualSwitch.class;
- }
-
- @Override
- public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, GUIManualSwitch guiComponent,
- Map<Pin, Wire> logicWiresPerPin)
- {
- ReadWriteEnd end = logicWiresPerPin.get(guiComponent.getOutputPin()).createReadWriteEnd();
- ManualSwitch manualSwitch = new ManualSwitch(timeline, end);
- guiComponent.setLogicModelBinding(manualSwitch, end);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.modeladapter.componentadapters;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-
-/**
- * For GUIComponents that do not have any simulation logic behaviour
- *
- * @author Christian Femers
- */
-public class NoLogicAdapter<T extends GUIComponent> implements ComponentAdapter<T>
-{
- private final Class<T> guiComponentClass;
-
- public NoLogicAdapter(Class<T> guiComponentClass)
- {
- this.guiComponentClass = guiComponentClass;
- }
-
- @Override
- public Class<T> getSupportedClass()
- {
- return guiComponentClass;
- }
-
- @Override
- public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, T guiComponent, Map<Pin, Wire> logicWiresPerPin)
- {
- // do nothing
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.modeladapter.componentadapters;
-
-import java.util.Map;
-
-import net.mograsim.logic.core.components.Component;
-import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.core.wires.Wire;
-import net.mograsim.logic.core.wires.Wire.ReadEnd;
-import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
-import net.mograsim.logic.ui.model.components.atomic.SimpleRectangularGUIGate;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-
-public class SimpleGateAdapter<G extends SimpleRectangularGUIGate> implements ComponentAdapter<G>
-{
- private final Class<G> supportedClass;
- private final ComponentConstructor constructor;
-
- public SimpleGateAdapter(Class<G> supportedClass, ComponentConstructor constructor)
- {
- this.supportedClass = supportedClass;
- this.constructor = constructor;
- }
-
- @Override
- public Class<G> getSupportedClass()
- {
- return supportedClass;
- }
-
- @Override
- public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, G guiComponent, Map<Pin, Wire> logicWiresPerPin)
- {
- ReadWriteEnd out = logicWiresPerPin.get(guiComponent.getPin("Y")).createReadWriteEnd();
-
- // TODO can we do this prettier?
- int inputPinCount = guiComponent.getPins().size() - 1;
- ReadEnd[] ins = new ReadEnd[inputPinCount];
- for (int i = 0; i < inputPinCount; i++)
- ins[i] = logicWiresPerPin.get(guiComponent.getPin(String.valueOf((char) ('A' + i)))).createReadOnlyEnd();
-
- constructor.newComponent(timeline, params.gateProcessTime, out, ins);
- }
-
- public static interface ComponentConstructor
- {
- public Component newComponent(Timeline timeline, int processTime, ReadWriteEnd out, ReadEnd[] ins);
- }
-
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.serializing;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.outlinerenderers.DefaultOutlineRenderer;
-import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.DefaultSymbolRenderer;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-public class CodeSnippetSupplier<S>
-{
- // public static members
- public static final CodeSnippetSupplier<Renderer> symbolRendererProviderSupplier;
- public static final CodeSnippetSupplier<Renderer> outlineRendererProviderSupplier;
-
- static
- {
- symbolRendererProviderSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new));
- outlineRendererProviderSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new));
- }
-
- // per-instance members
-
- private final Map<String, String> standardSnippetIDClassNames = new HashMap<>();
- private final Map<String, SnippetSupplier<?, S>> snippetProvidersForClassNames = new HashMap<>();
- private final SnippetSupplier<?, S> defaultSnippetProvider;
-
- private CodeSnippetSupplier(SnippetSupplier<?, S> defaultSnippetProvider)
- {
- this.defaultSnippetProvider = defaultSnippetProvider;
- }
-
- public void addStandardSnippetID(String standardSnippetID, String associatedSnippetClassName)
- {
- standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName);
- }
-
- public void setSnippetProvider(String id, SnippetSupplier<?, S> snippetProvider)
- {
- snippetProvidersForClassNames.put(id, snippetProvider);
- }
-
- // TODO report errors
- public SnippetSupplier<?, S> getSnippetProvider(String id)
- {
- if (id != null)
- {
- String snippetProviderClassName;
- if (id.startsWith("class:"))
- snippetProviderClassName = id.substring(6);
- else
- snippetProviderClassName = standardSnippetIDClassNames.get(id);
- if (snippetProviderClassName != null)
- {
- tryLoadSnippetClass(snippetProviderClassName);
- SnippetSupplier<?, S> snippetProvider = snippetProvidersForClassNames.get(snippetProviderClassName);
- if (snippetProvider != null)
- return snippetProvider;
- }
- }
- System.err.println("Couldn't load snippet " + id + "; using default");
- return defaultSnippetProvider;
- }
-
- // static helpers
-
- static
- {
- try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardSnippetIDMapping.json"))
- {
- if (s == null)
- throw new IOException("Resource not found");
- SnippetIDClassNames tmp = JsonHandler.readJson(s, SnippetIDClassNames.class);
- tmp.standardOutlineRendererProviders.forEach(outlineRendererProviderSupplier::addStandardSnippetID);
- tmp.standardSymbolRendererProviders.forEach(symbolRendererProviderSupplier::addStandardSnippetID);
- }
- catch (Exception e)
- {
- System.err.println("Failed to initialize standard snippet ID mapping: ");
- e.printStackTrace();
- }
- }
-
- private static class SnippetIDClassNames
- {
- public Map<String, String> standardOutlineRendererProviders;
- public Map<String, String> standardSymbolRendererProviders;
- }
-
- private static void tryLoadSnippetClass(String snippetClassName)
- {
- tryInvokeStaticInitializer(snippetClassName, "Error getting snippet class: %s: %s\n");
- }
-
- public static void tryInvokeStaticInitializer(String className, String errorMessageFormat)
- {
- try
- {
- Class.forName(className, true, CodeSnippetSupplier.class.getClassLoader());
- }
- catch (ClassNotFoundException e)
- {
- System.err.printf(errorMessageFormat, className, "ClassNotFoundException thrown: " + e.getMessage());
- }
- }
-
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.serializing;
-
-import java.util.Map;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-
-public class DeserializedSubmodelComponent extends SubmodelComponent
-{
- public Renderer outlineRenderer;
- public Renderer symbolRenderer;
-
- public DeserializedSubmodelComponent(ViewModelModifiable model)
- {
- super(model);
- }
-
- @Override
- protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
- {
- if (outlineRenderer != null)
- outlineRenderer.render(gc, visibleRegion);
- }
-
- @Override
- protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
- {
- if (symbolRenderer != null)
- symbolRenderer.render(gc, visibleRegion);
- }
-
- public void setOutlineRenderer(Renderer outlineRenderer)
- {
- this.outlineRenderer = outlineRenderer;
- }
-
- public void setSymbolRenderer(Renderer symbolRenderer)
- {
- this.symbolRenderer = symbolRenderer;
- }
-
- public ViewModelModifiable getSubmodelModifiable()
- {
- return submodelModifiable;
- }
-
- @Override
- public void setSubmodelScale(double submodelScale)
- {
- super.setSubmodelScale(submodelScale);
- }
-
- @Override
- public double getSubmodelScale()
- {
- return super.getSubmodelScale();
- }
-
- @Override
- public Map<String, MovablePin> getSubmodelMovablePins()
- {
- return super.getSubmodelMovablePins();
- }
-
- @Override
- public void setSize(double width, double height)
- {
- super.setSize(width, height);
- }
-
- @Override
- public Pin addSubmodelInterface(MovablePin supermodelPin)
- {
- return super.addSubmodelInterface(supermodelPin);
- }
-
- @Override
- public void removeSubmodelInterface(String name)
- {
- super.removeSubmodelInterface(name);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.serializing;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.google.gson.JsonElement;
-
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-public class IndirectGUIComponentCreator
-{
- private static final Map<String, String> standardComponentIDs = new HashMap<>();
-
- private static final Map<String, ComponentProvider> componentProviders = new HashMap<>();
-
- static
- {
- try (InputStream s = IndirectGUIComponentCreator.class.getResourceAsStream("./standardComponentIDMapping.json"))
- {
- if (s == null)
- throw new IOException("Resource not found");
- Map<String, String> tmp = JsonHandler.readJson(s, Map.class);
- // don't use putAll to apply sanity checks
- tmp.forEach((st, id) ->
- {
- try
- {
- addStandardComponentID(st, id);
- }
- catch (IllegalArgumentException e)
- {
- System.err.println("Component ID mapping contained illegal entry: " + e.getMessage());
- }
- });
- }
- catch (IOException e)
- {
- System.err.println("Failed to initialize standard snippet ID mapping: " + e.getMessage());
- }
- }
-
- public static Collection<String> getStandardComponentIDs()
- {
- return standardComponentIDs.keySet();
- }
-
- public static void addStandardComponentID(String standardComponentID, String associatedComponentID)
- {
- if (!associatedComponentID.startsWith("file:") && !associatedComponentID.startsWith("class:"))
- throw new IllegalArgumentException("Unrecognized component ID format: " + associatedComponentID);
- standardComponentIDs.put(standardComponentID, associatedComponentID);
- }
-
- public static void setComponentProvider(String className, ComponentProvider componentProvider)
- {
- componentProviders.put(className, componentProvider);
- }
-
- public static GUIComponent createComponent(ViewModelModifiable model, String id, JsonElement params)
- {
- if (id != null)
- {
- String resolvedID;
- if (id.startsWith("class:") || id.startsWith("file:"))
- resolvedID = id;
- else
- resolvedID = standardComponentIDs.get(id);
- if (resolvedID.startsWith("class:"))
- {
- String className = resolvedID.substring(6);
- tryLoadComponentClass(className);
- ComponentProvider componentProvider = componentProviders.get(className);
- if (componentProvider != null)
- return componentProvider.create(model, params);
- } else
- // we know id has to start with "file:" here
- // because standardComponentIDs only contains strings starting with "class:" or "file:"
- return SubmodelComponentDeserializer.create(model, resolvedID.substring(5));
- }
- throw new RuntimeException("Could not get component provider for ID " + id);
- }
-
- private static void tryLoadComponentClass(String componentClassName)
- {
- CodeSnippetSupplier.tryInvokeStaticInitializer(componentClassName, "Error loading component class %s: %s\n");
- }
-
- public static interface ComponentProvider
- {
- public GUIComponent create(ViewModelModifiable model, JsonElement params);
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.serializing;
-
-import java.io.IOException;
-
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.MovablePin;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.InterfacePinParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters.InnerComponentParams;
-import net.mograsim.logic.ui.serializing.SubmodelComponentParams.SubmodelParameters.InnerWireParams;
-
-/**
- * Creates {@link SubmodelComponent}s from {@link SubmodelComponentParams}
- */
-public final class SubmodelComponentDeserializer
-{
- /**
- * Creates a {@link SubmodelComponent} from the {@link SubmodelComponentParams}, specified at the given path. The returned
- * SubmodelComponent can also be e.g. a {@link SimpleRectangularSubmodelComponent}, depending on what the
- * {@link SubmodelComponentParams} describe.
- *
- * @param path The path of the file describing the {@link SubmodelComponentParams}, which define the new {@link SubmodelComponent}
- * @return A new SubmodelComponent, as described in the file located at the given path
- */
- public static SubmodelComponent create(ViewModelModifiable model, String path)
- {
- try
- {
- SubmodelComponentParams params = SubmodelComponentParams.readJson(path);
- SubmodelComponent ret = create(model, params);
- return ret;
- }
- catch (IOException e)
- {
- System.err.println("Failed to construct GUICustomComponent. Parameters were not found.");
- e.printStackTrace();
- }
- return new SimpleRectangularSubmodelComponent(model, 0, "ERROR");
- }
-
- /**
- * Creates a {@link SubmodelComponent} from the specified {@link SubmodelComponentParams}. The returned SubmodelComponent can also be
- * e.g. a {@link SimpleRectangularSubmodelComponent}, depending on what the {@link SubmodelComponentParams} describe.
- *
- * @param params The parameters describing the {@link SubmodelComponent}
- *
- * @return A new SubmodelComponent, as described by the {@link SubmodelComponentParams}
- */
- public static SubmodelComponent create(ViewModelModifiable model, SubmodelComponentParams params)
- {
- DeserializedSubmodelComponent comp = createSubmodelComponent(model, params);
- initSubmodel(comp, params.submodel);
- return comp;
- }
-
- private static DeserializedSubmodelComponent createSubmodelComponent(ViewModelModifiable model, SubmodelComponentParams params)
- {
- DeserializedSubmodelComponent comp = new DeserializedSubmodelComponent(model);
- comp.setSubmodelScale(params.submodel.innerScale);
- comp.setOutlineRenderer(CodeSnippetSupplier.outlineRendererProviderSupplier.getSnippetProvider(params.outlineRendererSnippetID)
- .create(comp, params.outlineRendererParams));
- comp.setSymbolRenderer(CodeSnippetSupplier.symbolRendererProviderSupplier.getSnippetProvider(params.symbolRendererSnippetID)
- .create(comp, params.symbolRendererParams));
- // TODO high level states
- comp.setSize(params.width, params.height);
- for (InterfacePinParams iPinParams : params.interfacePins)
- comp.addSubmodelInterface(
- new MovablePin(comp, iPinParams.name, iPinParams.logicWidth, iPinParams.location.x, iPinParams.location.y));
- return comp;
- }
-
- @SuppressWarnings("unused")
- private static void initSubmodel(DeserializedSubmodelComponent comp, SubmodelParameters params)
- {
- GUIComponent[] components = new GUIComponent[params.subComps.length];
- for (int i = 0; i < components.length; i++)
- {
- InnerComponentParams cParams = params.subComps[i];
- String path = cParams.id;
- components[i] = IndirectGUIComponentCreator.createComponent(comp.getSubmodelModifiable(), cParams.id, cParams.params);
- components[i].moveTo(cParams.pos.x, cParams.pos.y);
- }
-
- for (int i = 0; i < params.innerWires.length; i++)
- {
- InnerWireParams innerWire = params.innerWires[i];
- new GUIWire(comp.getSubmodelModifiable(),
- comp.getSubmodelModifiable().getComponents().get(innerWire.pin1.compId).getPin(innerWire.pin1.pinName),
- comp.getSubmodelModifiable().getComponents().get(innerWire.pin2.compId).getPin(innerWire.pin2.pinName), innerWire.path);
- }
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.serializing;
-
-import java.io.IOException;
-
-import com.google.gson.JsonElement;
-
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.util.JsonHandler;
-
-/**
- * This class contains all the information necessary to create a new {@link SubmodelComponent}
- */
-public class SubmodelComponentParams
-{
- // basic stuff
- public double width, height;
- public InterfacePinParams[] interfacePins;
- public SubmodelParameters submodel;
-
- // functionality that needs to be expressed in Java code
- public String outlineRendererSnippetID;
- public JsonElement outlineRendererParams;
-
- public String symbolRendererSnippetID;
- public JsonElement symbolRendererParams;
-
- public static class InterfacePinParams
- {
- public Point location;
- public String name;
- public int logicWidth;
- }
-
- public static class SubmodelParameters
- {
- public double innerScale;
- public InnerComponentParams[] subComps;
- public InnerWireParams[] innerWires;
-
- public static class InnerComponentParams
- {
- public Point pos;
- public String id;
- public JsonElement params;
- }
-
- public static class InnerWireParams
- {
- public InnerPinParams pin1, pin2;
- public Point[] path;
-
- public static class InnerPinParams
- {
- public int compId;
- public String pinName;
- }
- }
- }
-
- public static SubmodelComponentParams readJson(String path) throws IOException
- {
- return JsonHandler.readJson(path, SubmodelComponentParams.class);
- }
-
- /**
- * Writes this {@link SubmodelComponentParams} object into a file in json format. The correct file extension is important! Check
- * {@link SubmodelComponentParams}.fileExtension
- */
- public void writeJson(String path)
- {
- try
- {
- JsonHandler.writeJson(this, path);
- }
- catch (IOException e)
- {
- System.err.println("Failed to write SubComponentParams to file");
- e.printStackTrace();
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.serializing.snippets;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-
-public interface Renderer
-{
- public void render(GeneralGC gc, Rectangle visibleRegion);
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.serializing.snippets;
-
-import java.util.function.BiFunction;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-
-public interface SnippetSupplier<P, S>
-{
- public Class<P> getParamClass();
-
- public S create(SubmodelComponent component, P params);
-
- public default S create(SubmodelComponent component, JsonElement params)
- {
- return create(component, new Gson().fromJson(params, getParamClass()));
- }
-
- public static <P, S> SnippetSupplier<P, S> create(Class<P> paramClass, BiFunction<SubmodelComponent, P, S> supplier)
- {
- return new SnippetSupplier<>()
- {
- @Override
- public Class<P> getParamClass()
- {
- return paramClass;
- }
-
- @Override
- public S create(SubmodelComponent component, P params)
- {
- return supplier.apply(component, params);
- }
- };
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.serializing.snippets.outlinerenderers;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-import net.mograsim.preferences.Preferences;
-
-public class DefaultOutlineRenderer implements Renderer
-{
- private final GUIComponent component;
-
- public DefaultOutlineRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params)
- {
- this.component = component;
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.foreground");
- if (fg != null)
- gc.setForeground(ColorManager.current().toColor(fg));
- gc.drawRectangle(component.getBounds());
- }
-
- static
- {
- CodeSnippetSupplier.outlineRendererProviderSupplier.setSnippetProvider(DefaultOutlineRenderer.class.getCanonicalName(),
- SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-import net.mograsim.preferences.Preferences;
-
-/**
- * Renders a text (<code>"text"</code>) with a given font height (<code>"height"</code>) in the center of the component.
- *
- * @author Daniel Kirschten
- */
-public class CenteredTextSymbolRenderer implements Renderer
-{
- private final GUIComponent component;
- private final CenteredTextParams params;
-
- public CenteredTextSymbolRenderer(SubmodelComponent component, CenteredTextParams params)
- {
- this.component = component;
- this.params = params;
-
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- Font oldFont = gc.getFont();
- gc.setFont(new Font(oldFont.getName(), params.fontHeight, oldFont.getStyle()));
- ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
- if (fg != null)
- gc.setForeground(ColorManager.current().toColor(fg));
- Point idSize = gc.textExtent(params.text);
- Rectangle bounds = component.getBounds();
- gc.drawText(params.text, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
- gc.setFont(oldFont);
- }
-
- public static class CenteredTextParams
- {
- public String text;
- public double fontHeight;
- }
-
- static
- {
- CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(CenteredTextSymbolRenderer.class.getCanonicalName(),
- SnippetSupplier.create(CenteredTextParams.class, CenteredTextSymbolRenderer::new));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.preferences.ColorDefinition;
-import net.mograsim.preferences.ColorManager;
-import net.mograsim.preferences.Preferences;
-
-public class DefaultSymbolRenderer implements Renderer
-{
- private static final String id = "<Symbol\nunknown>";
-
- private final GUIComponent component;
-
- public DefaultSymbolRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params)
- {
- this.component = component;
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text");
- if (fg != null)
- gc.setForeground(ColorManager.current().toColor(fg));
- Point idSize = gc.textExtent(id);
- Rectangle bounds = component.getBounds();
- gc.drawText(id, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true);
- }
-
- static
- {
- CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(DefaultSymbolRenderer.class.getCanonicalName(),
- SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new));
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.serializing.snippets.symbolrenderers;
-
-import java.util.Map.Entry;
-
-import org.eclipse.swt.graphics.Color;
-
-import net.haspamelodica.swt.helper.gcs.GeneralGC;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.model.wires.Pin;
-import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.preferences.Preferences;
-
-/**
- * Renders a text (<code>"centerText"</code>) with a given font height (<code>"centerTextHeight"</code>) in the center of the component and
- * draws a label for each pin with a given font height (<code>"pinLabelHeight"</code>). The labels of pins to the left of a given x
- * coordinate (<code>"horizontalComponentCenter"</code>) are drawn to the right of the respective pin; labels of pins to the right are drawn
- * left. A margin (<code>"pinLabelMargin"</code>) is applied for pin label drawing.
- *
- * @author Daniel Kirschten
- */
-public class SimpleRectangularLikeSymbolRenderer implements Renderer
-{
- private final GUIComponent component;
- private final SimpleRectangularLikeParams params;
-
- public SimpleRectangularLikeSymbolRenderer(SubmodelComponent component, SimpleRectangularLikeParams params)
- {
- this.component = component;
- this.params = params;
- }
-
- @Override
- public void render(GeneralGC gc, Rectangle visibleRegion)
- {
- double posX = component.getPosX();
- double posY = component.getPosY();
- double width = component.getWidth();
- double height = component.getHeight();
-
- Font oldFont = gc.getFont();
- gc.setFont(new Font(oldFont.getName(), params.centerTextHeight, oldFont.getStyle()));
- Point textExtent = gc.textExtent(params.centerText);
- Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");
- if (textColor != null)
- gc.setForeground(textColor);
- gc.drawText(params.centerText, posX + (width - textExtent.x) / 2, posY + (height - textExtent.y) / 2, true);
- gc.setFont(new Font(oldFont.getName(), params.pinLabelHeight, oldFont.getStyle()));
- for (Entry<String, Pin> pinEntry : component.getPins().entrySet())
- {
- String pinName = pinEntry.getKey();
- Pin pin = pinEntry.getValue();
- double pinX = pin.getRelX();
- double pinY = posY + pin.getRelY();
- textExtent = gc.textExtent(pinName);
- gc.drawText(pinName,
- posX + pinX + (pinX > params.horizontalComponentCenter ? -textExtent.x - params.pinLabelMargin : params.pinLabelMargin),
- pinY - textExtent.y / 2, true);
- }
- gc.setFont(oldFont);
- }
-
- public static class SimpleRectangularLikeParams
- {
- public String centerText;
- public double centerTextHeight;
- public double horizontalComponentCenter;
- public double pinLabelHeight;
- public double pinLabelMargin;
- }
-
- static
- {
- CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(SimpleRectangularLikeSymbolRenderer.class.getCanonicalName(),
- SnippetSupplier.create(SimpleRectangularLikeParams.class, SimpleRectangularLikeSymbolRenderer::new));
- }
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "GUIAm2901": "file:components/am2901/GUIAm2901.json",
- "GUIAm2901ALUFuncDecode": "file:components/am2901/GUIAm2901ALUFuncDecode.json",
- "GUIAm2901ALUInclDecode": "file:components/am2901/GUIAm2901ALUInclDecode.json",
- "GUIAm2901ALUInclSourceDecodeInclFunctionDecode": "file:components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json",
- "GUIAm2901ALUOneBit": "file:components/am2901/GUIAm2901ALUOneBit.json",
- "GUIAm2901DestDecode": "file:components/am2901/GUIAm2901DestDecode.json",
- "GUIAm2901QReg": "file:components/am2901/GUIAm2901QReg.json",
- "GUIAm2901SourceDecode": "file:components/am2901/GUIAm2901SourceDecode.json",
- "GUIAndGate": "class:net.mograsim.logic.ui.model.components.atomic.GUIAndGate",
- "GUINandGate": "class:net.mograsim.logic.ui.model.components.atomic.GUINandGate",
- "GUIOrGate": "class:net.mograsim.logic.ui.model.components.atomic.GUIOrGate",
- "GUI_rsLatch": "file:components/GUI_rsLatch.json",
- "GUIand": "file:components/GUIand.json",
- "GUIand41": "file:components/GUIand41.json",
- "GUIandor414": "file:components/GUIandor414.json",
- "GUIdemux2": "file:components/GUIdemux2.json",
- "GUIdff": "file:components/GUIdff.json",
- "GUIdlatch": "file:components/GUIdlatch.json",
- "GUIdlatch4": "file:components/GUIdlatch4.json",
- "GUIfulladder": "file:components/GUIfulladder.json",
- "GUIhalfadder": "file:components/GUIhalfadder.json",
- "GUImux1": "file:components/GUImux1.json",
- "GUImux1_4": "file:components/GUImux1_4.json",
- "GUInand3": "file:components/GUInand3.json",
- "GUInot4": "file:components/GUInot4.json",
- "GUIor4": "file:components/GUIor4.json",
- "GUIor_4": "file:components/GUIor_4.json",
- "GUIram2": "file:components/GUIram2.json",
- "GUIram4": "file:components/GUIram4.json",
- "GUIsel2_4": "file:components/GUIsel2_4.json",
- "GUIsel3_4": "file:components/GUIsel3_4.json",
- "GUIxor": "file:components/GUIxor.json",
- "WireCrossPoint": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint"
-}
\ No newline at end of file
+++ /dev/null
-mograsim version: 0.1.3
-{
- "standardOutlineRendererProviders": {},
- "standardSymbolRendererProviders": {
- "CenteredTextSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.CenteredTextSymbolRenderer",
- "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer"
- }
-}
\ No newline at end of file
+++ /dev/null
-package net.mograsim.logic.ui.util;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.stream.Collectors;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
-public class JsonHandler
-{
- private static Gson parser = new GsonBuilder().setPrettyPrinting().create();
-
- public static <T> T readJson(String path, Class<T> type) throws IOException
- {
- try (FileInputStream jsonStream = new FileInputStream(path))
- {
- return readJson(jsonStream, type);
- }
- }
-
- /**
- * @param input The Stream is closed after being read
- */
- public static <T> T readJson(InputStream input, Class<T> type) throws IOException
- {
- try (InputStreamReader reader = new InputStreamReader(input); BufferedReader bf = new BufferedReader(reader))
- {
- return fromJson(bf.lines().collect(Collectors.joining("\n")), type);
- }
- }
-
- public static <T> T fromJson(String src, Class<T> type)
- {
- // TODO actually parse and compare version
- String rawJson = src.lines().dropWhile(s -> s.length() == 0 || s.charAt(0) != '{').collect(Collectors.joining());
- return parser.fromJson(rawJson, type);
- }
-
- public static void writeJson(Object o, String path) throws IOException
- {
- try (FileWriter writer = new FileWriter(path))
- {
- writer.write(toJson(o));
- }
- }
-
- public static String toJson(Object o)
- {
- return String.format("mograsim version: %s\n%s", Version.jsonCompVersion.toString(), parser.toJson(o));
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.util;
-
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.model.wires.ConnectionPoint;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-
-public class ModellingTool
-{
- private ViewModelModifiable model;
-
- ModellingTool(ViewModelModifiable model)
- {
- this.model = model;
- }
-
- public GUIWire connect(GUIComponent a, GUIComponent b, String pinA, String pinB)
- {
- return connect(a.getPin(pinA), b.getPin(pinB));
- }
-
- public GUIWire connect(ConnectionPoint a, GUIComponent b, String pinB)
- {
- return connect(a, b.getPin(pinB));
- }
-
- public GUIWire connect(ConnectionPoint a, ConnectionPoint b)
- {
- return new GUIWire(model, a, b);
- }
-
- public static ModellingTool createFor(ViewModelModifiable model)
- {
- return new ModellingTool(model);
- }
-}
+++ /dev/null
-package net.mograsim.logic.ui.util;
-
-public final class Version
-{
- public final static Version jsonCompVersion = new Version(0, 1, 3);
- public final int major, minor, patch;
-
- public Version(int major, int minor, int patch)
- {
- super();
- this.major = major;
- this.minor = minor;
- this.patch = patch;
- }
-
- public int[] getVersionNumbers()
- {
- return new int[] { major, minor, patch };
- }
-
- @Override
- public String toString()
- {
- return major + "." + minor + "." + patch;
- }
-
- @Override
- public int hashCode()
- {
- final int prime = 31;
- int result = 1;
- result = prime * result + major;
- result = prime * result + minor;
- result = prime * result + patch;
- return result;
- }
-
- @Override
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (!(obj instanceof Version))
- return false;
- Version other = (Version) obj;
- if (major != other.major)
- return false;
- if (minor != other.minor)
- return false;
- if (patch != other.patch)
- return false;
- return true;
- }
-
- public boolean is(int major)
- {
- return major != this.major;
- }
-
- public boolean is(int major, int minor)
- {
- return is(major) && this.minor == minor;
- }
-
- public boolean is(int major, int minor, int patch)
- {
- return is(major, minor) && this.patch == patch;
- }
-}
\ No newline at end of file
net.mograsim.plugin.asm,
net.mograsim.plugin.asm.editor,
net.mograsim.plugin.asm.editor.rules,
- net.mograsim.plugin.asm.model,
net.mograsim.plugin.nature,
net.mograsim.plugin.views
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.e4.ui.di,
org.eclipse.e4.ui.model.workbench,
org.eclipse.ui.themes;bundle-version="1.2.400",
- net.mograsim.logic.ui;bundle-version="0.1.0";visibility:=reexport,
- net.mograsim.logic.ui.am2900;bundle-version="0.1.0";visibility:=reexport,
+ net.mograsim.logic.model;bundle-version="0.1.0";visibility:=reexport,
+ net.mograsim.logic.model.am2900;bundle-version="0.1.0";visibility:=reexport,
javax.annotation;bundle-version="1.0.0",
net.mograsim.preferences;bundle-version="0.1.0"
Bundle-RequiredExecutionEnvironment: JavaSE-11
import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.ui.LogicExecuter;
-import net.mograsim.logic.ui.LogicUICanvas;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.atomic.GUINotGate;
-import net.mograsim.logic.ui.model.components.atomic.GUIOrGate;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.LogicExecuter;
+import net.mograsim.logic.model.LogicUICanvas;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.atomic.GUINotGate;
+import net.mograsim.logic.model.model.components.atomic.GUIOrGate;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.model.wires.WireCrossPoint;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
import net.mograsim.preferences.Preferences;
public class SimulationPreview implements IThemePreview
+++ /dev/null
-package net.mograsim.plugin.asm.model;
-
-public interface AsmElement
-{
- // only marker at the moment
-}
+++ /dev/null
-package net.mograsim.plugin.asm.model;
-
-import java.util.Objects;
-
-public final class AsmInstruction implements AsmElement
-{
- private final AsmOperation operation;
- private final AsmOperands operands;
-
- public AsmInstruction(AsmOperation operation, AsmOperands operands)
- {
- this.operation = Objects.requireNonNull(operation);
- this.operands = Objects.requireNonNull(operands);
- }
-
- @Override
- public int hashCode()
- {
- return Objects.hash(operands, operation);
- }
-
- @Override
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (!(obj instanceof AsmInstruction))
- return false;
- AsmInstruction other = (AsmInstruction) obj;
- return Objects.equals(operands, other.operands) && Objects.equals(operation, other.operation);
- }
-
- @Override
- public String toString()
- {
- return String.format("%s %s", operation, operands).trim();
- }
-
-}
+++ /dev/null
-package net.mograsim.plugin.asm.model;
-
-import java.util.Objects;
-
-public final class AsmLabel implements AsmElement
-{
- private final String name;
- private AsmInstruction inst;
-
- public AsmLabel(String name)
- {
- this.name = Objects.requireNonNull(name);
- }
-
- public String getName()
- {
- return name;
- }
-
- public void setInst(AsmInstruction inst)
- {
- if (inst != null)
- throw new IllegalStateException("Instrution already set for " + name);
- this.inst = inst;
- }
-
- @Override
- public String toString()
- {
- return name + ":";
- }
-
- @Override
- public int hashCode()
- {
- return Objects.hash(inst, name);
- }
-
- @Override
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (!(obj instanceof AsmLabel))
- return false;
- AsmLabel other = (AsmLabel) obj;
- return Objects.equals(inst, other.inst) && Objects.equals(name, other.name);
- }
-}
+++ /dev/null
-package net.mograsim.plugin.asm.model;
-
-public interface AsmOperand
-{
-
-}
+++ /dev/null
-package net.mograsim.plugin.asm.model;
-
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-public final class AsmOperands
-{
- private final List<AsmOperand> operands;
-
- public AsmOperands(List<AsmOperand> operands)
- {
- this.operands = Objects.requireNonNull(operands);
- }
-
- public List<AsmOperand> getOperands()
- {
- return operands;
- }
-
- @Override
- public int hashCode()
- {
- return operands.hashCode();
- }
-
- @Override
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (!(obj instanceof AsmOperands))
- return false;
- AsmOperands other = (AsmOperands) obj;
- return operands.equals(other.operands);
- }
-
- @Override
- public String toString()
- {
- return operands.stream().map(AsmOperand::toString).collect(Collectors.joining(", "));
- }
-}
+++ /dev/null
-package net.mograsim.plugin.asm.model;
-
-import java.util.Objects;
-
-public final class AsmOperation
-{
- private final String mnemonic;
-
- public AsmOperation(String mnemonic)
- {
- this.mnemonic = Objects.requireNonNull(mnemonic.toLowerCase());
- }
-
- public String getMnemonic()
- {
- return mnemonic;
- }
-
- @Override
- public String toString()
- {
- return getMnemonic();
- }
-
- @Override
- public int hashCode()
- {
- return mnemonic.hashCode();
- }
-
- @Override
- public boolean equals(Object obj)
- {
- if (this == obj)
- return true;
- if (!(obj instanceof AsmOperation))
- return false;
- AsmOperation other = (AsmOperation) obj;
- return mnemonic.equals(other.mnemonic);
- }
-}
+++ /dev/null
-package net.mograsim.plugin.asm.model;
-
-public class NumericOperand
-{
-
-}
import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
import net.mograsim.logic.core.timeline.Timeline;
-import net.mograsim.logic.ui.LogicExecuter;
-import net.mograsim.logic.ui.LogicUICanvas;
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;
-import net.mograsim.logic.ui.model.components.submodels.SimpleRectangularSubmodelComponent;
-import net.mograsim.logic.ui.model.wires.GUIWire;
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
+import net.mograsim.logic.model.LogicExecuter;
+import net.mograsim.logic.model.LogicUICanvas;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
+import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
+import net.mograsim.logic.model.model.components.mi.nandbased.am2901.GUIAm2901;
+import net.mograsim.logic.model.model.components.submodels.SimpleRectangularSubmodelComponent;
+import net.mograsim.logic.model.model.wires.GUIWire;
+import net.mograsim.logic.model.modeladapter.LogicModelParameters;
+import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
import net.mograsim.plugin.ThemePreferences;
import net.mograsim.preferences.Preferences;