--- /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().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.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.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.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.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.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.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 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;
+
+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.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.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="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.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.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.List;
+
+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;
+
+ /**
+ * 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)
+ {
+ 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());}
+ // @formatter:on
+
+ @Override
+ public String toString()
+ {
+ return "GUIWire [" + pin1 + "---" + pin2 + ", value=" + (end == null ? "null" : end.getValues()) + "]";
+ }
+}
\ 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 net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.model.model.ViewModelModifiable;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
+import net.mograsim.logic.model.model.wires.MovablePin;
+import net.mograsim.logic.model.model.wires.Pin;
+import net.mograsim.logic.model.serializing.snippets.Renderer;
+
+public class DeserializedSubmodelComponent extends SubmodelComponent
+{
+ public Renderer outlineRenderer;
+ public Renderer symbolRenderer;
+
+ public DeserializedSubmodelComponent(ViewModelModifiable model, String name)
+ {
+ super(model, name);
+ }
+
+ @Override
+ protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
+ {
+ if (outlineRenderer != null)
+ outlineRenderer.render(gc, visibleRegion);
+ }
+
+ @Override
+ protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
+ {
+ if (symbolRenderer != null)
+ symbolRenderer.render(gc, visibleRegion);
+ }
+
+ public void setOutlineRenderer(Renderer outlineRenderer)
+ {
+ this.outlineRenderer = outlineRenderer;
+ }
+
+ public void setSymbolRenderer(Renderer symbolRenderer)
+ {
+ this.symbolRenderer = symbolRenderer;
+ }
+
+ public ViewModelModifiable getSubmodelModifiable()
+ {
+ return submodelModifiable;
+ }
+
+ @Override
+ public void setSubmodelScale(double submodelScale)
+ {
+ super.setSubmodelScale(submodelScale);
+ }
+
+ @Override
+ public void setSize(double width, double height)
+ {
+ super.setSize(width, height);
+ }
+
+ @Override
+ protected Pin addSubmodelInterface(MovablePin supermodelPin)
+ {
+ return super.addSubmodelInterface(supermodelPin);
+ }
+}
\ 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 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 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.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
+{
+ "standardOutlineRendererSuppliers": {},
+ "standardSymbolRendererSuppliers": {
+ "CenteredTextSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.CenteredTextSymbolRenderer",
+ "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.ui.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"?>\r
-<classpath>\r
- <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>\r
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">\r
- <attributes>\r
- <attribute name="module" value="true"/>\r
- </attributes>\r
- </classpathentry>\r
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
- <classpathentry kind="src" output="bin/src" path="src"/>\r
- <classpathentry kind="src" output="bin/test" path="test">\r
- <attributes>\r
- <attribute name="test" value="true"/>\r
- </attributes>\r
- </classpathentry>\r
- <classpathentry kind="output" path="bin"/>\r
-</classpath>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<projectDescription>\r
- <name>net.mograsim.logic.ui.am2900</name>\r
- <comment></comment>\r
- <projects>\r
- <project>net.mograsim.logic.ui</project>\r
- <project>SWTZoomableCanvas</project>\r
- </projects>\r
- <buildSpec>\r
- <buildCommand>\r
- <name>org.eclipse.jdt.core.javabuilder</name>\r
- <arguments>\r
- </arguments>\r
- </buildCommand>\r
- <buildCommand>\r
- <name>org.eclipse.pde.ManifestBuilder</name>\r
- <arguments>\r
- </arguments>\r
- </buildCommand>\r
- <buildCommand>\r
- <name>org.eclipse.pde.SchemaBuilder</name>\r
- <arguments>\r
- </arguments>\r
- </buildCommand>\r
- </buildSpec>\r
- <natures>\r
- <nature>org.eclipse.jdt.core.javanature</nature>\r
- <nature>org.eclipse.pde.PluginNature</nature>\r
- </natures>\r
-</projectDescription>\r
+++ /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\r
-Bundle-Vendor = Mograsim Team\r
-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.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.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, "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.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
- // 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.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)
- {
- 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().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.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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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.setComponentSupplier(GUIdlatch4.class.getCanonicalName(), (m, p, n) -> new GUIdlatch4(m, n));
- }
-}
\ 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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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.setComponentSupplier(GUIAm2901QReg.class.getCanonicalName(), (m, p, n) -> new GUIAm2901QReg(m, n));
- }
-}
\ 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)
- {
- 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;\r
-\r
-import static net.mograsim.logic.ui.am2900.TestUtil.*;\r
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Dest.*;\r
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Func.*;\r
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Src.*;\r
-import static net.mograsim.logic.ui.am2900.TestableAm2901.Register.*;\r
-import static org.junit.jupiter.api.Assertions.*;\r
-\r
-import java.awt.Point;\r
-import java.util.stream.IntStream;\r
-import java.util.stream.Stream;\r
-\r
-import org.junit.jupiter.api.BeforeEach;\r
-import org.junit.jupiter.api.Order;\r
-import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;\r
-import org.junit.jupiter.api.Test;\r
-import org.junit.jupiter.api.TestMethodOrder;\r
-import org.junit.jupiter.params.ParameterizedTest;\r
-import org.junit.jupiter.params.provider.ArgumentsSource;\r
-import net.mograsim.logic.ui.am2900.TestableAm2901.Register;\r
-\r
-@TestMethodOrder(OrderAnnotation.class)\r
-public class Am2901Test\r
-{\r
- private TestableAm2901 am2901;\r
-\r
- @BeforeEach\r
- void initialize()\r
- {\r
- createAndSetup();\r
- setInputsToZero();\r
- }\r
-\r
- void createAndSetup()\r
- {\r
- am2901 = new TestableAm2901Impl();\r
- am2901.setup();\r
- }\r
-\r
- void setRegistersToZero()\r
- {\r
- setInputsToZero();\r
- for (Register r : Register.values())\r
- {\r
- setRegisterToZero(r);\r
- }\r
- }\r
-\r
- void setRegisterToZero(Register r)\r
- {\r
- am2901.setD("0000");\r
- am2901.setSrc(DZ);\r
- am2901.setFunc(AND);\r
- setRegOutput(r);\r
-\r
- am2901.assertFullCycleSuccess();\r
- }\r
-\r
- void setRegOutput(Register r)\r
- {\r
- if (r == Q)\r
- {\r
- am2901.setDest(QREG);\r
- } else\r
- {\r
- am2901.setReg_B(r.toBitString());\r
- am2901.setDest(RAMF);\r
- }\r
- }\r
-\r
- void setInputsToZero()\r
- {\r
- am2901.setCarryIn("0");\r
- am2901.setQ_0("0");\r
- am2901.setQ_3("0");\r
- am2901.setRAM_0("0");\r
- am2901.setRAM_3("0");\r
- am2901.setReg_A("0000");\r
- am2901.setReg_B("0000");\r
- am2901.setD("0000");\r
- am2901.setSrc(AB);\r
- am2901.setFunc(ADD);\r
- am2901.setDest(QREG);\r
-// am2901.setNotOutEnable("0"); TODO\r
- am2901.clockOn(true);\r
- am2901.assertRunSuccess();\r
- }\r
-\r
- @Order(1)\r
- @ParameterizedTest\r
- @ArgumentsSource(TestableAm2901.RegisterProvider.class)\r
- void testDirectAccess(Register r)\r
- {\r
- assertEquals("UUUU", am2901.getDirectly(r));\r
-\r
- am2901.setDirectly(r, "1011");\r
-\r
- assertEquals("1011", am2901.getDirectly(r));\r
- }\r
-\r
- @Order(2)\r
- @ParameterizedTest\r
- @ArgumentsSource(TestableAm2901.RegisterProvider.class)\r
- void testSetToZero(Register r)\r
- {\r
- assertEquals("UUUU", am2901.getDirectly(r));\r
-\r
- setRegisterToZero(r);\r
-\r
- assertEquals("0000", am2901.getDirectly(r));\r
- assertEquals("0000", am2901.getY());\r
- assertEquals("0", am2901.getCarryOut());\r
- assertEquals("0", am2901.getOverflow());\r
- assertEquals("0", am2901.getSign());\r
- assertEquals("1", am2901.getZero());\r
- }\r
-\r
- @Order(3)\r
- @Test\r
- void testSetAllToZero()\r
- {\r
- setRegistersToZero();\r
-\r
- assertEquals("0000", am2901.getY());\r
- assertEquals("0", am2901.getCarryOut());\r
- assertEquals("0", am2901.getOverflow());\r
- assertEquals("0", am2901.getSign());\r
- assertEquals("1", am2901.getZero());\r
- assertEquals("0", am2901.getQ_0());\r
- assertEquals("0", am2901.getQ_3());\r
- assertEquals("0", am2901.getRAM_0());\r
- assertEquals("0", am2901.getRAM_3());\r
-\r
- assertAll("register values", Register.stream().map(r -> () ->\r
- {\r
- assertEquals("0000", am2901.getDirectly(r), r.name());\r
- }));\r
- }\r
-\r
- @Order(4)\r
- @Test\r
- void testADD()\r
- {\r
- am2901.setSrc(DA);\r
- am2901.setFunc(ADD);\r
- am2901.setDest(NOP);\r
- am2901.setReg_A(r0.toBitString());\r
-\r
- assertAll(getAll4BitPairs().map(xy -> () ->\r
- {\r
- am2901.setDirectly(r0, to4bitBin(xy.x));\r
- am2901.setD(to4bitBin(xy.y));\r
-\r
- am2901.assertFullCycleSuccess();\r
-\r
- int res32Bit = xy.x + xy.y;\r
- int res4Bit = res32Bit & 0b1111;\r
- int res32Bit_sgn = signed4ToSigned32(xy.x) + signed4ToSigned32(xy.y);\r
- int res4Bit_sgn = signed4ToSigned32(res32Bit_sgn);\r
-\r
- String desc = xy.x + " + " + xy.y + " = " + res4Bit + ": ";\r
-\r
- assertEquals(to4bitBin(res4Bit & 0b1111), am2901.getY(), desc + "Y");\r
- assertEquals(to1bitBin(res4Bit == 0), am2901.getZero(), desc + "F=0");\r
- assertEquals(to1bitBin(res4Bit & 0b1000), am2901.getSign(), desc + "F3");\r
- assertEquals(to1bitBin(res32Bit & 0b1_0000), am2901.getCarryOut(), desc + "Cn+4");\r
- assertEquals(to1bitBin(res4Bit_sgn != res32Bit_sgn), am2901.getOverflow(), desc + "OVR");\r
- }));\r
- }\r
-\r
- @Order(4)\r
- @Test\r
- void testAND()\r
- {\r
- am2901.setSrc(DA);\r
- am2901.setFunc(AND);\r
- am2901.setDest(NOP);\r
- am2901.setReg_A(r0.toBitString());\r
-\r
- assertAll(getAll4BitPairs().map(xy -> () ->\r
- {\r
- am2901.setDirectly(r0, to4bitBin(xy.x));\r
- am2901.setD(to4bitBin(xy.y));\r
-\r
- am2901.assertFullCycleSuccess();\r
-\r
- int res32Bit = xy.x & xy.y;\r
-\r
- String desc = xy.x + " & " + xy.y + " = " + res32Bit + ": ";\r
-\r
- assertEquals(to4bitBin(res32Bit), am2901.getY(), desc + "Y");\r
- assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), desc + "F=0");\r
- assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), desc + "F3");\r
-// assertEquals(to1bitBin(res32Bit), am2901.getCarryOut(), desc + "Cn+4"); // TODO\r
-// assertEquals(to1bitBin(res32Bit), am2901.getOverflow(), desc + "OVR"); // TODO\r
- }));\r
- }\r
-\r
- @Order(4)\r
- @Test\r
- void testOR()\r
- {\r
- am2901.setSrc(DA);\r
- am2901.setFunc(OR);\r
- am2901.setDest(NOP);\r
- am2901.setReg_A(r0.toBitString());\r
-\r
- assertAll(getAll4BitPairs().map(xy -> () ->\r
- {\r
- am2901.setDirectly(r0, to4bitBin(xy.x));\r
- am2901.setD(to4bitBin(xy.y));\r
-\r
- am2901.assertFullCycleSuccess();\r
-\r
- int res32Bit = xy.x | xy.y;\r
-\r
- String desc = xy.x + " | " + xy.y + " = " + res32Bit + ": ";\r
-\r
- assertEquals(to4bitBin(res32Bit), am2901.getY(), desc + "Y");\r
- assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), desc + "F=0");\r
- assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), desc + "F3");\r
-// assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getCarryOut(), desc + "Cn+4"); // TODO\r
-// assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getOverflow(), desc + "OVR"); // TODO\r
- }));\r
- }\r
-\r
- @Order(4)\r
- @Test\r
- void testXOR()\r
- {\r
- am2901.setSrc(DA);\r
- am2901.setFunc(EXOR);\r
- am2901.setDest(NOP);\r
- am2901.setReg_A(r0.toBitString());\r
-\r
- assertAll(getAll4BitPairs().map(xy -> () ->\r
- {\r
- am2901.setDirectly(r0, to4bitBin(xy.x));\r
- am2901.setD(to4bitBin(xy.y));\r
-\r
- am2901.assertFullCycleSuccess();\r
-\r
- int res32Bit = xy.x ^ xy.y;\r
-\r
- String desc = xy.x + " ^ " + xy.y + " = " + res32Bit + ": ";\r
-\r
- assertEquals(to4bitBin(res32Bit), am2901.getY(), desc + "Y");\r
- assertEquals(to1bitBin(res32Bit == 0), am2901.getZero(), desc + "F=0");\r
- assertEquals(to1bitBin(res32Bit & 0b1000), am2901.getSign(), desc + "F3");\r
-// assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getCarryOut(), desc + "Cn+4"); // TODO\r
-// assertEquals(to1bitBin(res32Bit != 0b1111), am2901.getOverflow(), desc + "OVR"); // TODO\r
- }));\r
- }\r
-\r
- @Order(4)\r
- @Test\r
- void testSUB()\r
- {\r
- am2901.setSrc(DA);\r
- am2901.setCarryIn("1");\r
- am2901.setFunc(SUBR);\r
- am2901.setDest(NOP);\r
- am2901.setReg_A(r0.toBitString());\r
-\r
- assertAll(getAll4BitPairs().map(xy -> () ->\r
- {\r
- am2901.setDirectly(r0, to4bitBin(xy.x));\r
- am2901.setD(to4bitBin(xy.y));\r
-\r
- am2901.assertFullCycleSuccess();\r
-\r
- int res32Bit = xy.x - xy.y;\r
- int res4Bit = res32Bit & 0b1111;\r
- int res32Bit_sgn = signed4ToSigned32(xy.x) - signed4ToSigned32(xy.y);\r
- int res4Bit_sgn = signed4ToSigned32(res32Bit_sgn);\r
-\r
- String desc = xy.x + " - " + xy.y + " = " + res4Bit + ": ";\r
-\r
- assertEquals(to4bitBin(res4Bit & 0b1111), am2901.getY(), desc + "Y");\r
- assertEquals(to1bitBin(res4Bit == 0), am2901.getZero(), desc + "F=0");\r
- assertEquals(to1bitBin(res4Bit & 0b1000), am2901.getSign(), desc + "F3");\r
- assertEquals(to1bitBin(xy.x >= xy.y), am2901.getCarryOut(), desc + "Cn+4");\r
- assertEquals(to1bitBin(res4Bit_sgn != res32Bit_sgn), am2901.getOverflow(), desc + "OVR");\r
- }));\r
- }\r
-\r
- static Stream<Point> getAll4BitPairs()\r
- {\r
- return IntStream.range(0, 16).boxed().flatMap(x -> IntStream.range(0, 16).mapToObj(y -> new Point(x, y)));\r
- }\r
-}\r
+++ /dev/null
-package net.mograsim.logic.ui.am2900;
-
-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.GUIComponent;
-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.wires.Pin;
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;
-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)
- {
- 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;\r
-\r
-public final class TestUtil\r
-{\r
- private TestUtil()\r
- {\r
-\r
- }\r
-\r
- /**\r
- * Transforms the last four bits of an int to a string that contains the binary ('1' and '0') representation of the 4 bits\r
- * \r
- * @author Christian Femers\r
- */\r
- public static String to4bitBin(int x)\r
- {\r
- StringBuilder sb = new StringBuilder(4);\r
- sb.append((x & 0b1000) == 0 ? '0' : '1');\r
- sb.append((x & 0b0100) == 0 ? '0' : '1');\r
- sb.append((x & 0b0010) == 0 ? '0' : '1');\r
- sb.append((x & 0b0001) == 0 ? '0' : '1');\r
- return sb.toString();\r
- }\r
-\r
- /**\r
- * Transforms the given boolean to a string that contains the binary ('1' and '0') representation of the bit\r
- * \r
- * @author Christian Femers\r
- */\r
- public static String to1bitBin(boolean bitIsSet)\r
- {\r
- return bitIsSet ? "1" : "0";\r
- }\r
-\r
- /**\r
- * Transforms the given int to a string that contains the binary ('1' and '0') representation of the int. "0" is only returned when the\r
- * int is equal to zero.\r
- * \r
- * @author Christian Femers\r
- */\r
- public static String to1bitBin(int someInt)\r
- {\r
- return someInt != 0 ? "1" : "0";\r
- }\r
-\r
- /**\r
- * 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\r
- * negative)\r
- * \r
- * @author Christian Femers\r
- */\r
- public static int signed4ToSigned32(int signed4bit)\r
- {\r
- if ((signed4bit & 0b1000) > 0)\r
- return signed4bit | 0xFF_FF_FF_F0;\r
- return signed4bit & 0x00_00_00_0F;\r
- }\r
-\r
- /**\r
- * Transforms a 16 bit signed integer (-32768 to 32767 - a short) to a int representing the same number. (Adding leading 1-bits if the\r
- * 16 bit int is negative)\r
- * \r
- * @author Christian Femers\r
- */\r
- public static int signed16ToSigned32(int signed16bit)\r
- {\r
- return (short) signed16bit;\r
- }\r
-\r
- /**\r
- * Transforms the last n bits of an int to a string that contains the binary ('1' and '0') representation of the n bits\r
- * \r
- * @author Christian Femers\r
- */\r
- public static String toNbitString(int x, int n)\r
- {\r
- StringBuilder sb = new StringBuilder(n);\r
- for (int i = 0; i < n; i++)\r
- {\r
- sb.append((x >> i) & 1);\r
- }\r
- return sb.reverse().toString();\r
- }\r
-}\r
+++ /dev/null
-package net.mograsim.logic.ui.am2900;\r
-\r
-import static org.junit.jupiter.api.Assertions.assertEquals;\r
-\r
-import java.util.Arrays;\r
-import java.util.stream.Stream;\r
-\r
-import org.junit.jupiter.api.extension.ExtensionContext;\r
-import org.junit.jupiter.params.provider.Arguments;\r
-import org.junit.jupiter.params.provider.ArgumentsProvider;\r
-\r
-public interface TestableAm2901\r
-{\r
- void setup();\r
-\r
- Result run();\r
-\r
- void setDest(Am2901_Dest dest);\r
-\r
- void setFunc(Am2901_Func func);\r
-\r
- void setSrc(Am2901_Src src);\r
-\r
- void setReg_A(String val_4_bit);\r
-\r
- void setReg_B(String val_4_bit);\r
-\r
- void setCarryIn(String val_1_bit);\r
-\r
- void setNotOutEnable(String val_1_bit);\r
-\r
- void setD(String val_4_bit);\r
-\r
- void setQ_0(String val_1_bit);\r
-\r
- void setQ_3(String val_1_bit);\r
-\r
- void setRAM_0(String val_1_bit);\r
-\r
- void setRAM_3(String val_1_bit);\r
-\r
- void clockOn(boolean isClockOn);\r
-\r
- void setDirectly(Register r, String val_4_bit);\r
-\r
- String getQ_0();\r
-\r
- String getQ_3();\r
-\r
- String getRAM_0();\r
-\r
- String getRAM_3();\r
-\r
- String getNotP();\r
-\r
- String getNotG();\r
-\r
- String getCarryOut();\r
-\r
- String getSign();\r
-\r
- String getZero();\r
-\r
- String getOverflow();\r
-\r
- String getY();\r
-\r
- String getDirectly(Register r);\r
-\r
- default void assertRunSuccess()\r
- {\r
- assertEquals(Result.SUCCESS, run());\r
- }\r
-\r
- default void assertFullCycleSuccess()\r
- {\r
- assertRunSuccess();\r
- clockOn(false);\r
- assertRunSuccess();\r
- clockOn(true);\r
- assertRunSuccess();\r
- }\r
-\r
- public enum Result\r
- {\r
- SUCCESS, OUT_OF_TIME, ERROR;\r
- }\r
-\r
- public enum Am2901_Dest\r
- {\r
- QREG, NOP, RAMA, RAMF, RAMQD, RAMD, RAMQU, RAMU;\r
-\r
- public boolean doesShift()\r
- {\r
- return ordinal() >= 4;\r
- }\r
-\r
- public int getShiftDir()\r
- {\r
- return doesShift() ? (ordinal() < 6 ? -1 : 1) : 0;\r
- }\r
-\r
- public int getI7()\r
- {\r
- return this.ordinal() >> 1 & 1;\r
- }\r
- }\r
-\r
- public enum Am2901_Func\r
- {\r
- ADD, SUBR, SUBS, OR, AND, NOTRS, EXOR, EXNOR;\r
- }\r
-\r
- public enum Am2901_Src\r
- {\r
- AQ, AB, ZQ, ZB, ZA, DA, DQ, DZ;\r
- }\r
-\r
- public enum Register\r
- {\r
- r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;\r
-\r
- public String toBitString()\r
- {\r
- if (this.ordinal() > 0xF)\r
- throw new UnsupportedOperationException();\r
- return TestUtil.to4bitBin(this.ordinal());\r
- }\r
-\r
- public static Stream<Register> stream()\r
- {\r
- return Arrays.stream(values());\r
- }\r
- }\r
-\r
- public static class RegisterProvider implements ArgumentsProvider\r
- {\r
-\r
- @Override\r
- public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws Exception\r
- {\r
- return Register.stream().map(Arguments::of);\r
- }\r
-\r
- }\r
-}\r
+++ /dev/null
-package net.mograsim.logic.ui.am2900;\r
-\r
-import static org.junit.jupiter.api.Assertions.fail;\r
-\r
-import java.lang.reflect.Field;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.LinkedList;\r
-import java.util.List;\r
-import java.util.Objects;\r
-import java.util.Queue;\r
-import java.util.Set;\r
-import java.util.TreeSet;\r
-\r
-import net.mograsim.logic.core.components.BitDisplay;\r
-import net.mograsim.logic.core.components.ManualSwitch;\r
-import net.mograsim.logic.core.timeline.Timeline;\r
-import net.mograsim.logic.core.types.Bit;\r
-import net.mograsim.logic.core.types.BitVector;\r
-import net.mograsim.logic.core.types.BitVector.BitVectorMutator;\r
-import net.mograsim.logic.ui.model.ViewModel;\r
-import net.mograsim.logic.ui.model.ViewModelModifiable;\r
-import net.mograsim.logic.ui.model.components.GUIComponent;\r
-import net.mograsim.logic.ui.model.components.atomic.GUIBitDisplay;\r
-import net.mograsim.logic.ui.model.components.atomic.GUIManualSwitch;\r
-import net.mograsim.logic.ui.model.components.mi.nandbased.am2901.GUIAm2901;\r
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;\r
-import net.mograsim.logic.ui.model.wires.GUIWire;\r
-import net.mograsim.logic.ui.model.wires.Pin;\r
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;\r
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;\r
-\r
-public class TestableAm2901Impl implements TestableAm2901\r
-{\r
- private GUIComponent am2901;\r
- private Timeline timeline;\r
- private ManualSwitch I8, I7, I6, I5, I4, I3, I2, I1, I0;\r
- private ManualSwitch C;\r
- private ManualSwitch Cn;\r
- private ManualSwitch D1, D2, D3, D4;\r
- private ManualSwitch A0, A1, A2, A3;\r
- private ManualSwitch B0, B1, B2, B3;\r
- private ManualSwitch IRAMn, IRAMn_3, IQn, IQn_3;\r
- private BitDisplay Y1, Y2, Y3, Y4;\r
- private BitDisplay F_0, Cn_4, OVR, F3;\r
- private BitDisplay ORAMn, ORAMn_3, OQn, OQn_3;\r
-\r
- private Set<String> wireDebugChangeSet;\r
- private boolean debugWires = false;\r
- public int debugEventThreshold = 10_000;\r
- public int debugEventCount = 500;\r
-\r
- private int eventCounter;\r
-\r
- @Override\r
- public Result run()\r
- {\r
- // Normal execution until completion or eventLimit\r
- int eventLimit = debugEventThreshold;\r
- eventCounter = 0;\r
- debugWires = false;\r
- while (eventCounter < eventLimit)\r
- {\r
- timeline.executeNext();\r
- if (!timeline.hasNext())\r
- {\r
-// System.out.println("run() took " + eventCounter + " events");\r
- return Result.SUCCESS;\r
- }\r
- }\r
- // Start debugging if event limit is reached\r
- debugWires = true;\r
- wireDebugChangeSet = new TreeSet<>();\r
- Set<String> oldChangeSet;\r
- // observe wire changes to detect, if we are really stuck in an endless loop\r
- do\r
- {\r
- eventLimit += debugEventCount;\r
- oldChangeSet = wireDebugChangeSet;\r
- wireDebugChangeSet = new TreeSet<>();\r
- while (eventCounter < eventLimit)\r
- {\r
- timeline.executeNext();\r
- if (!timeline.hasNext())\r
- {\r
- // no endless loop, but more events needed than expected\r
- System.out.println("run() took longer than expected: " + eventCounter);\r
- return Result.SUCCESS;\r
- }\r
- }\r
- } while (!oldChangeSet.equals(wireDebugChangeSet));\r
- // if stuck, abort execution and print wires\r
- System.err.print("Problematic Wire updates:");\r
- wireDebugChangeSet.forEach(System.out::println);\r
- System.err.println("run() failed: " + eventCounter);\r
- return Result.OUT_OF_TIME;\r
- }\r
-\r
- @SuppressWarnings("unused")\r
- @Override\r
- public void setup()\r
- {\r
- // Create view model\r
- ViewModelModifiable viewModel = new ViewModelModifiable();\r
- // TODO replace with deserialized version as soon as high level states work for deserialized components\r
- am2901 = new GUIAm2901(viewModel);\r
-// am2901 = IndirectGUIComponentCreator.createComponent(viewModel, "GUIAm2901");\r
- // guess which pins are outputs and which are inputs\r
- // TODO this code exists three times... but it seems too "hacky" to put it in a helper class\r
- List<String> inputPinNames = new ArrayList<>();\r
- List<String> outputPinNames = new ArrayList<>();\r
- for (Pin p : am2901.getPins().values())\r
- if (p.getRelX() == 0)\r
- inputPinNames.add(p.name);\r
- else\r
- outputPinNames.add(p.name);\r
- // Get switches\r
- HashMap<String, GUIManualSwitch> idSwitchMap = new HashMap<>();\r
- for (String id : inputPinNames)\r
- {\r
- GUIManualSwitch sw = new GUIManualSwitch(viewModel);\r
- new GUIWire(viewModel, am2901.getPin(id), sw.getOutputPin());\r
- idSwitchMap.put(id, sw);\r
- }\r
- // Get displays\r
- HashMap<String, GUIBitDisplay> idDisplayMap = new HashMap<>();\r
- for (String id : outputPinNames)\r
- {\r
- GUIBitDisplay bd = new GUIBitDisplay(viewModel);\r
-// bd.addRedrawListener(() -> System.out.println(id + " " + bd.getBitDisplay().getDisplayedValue()));\r
- new GUIWire(viewModel, am2901.getPin(id), bd.getInputPin());\r
- idDisplayMap.put(id, bd);\r
- }\r
- // Create logic model\r
- LogicModelParameters params = new LogicModelParameters();\r
- params.gateProcessTime = 50;\r
- params.wireTravelTime = 10;\r
- timeline = ViewLogicModelAdapter.convert(viewModel, params);\r
- // Bind switches/displays to this test class\r
- for (var entry : idSwitchMap.entrySet())\r
- setField(entry.getKey().replaceAll("\\+|=", "_"), entry.getValue().getManualSwitch());\r
- for (var entry : idDisplayMap.entrySet())\r
- setField(entry.getKey().replaceAll("\\+|=", "_"), entry.getValue().getBitDisplay());\r
-\r
- // Debug code\r
- HashSet<GUIWire> wiresIncludingSubmodels = new HashSet<>();\r
- Queue<ViewModel> modelsToIterate = new LinkedList<>();\r
- modelsToIterate.add(viewModel);\r
- while (modelsToIterate.size() > 0)\r
- {\r
- ViewModel model = modelsToIterate.poll();\r
- wiresIncludingSubmodels.addAll(model.getWires());\r
- for (GUIComponent comp : model.getComponentsByName().values())\r
- if (comp instanceof SubmodelComponent)\r
- modelsToIterate.offer(((SubmodelComponent) comp).submodel);\r
- }\r
- wiresIncludingSubmodels.forEach(w -> w.addRedrawListener(() ->\r
- {\r
- if (debugWires)\r
- {\r
- wireDebugChangeSet.add(w.toString());\r
- }\r
- }));\r
- timeline.addEventAddedListener(te -> eventCounter++);\r
- }\r
-\r
- @Override\r
- public void setDest(Am2901_Dest dest)\r
- {\r
- var bits = of(dest.ordinal(), 3);\r
- I8.setToValueOf(bits.getBit(0));\r
- I7.setToValueOf(bits.getBit(1));\r
- I6.setToValueOf(bits.getBit(2));\r
- }\r
-\r
- @Override\r
- public void setFunc(Am2901_Func func)\r
- {\r
- var bits = of(func.ordinal(), 3);\r
- I5.setToValueOf(bits.getBit(0));\r
- I4.setToValueOf(bits.getBit(1));\r
- I3.setToValueOf(bits.getBit(2));\r
- }\r
-\r
- @Override\r
- public void setSrc(Am2901_Src src)\r
- {\r
- var bits = of(src.ordinal(), 3);\r
- I2.setToValueOf(bits.getBit(0));\r
- I1.setToValueOf(bits.getBit(1));\r
- I0.setToValueOf(bits.getBit(2));\r
- }\r
-\r
- @Override\r
- public void setReg_A(String val_4_bit)\r
- {\r
- var bits = BitVector.parseMSBFirst(val_4_bit);\r
- A3.setToValueOf(bits.getBit(3));\r
- A2.setToValueOf(bits.getBit(2));\r
- A1.setToValueOf(bits.getBit(1));\r
- A0.setToValueOf(bits.getBit(0));\r
- }\r
-\r
- @Override\r
- public void setReg_B(String val_4_bit)\r
- {\r
- var bits = BitVector.parseMSBFirst(val_4_bit);\r
- B3.setToValueOf(bits.getBit(3));\r
- B2.setToValueOf(bits.getBit(2));\r
- B1.setToValueOf(bits.getBit(1));\r
- B0.setToValueOf(bits.getBit(0));\r
- }\r
-\r
- @Override\r
- public void setCarryIn(String val_1_bit)\r
- {\r
- Cn.setToValueOf(Bit.parse(val_1_bit));\r
- }\r
-\r
- @Override\r
- public void setNotOutEnable(String val_1_bit)\r
- {\r
- throw new UnsupportedOperationException(); // TODO\r
- }\r
-\r
- @Override\r
- public void setD(String val_4_bit)\r
- {\r
- var bits = BitVector.parseMSBFirst(val_4_bit);\r
- D4.setToValueOf(bits.getBit(3));\r
- D3.setToValueOf(bits.getBit(2));\r
- D2.setToValueOf(bits.getBit(1));\r
- D1.setToValueOf(bits.getBit(0));\r
- }\r
-\r
- @Override\r
- public void setQ_0(String val_1_bit)\r
- {\r
- IQn.setToValueOf(Bit.parse(val_1_bit));\r
- }\r
-\r
- @Override\r
- public void setQ_3(String val_1_bit)\r
- {\r
- IQn_3.setToValueOf(Bit.parse(val_1_bit));\r
- }\r
-\r
- @Override\r
- public void setRAM_0(String val_1_bit)\r
- {\r
- IRAMn.setToValueOf(Bit.parse(val_1_bit));\r
- }\r
-\r
- @Override\r
- public void setRAM_3(String val_1_bit)\r
- {\r
- IRAMn_3.setToValueOf(Bit.parse(val_1_bit));\r
- }\r
-\r
- @Override\r
- public void clockOn(boolean isClockOn)\r
- {\r
- C.setState(isClockOn);\r
- }\r
-\r
- @Override\r
- public String getQ_0()\r
- {\r
- return OQn.getDisplayedValue().toString();\r
- }\r
-\r
- @Override\r
- public String getQ_3()\r
- {\r
- return OQn_3.getDisplayedValue().toString();\r
- }\r
-\r
- @Override\r
- public String getRAM_0()\r
- {\r
- return ORAMn.getDisplayedValue().toString();\r
- }\r
-\r
- @Override\r
- public String getRAM_3()\r
- {\r
- return ORAMn_3.getDisplayedValue().toString();\r
- }\r
-\r
- @Override\r
- public String getNotP()\r
- {\r
- throw new UnsupportedOperationException(); // TODO\r
- }\r
-\r
- @Override\r
- public String getNotG()\r
- {\r
- throw new UnsupportedOperationException(); // TODO\r
- }\r
-\r
- @Override\r
- public String getCarryOut()\r
- {\r
- return Cn_4.getDisplayedValue().toString();\r
- }\r
-\r
- @Override\r
- public String getSign()\r
- {\r
- return F3.getDisplayedValue().toString();\r
- }\r
-\r
- @Override\r
- public String getZero()\r
- {\r
- return F_0.getDisplayedValue().toString();\r
- }\r
-\r
- @Override\r
- public String getOverflow()\r
- {\r
- return OVR.getDisplayedValue().toString();\r
- }\r
-\r
- @Override\r
- public String getY()\r
- {\r
- var y3 = Y4.getDisplayedValue();\r
- var y2 = Y3.getDisplayedValue();\r
- var y1 = Y2.getDisplayedValue();\r
- var y0 = Y1.getDisplayedValue();\r
- return y0.concat(y1).concat(y2).concat(y3).toBitStringMSBFirst();\r
- }\r
-\r
- private void setField(String name, Object value)\r
- {\r
- try\r
- {\r
- Field f = TestableAm2901Impl.class.getDeclaredField(name);\r
- f.setAccessible(true);\r
- f.set(this, Objects.requireNonNull(value));\r
- }\r
- catch (Exception e)\r
- {\r
- fail(e);\r
- }\r
- }\r
-\r
- private static BitVector of(int value, int length)\r
- {\r
- BitVectorMutator mutator = BitVectorMutator.ofLength(length);\r
- int val = value;\r
- for (int i = length - 1; i >= 0; i--)\r
- {\r
- mutator.setBit(i, Bit.lastBitOf(val));\r
- val >>>= 1;\r
- }\r
- return mutator.toBitVector();\r
- }\r
-\r
- @Override\r
- public void setDirectly(Register r, String val_4_bit)\r
- {\r
- am2901.setHighLevelState(regToStateID(r), BitVector.parseMSBFirst(val_4_bit));\r
- }\r
-\r
- @Override\r
- public String getDirectly(Register r)\r
- {\r
- return ((BitVector) am2901.getHighLevelState(regToStateID(r))).toBitStringMSBFirst();\r
- }\r
-\r
- private static String regToStateID(Register r)\r
- {\r
- if (r == Register.Q)\r
- return "qreg.q";\r
- return "regs.c" + r.toBitString() + ".q";\r
- }\r
-}\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>\r
-<classpath>\r
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">\r
- <attributes>\r
- <attribute name="module" value="true"/>\r
- </attributes>\r
- </classpathentry>\r
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
- <classpathentry kind="src" path="src"/>\r
- <classpathentry kind="output" path="bin"/>\r
-</classpath>\r
+++ /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.highlevelstatehandlers,
- 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\r
-Bundle-Vendor = Mograsim Team\r
-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 = 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.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.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.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.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.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;
-import net.mograsim.logic.ui.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.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.HashMap;
-import java.util.List;
-import java.util.Map;
-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 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.ui.model;
-
-import java.util.Set;
-
-import net.mograsim.logic.ui.model.components.GUIComponent;
-import net.mograsim.logic.ui.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.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;
-import net.mograsim.logic.ui.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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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)
- {
- 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.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;
- 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.ui.model.components.atomic;\r
-\r
-import org.eclipse.swt.graphics.Color;\r
-\r
-import com.google.gson.JsonElement;\r
-import com.google.gson.JsonPrimitive;\r
-\r
-import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;\r
-import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;\r
-import net.mograsim.logic.ui.model.ViewModelModifiable;\r
-import net.mograsim.logic.ui.model.components.GUIComponent;\r
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;\r
-import net.mograsim.logic.ui.modeladapter.componentadapters.NoLogicAdapter;\r
-import net.mograsim.logic.ui.serializing.IndirectGUIComponentCreator;\r
-import net.mograsim.preferences.Preferences;\r
-\r
-//TODO clean size calculation mess\r
-public class TextComponent extends GUIComponent\r
-{\r
- private final String text;\r
-\r
- public TextComponent(ViewModelModifiable model, String text)\r
- {\r
- this(model, text, null);\r
- }\r
-\r
- public TextComponent(ViewModelModifiable model, String text, String name)\r
- {\r
- super(model, name);\r
- this.text = text;\r
- // If size is unset, it defaults to 0, which could prohibit this component from being rendered, which would prohibit the size being\r
- // set to a better guess\r
- setSize(1, 1);\r
- }\r
-\r
- @Override\r
- public void render(GeneralGC gc, Rectangle visibleRegion)\r
- {\r
- Point textExtent = gc.textExtent(text);\r
- setSize(textExtent.x, textExtent.y);\r
-\r
- Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");\r
- if (textColor != null)\r
- gc.setForeground(textColor);\r
- gc.drawText(text, getPosX(), getPosY(), true);\r
- }\r
-\r
- // serializing\r
-\r
- @Override\r
- public JsonElement getParams()\r
- {\r
- return new JsonPrimitive(text);\r
- }\r
-\r
- static\r
- {\r
- ViewLogicModelAdapter.addComponentAdapter(new NoLogicAdapter<>(TextComponent.class));\r
- IndirectGUIComponentCreator.setComponentSupplier(TextComponent.class.getName(),\r
- (m, p, n) -> new TextComponent(m, p.getAsString(), n));\r
- }\r
-}\r
+++ /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)
- {
- 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.ui.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.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
-{
- 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.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, 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.ui.model.wires;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-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
-{
- /**
- * 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;
-
- /**
- * 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)
- {
- 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());}
- // @formatter:on
-
- @Override
- public String toString()
- {
- return "GUIWire [" + pin1 + "---" + pin2 + ", value=" + (end == null ? "null" : end.getValues()) + "]";
- }
-}
\ 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
-{
- /**
- * 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.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
-{
- 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.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.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.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;\r
-\r
-import java.util.Map;\r
-\r
-import net.mograsim.logic.core.timeline.Timeline;\r
-import net.mograsim.logic.core.wires.Wire;\r
-import net.mograsim.logic.ui.model.components.GUIComponent;\r
-import net.mograsim.logic.ui.model.wires.Pin;\r
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;\r
-\r
-/**\r
- * For GUIComponents that do not have any simulation logic behaviour\r
- *\r
- * @author Christian Femers\r
- */\r
-public class NoLogicAdapter<T extends GUIComponent> implements ComponentAdapter<T>\r
-{\r
- private final Class<T> guiComponentClass;\r
-\r
- public NoLogicAdapter(Class<T> guiComponentClass)\r
- {\r
- this.guiComponentClass = guiComponentClass;\r
- }\r
-\r
- @Override\r
- public Class<T> getSupportedClass()\r
- {\r
- return guiComponentClass;\r
- }\r
-\r
- @Override\r
- public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, T guiComponent, Map<Pin, Wire> logicWiresPerPin)\r
- {\r
- // do nothing\r
- }\r
-}\r
+++ /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.HighLevelStateHandler;
-import net.mograsim.logic.ui.serializing.snippets.Renderer;
-import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler;
-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> 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.ui.serializing;
-
-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, String name)
- {
- super(model, name);
- }
-
- @Override
- protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
- {
- if (outlineRenderer != null)
- outlineRenderer.render(gc, visibleRegion);
- }
-
- @Override
- protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
- {
- if (symbolRenderer != null)
- symbolRenderer.render(gc, visibleRegion);
- }
-
- public void setOutlineRenderer(Renderer outlineRenderer)
- {
- this.outlineRenderer = outlineRenderer;
- }
-
- public void setSymbolRenderer(Renderer symbolRenderer)
- {
- this.symbolRenderer = symbolRenderer;
- }
-
- public ViewModelModifiable getSubmodelModifiable()
- {
- return submodelModifiable;
- }
-
- @Override
- public void setSubmodelScale(double submodelScale)
- {
- super.setSubmodelScale(submodelScale);
- }
-
- @Override
- public void setSize(double width, double height)
- {
- super.setSize(width, height);
- }
-
- @Override
- protected Pin addSubmodelInterface(MovablePin supermodelPin)
- {
- return super.addSubmodelInterface(supermodelPin);
- }
-}
\ 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 com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-
-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, 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 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.ui.serializing;
-
-import java.io.IOException;
-import java.util.Map;
-
-import net.mograsim.logic.ui.model.ViewModelModifiable;
-import net.mograsim.logic.ui.model.components.GUIComponent;
-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
-{
- /**
- * 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.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 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.ui.serializing.snippets;
-
-import net.mograsim.logic.ui.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.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.highlevelstatehandlers;
-
-import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent;
-import net.mograsim.logic.ui.serializing.CodeSnippetSupplier;
-import net.mograsim.logic.ui.serializing.snippets.HighLevelStateHandler;
-import net.mograsim.logic.ui.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.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.outlineRendererSupplier.setSnippetSupplier(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.symbolRendererSupplier.setSnippetSupplier(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.symbolRendererSupplier.setSnippetSupplier(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.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.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
-{
- "standardOutlineRendererSuppliers": {},
- "standardSymbolRendererSuppliers": {
- "CenteredTextSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.CenteredTextSymbolRenderer",
- "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer"
- },
- "standardHighLevelStateHandlerSuppliers": {}
-}
\ 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;\r
-\r
-import net.mograsim.logic.ui.model.ViewModelModifiable;\r
-import net.mograsim.logic.ui.model.components.GUIComponent;\r
-import net.mograsim.logic.ui.model.wires.GUIWire;\r
-import net.mograsim.logic.ui.model.wires.Pin;\r
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;\r
-\r
-public class ModellingTool\r
-{\r
- private ViewModelModifiable model;\r
-\r
- ModellingTool(ViewModelModifiable model)\r
- {\r
- this.model = model;\r
- }\r
-\r
- public GUIWire connect(GUIComponent a, GUIComponent b, String pinA, String pinB)\r
- {\r
- return connect(a.getPin(pinA), b.getPin(pinB));\r
- }\r
-\r
- public GUIWire connect(WireCrossPoint a, GUIComponent b, String pinB)\r
- {\r
- return connect(a.getPin(), b.getPin(pinB));\r
- }\r
-\r
- public GUIWire connect(Pin a, GUIComponent b, String pinB)\r
- {\r
- return connect(a, b.getPin(pinB));\r
- }\r
-\r
- public GUIWire connect(GUIComponent a, WireCrossPoint b, String pinA)\r
- {\r
- return connect(a.getPin(pinA), b.getPin());\r
- }\r
-\r
- public GUIWire connect(WireCrossPoint a, WireCrossPoint b)\r
- {\r
- return connect(a.getPin(), b.getPin());\r
- }\r
-\r
- public GUIWire connect(Pin a, WireCrossPoint b)\r
- {\r
- return connect(a, b.getPin());\r
- }\r
-\r
- public GUIWire connect(GUIComponent a, Pin b, String pinA)\r
- {\r
- return connect(a.getPin(pinA), b);\r
- }\r
-\r
- public GUIWire connect(WireCrossPoint a, Pin b)\r
- {\r
- return connect(a.getPin(), b);\r
- }\r
-\r
- public GUIWire connect(Pin a, Pin b)\r
- {\r
- return new GUIWire(model, a, b);\r
- }\r
-\r
- public static ModellingTool createFor(ViewModelModifiable model)\r
- {\r
- return new ModellingTool(model);\r
- }\r
-}\r
+++ /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
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
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;