<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://turingcomplete.wiki/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DemiurgE</id>
	<title>Turing Complete - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://turingcomplete.wiki/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DemiurgE"/>
	<link rel="alternate" type="text/html" href="http://turingcomplete.wiki/wiki/Special:Contributions/DemiurgE"/>
	<updated>2026-04-24T18:22:40Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>http://turingcomplete.wiki/w/index.php?title=Known_issues/2.0.16&amp;diff=9541</id>
		<title>Known issues/2.0.16</title>
		<link rel="alternate" type="text/html" href="http://turingcomplete.wiki/w/index.php?title=Known_issues/2.0.16&amp;diff=9541"/>
		<updated>2025-05-22T21:25:59Z</updated>

		<summary type="html">&lt;p&gt;DemiurgE: /* Wire Spaghetti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumbs|Alpha Branch/{{SUBPAGENAME}}}}&lt;br /&gt;
{{Early-access-version|2|0.16|apha}}&lt;br /&gt;
&lt;br /&gt;
A number of levels in version are known to be broken, and require some workarounds to complete. Some of thes issues affect multiple levels, I only give the first level you are likely to come across them.&lt;br /&gt;
&lt;br /&gt;
== Unofficial partial fixes ==&lt;br /&gt;
&lt;br /&gt;
Some of the levels can be fixed by replacing the game&#039;s campaign folder with an amended version from GitHub, provided by the user ERYK500.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ERYK500/tc_campaign/ https://github.com/ERYK500/tc_campaign/]&lt;br /&gt;
&lt;br /&gt;
{{Note|These are &#039;&#039;&#039;UNOFFICIAL&#039;&#039;&#039; patches - Please do not report problems to the game&#039;s developer. Instead, post on the TC Discord server in the &amp;lt;code&amp;gt;#new-patch-talk&amp;lt;/code&amp;gt; channel.}}&lt;br /&gt;
&lt;br /&gt;
This is a limited fix as some of the issues are engine limitations, which require a game update to resolve.&lt;br /&gt;
&lt;br /&gt;
== Symphony Counter ==&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/828292123936948244/1357725850828673305 Missing bit-width tool and 16-bit]&lt;br /&gt;
&lt;br /&gt;
You should be able to place 16-bit components, but the bit-width tool might not be present in the level.&lt;br /&gt;
&lt;br /&gt;
You can try pasting the following line into &amp;lt;code&amp;gt;levels.txt&amp;lt;/code&amp;gt; (which is found in your save folder, check the location in Options):&lt;br /&gt;
&amp;lt;pre&amp;gt;symphony_register_1,true,10000,10000,0,Default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your game is running, restart the game to ensure the changes take effect.&lt;br /&gt;
&lt;br /&gt;
Some people report that the bit-width tool appears simply by going to the Sandbox then component factory. This works only if you first hoover the cursor over wire colors tool in a way that color panel stays open when the cursor is moved away and than click on Sandbox button.&lt;br /&gt;
&lt;br /&gt;
If that does not work you can copy-paste 16-bit components from the sandbox.&lt;br /&gt;
&lt;br /&gt;
== Wire Spaghetti ==&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/828292123936948244/1357728243456806984 RAM broken in Wire Spaghetti]&lt;br /&gt;
&lt;br /&gt;
Various issues with RAM in Wire Spaghetti and following levels.&lt;br /&gt;
&lt;br /&gt;
These stem from the lack of API in &amp;lt;code&amp;gt;text.si&amp;lt;/code&amp;gt; to identify which RAM block is the program and which is the register file.&lt;br /&gt;
&lt;br /&gt;
Before attempting the following workarounds, enable the bit-width tool by following the steps in the [[Known issues/2.0.16#Symphony Counter]] section above to modify your &amp;lt;code&amp;gt;levels.txt&amp;lt;/code&amp;gt; file, if you have not done so already.  The bit-width tool will then be displayed below the wire comment tool and is required to set the bit size of the ram blocks during the following steps.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WORKAROUND A&#039;&#039;&#039;:&lt;br /&gt;
# Delete the RAM for both register file and program.&lt;br /&gt;
# Set the bit width tool to 16, if you don&#039;t have it, see above or move onto B below.&lt;br /&gt;
# Place a 16-bit RAM for the register file (the size is hidden).&lt;br /&gt;
# Set the bit width tool to 32.&lt;br /&gt;
# Place a 32-bit RAM (again size is hidden) for the program.&lt;br /&gt;
# These steps should be taken in order. This might take several attempts, for reasons that are unclear to me.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WORKAROUND B&#039;&#039;&#039;:&lt;br /&gt;
# Delete the RAM for both register file and program.&lt;br /&gt;
# Copy-paste a 16-bit RAM from sandbox for the register file, then&lt;br /&gt;
# Copy-paste a 32-bit RAM from sandbox for the program.&lt;br /&gt;
# These steps should be taken in order. This might take several attempts, for reasons that are unclear to me.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WORKAROUND C&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
If the above doesn&#039;t work, you can also try this, which has been reported to help.&lt;br /&gt;
# Remove the program counter (PC) from the level;&lt;br /&gt;
# Switch schematics to anything else for a moment;&lt;br /&gt;
# Return to the level;&lt;br /&gt;
# Replace the PC in its original place&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/828292123936948244/1357729558547398837 Wire Spaghetti level log out of date]&lt;br /&gt;
&lt;br /&gt;
The level log for Wire Spaghetti states:&lt;br /&gt;
3. Click &amp;quot;Edit link components&amp;quot; on the program component and then &amp;quot;Add register file&amp;quot;. (do not connect the zr register)&lt;br /&gt;
&lt;br /&gt;
This is now wrong, zr should be linked, as part of the register file.&lt;br /&gt;
&lt;br /&gt;
=== RAM is byte addressed ===&lt;br /&gt;
&lt;br /&gt;
The level log does not make clear that RAM is byte addressed (this is a change from 0.1059).&lt;br /&gt;
&lt;br /&gt;
Since the register file entries are 16-bits (2 bytes) wide the register address should be adjusted to match.&lt;br /&gt;
&lt;br /&gt;
=== r9 should have value 65535 not 0 ===&lt;br /&gt;
&lt;br /&gt;
If you see this error on tick 62, then you are writing to and reading from the zero register, this is an error in your circuit, not a bug in the game.&lt;br /&gt;
&lt;br /&gt;
== Integrating ALU ==&lt;br /&gt;
&lt;br /&gt;
The ALU you previous built has a multiply instruction. The tests for Integrating ALU assume mul returns zero.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WORKAROUND&#039;&#039;&#039;: Delete or otherwise disable the multiply componet inside the ALU custom component.&lt;br /&gt;
&lt;br /&gt;
== RAM ==&lt;br /&gt;
&lt;br /&gt;
=== The level log is incomplete. ===&lt;br /&gt;
&lt;br /&gt;
There are 4 new instructions, not the 2 listed in the level log:&lt;br /&gt;
* &amp;lt;code&amp;gt;0: load_8&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1: store_8&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2: load_16&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;3: store_16&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The level log incorrectly states put the store port at the top, they should (for this level) be at the bottom.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WORKAROUND&#039;&#039;&#039;:&lt;br /&gt;
Add to the existing program block from bottom to top:&lt;br /&gt;
# a 16-bit store port, then&lt;br /&gt;
# an 8-bit store.&lt;br /&gt;
# Move the existing 32 bit load port above the store ports, followed by&lt;br /&gt;
# a 16-bit load port, and&lt;br /&gt;
# an 8-bit load port.&lt;br /&gt;
&lt;br /&gt;
== Instruction aliases ==&lt;br /&gt;
&lt;br /&gt;
=== Level fails to compile due to wrong meta.txt ===&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;code&amp;gt;Turing Complete\campaign\symphony_9_aliases\meta.txt&amp;lt;/code&amp;gt; and delete the last 4 lines of default_assembly, so that the section reads&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;default_assembly = `&lt;br /&gt;
in r1&lt;br /&gt;
mov r2, r1&lt;br /&gt;
neg r3, r2&lt;br /&gt;
not r4, r2&lt;br /&gt;
`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Level fails due to wrong test.si ===&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;code&amp;gt;Turing Complete\campaign\symphony_9_aliases\test.si&amp;lt;/code&amp;gt; and replace the it all with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;def get_input($scratch_space: [Int], tick: Int, $inputs: [Int]) {&lt;br /&gt;
    inputs[0] = 10&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
def check_output($scratch_space: [Int], tick: Int, inputs: [Int], outputs: [Int]) TestResult {&lt;br /&gt;
    switch tick&lt;br /&gt;
        0 {&lt;br /&gt;
            if get_register_value(1) != 10 {&lt;br /&gt;
                set_error(`The first instruction is supposed to move the input value (10) to r1.`)&lt;br /&gt;
                return fail&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        1 {&lt;br /&gt;
            if get_register_value(2) != 10 {&lt;br /&gt;
                set_error(`The first instruction is supposed to move the input value (10) to r2.`)&lt;br /&gt;
                return fail&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        2 {&lt;br /&gt;
            if get_register_value(3) != 65526 {&lt;br /&gt;
                set_error(`Negate r2 and store the result (65526) in r3.`)&lt;br /&gt;
                return fail&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        3 {&lt;br /&gt;
            if get_register_value(4) != 65525 {&lt;br /&gt;
                set_error(`NOT r2 and store the result (-9) in r4.`)&lt;br /&gt;
                return fail&lt;br /&gt;
            }&lt;br /&gt;
            return win&lt;br /&gt;
        } &lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Various levels ==&lt;br /&gt;
&lt;br /&gt;
A number of levels&#039; meta.txt have out of date spec.isa, these can be fixed with a simple regex&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
s/(^|  )([01][01])0/$10$2/g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DemiurgE</name></author>
	</entry>
	<entry>
		<id>http://turingcomplete.wiki/w/index.php?title=Known_issues/2.0.16&amp;diff=9540</id>
		<title>Known issues/2.0.16</title>
		<link rel="alternate" type="text/html" href="http://turingcomplete.wiki/w/index.php?title=Known_issues/2.0.16&amp;diff=9540"/>
		<updated>2025-05-22T21:24:40Z</updated>

		<summary type="html">&lt;p&gt;DemiurgE: Added explicit steps to enable the bit-width tool during Wire Spaghetti.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Breadcrumbs|Alpha Branch/{{SUBPAGENAME}}}}&lt;br /&gt;
{{Early-access-version|2|0.16|apha}}&lt;br /&gt;
&lt;br /&gt;
A number of levels in version are known to be broken, and require some workarounds to complete. Some of thes issues affect multiple levels, I only give the first level you are likely to come across them.&lt;br /&gt;
&lt;br /&gt;
== Unofficial partial fixes ==&lt;br /&gt;
&lt;br /&gt;
Some of the levels can be fixed by replacing the game&#039;s campaign folder with an amended version from GitHub, provided by the user ERYK500.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ERYK500/tc_campaign/ https://github.com/ERYK500/tc_campaign/]&lt;br /&gt;
&lt;br /&gt;
{{Note|These are &#039;&#039;&#039;UNOFFICIAL&#039;&#039;&#039; patches - Please do not report problems to the game&#039;s developer. Instead, post on the TC Discord server in the &amp;lt;code&amp;gt;#new-patch-talk&amp;lt;/code&amp;gt; channel.}}&lt;br /&gt;
&lt;br /&gt;
This is a limited fix as some of the issues are engine limitations, which require a game update to resolve.&lt;br /&gt;
&lt;br /&gt;
== Symphony Counter ==&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/828292123936948244/1357725850828673305 Missing bit-width tool and 16-bit]&lt;br /&gt;
&lt;br /&gt;
You should be able to place 16-bit components, but the bit-width tool might not be present in the level.&lt;br /&gt;
&lt;br /&gt;
You can try pasting the following line into &amp;lt;code&amp;gt;levels.txt&amp;lt;/code&amp;gt; (which is found in your save folder, check the location in Options):&lt;br /&gt;
&amp;lt;pre&amp;gt;symphony_register_1,true,10000,10000,0,Default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your game is running, restart the game to ensure the changes take effect.&lt;br /&gt;
&lt;br /&gt;
Some people report that the bit-width tool appears simply by going to the Sandbox then component factory. This works only if you first hoover the cursor over wire colors tool in a way that color panel stays open when the cursor is moved away and than click on Sandbox button.&lt;br /&gt;
&lt;br /&gt;
If that does not work you can copy-paste 16-bit components from the sandbox.&lt;br /&gt;
&lt;br /&gt;
== Wire Spaghetti ==&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/828292123936948244/1357728243456806984 RAM broken in Wire Spaghetti]&lt;br /&gt;
&lt;br /&gt;
Various issues with RAM in Wire Spaghetti and following levels.&lt;br /&gt;
&lt;br /&gt;
These stem from the lack of API in &amp;lt;code&amp;gt;text.si&amp;lt;/code&amp;gt; to identify which RAM block is the program and which is the register file.&lt;br /&gt;
&lt;br /&gt;
Before attempting the following workarounds, enable the bit-width tool by following the steps in the [[Known issues/2.0.16#Symphony Counter]] section above to modify your &amp;lt;code&amp;gt;levels.txt&amp;lt;/code&amp;gt; file.  The bit-width tool will then be displayed below the wire comment tool and is required to set the bit size of the ram blocks during the following steps.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WORKAROUND A&#039;&#039;&#039;:&lt;br /&gt;
# Delete the RAM for both register file and program.&lt;br /&gt;
# Set the bit width tool to 16, if you don&#039;t have it, see above or move onto B below.&lt;br /&gt;
# Place a 16-bit RAM for the register file (the size is hidden).&lt;br /&gt;
# Set the bit width tool to 32.&lt;br /&gt;
# Place a 32-bit RAM (again size is hidden) for the program.&lt;br /&gt;
# These steps should be taken in order. This might take several attempts, for reasons that are unclear to me.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WORKAROUND B&#039;&#039;&#039;:&lt;br /&gt;
# Delete the RAM for both register file and program.&lt;br /&gt;
# Copy-paste a 16-bit RAM from sandbox for the register file, then&lt;br /&gt;
# Copy-paste a 32-bit RAM from sandbox for the program.&lt;br /&gt;
# These steps should be taken in order. This might take several attempts, for reasons that are unclear to me.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WORKAROUND C&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
If the above doesn&#039;t work, you can also try this, which has been reported to help.&lt;br /&gt;
# Remove the program counter (PC) from the level;&lt;br /&gt;
# Switch schematics to anything else for a moment;&lt;br /&gt;
# Return to the level;&lt;br /&gt;
# Replace the PC in its original place&lt;br /&gt;
&lt;br /&gt;
[https://discord.com/channels/828292123936948244/1357729558547398837 Wire Spaghetti level log out of date]&lt;br /&gt;
&lt;br /&gt;
The level log for Wire Spaghetti states:&lt;br /&gt;
3. Click &amp;quot;Edit link components&amp;quot; on the program component and then &amp;quot;Add register file&amp;quot;. (do not connect the zr register)&lt;br /&gt;
&lt;br /&gt;
This is now wrong, zr should be linked, as part of the register file.&lt;br /&gt;
&lt;br /&gt;
=== RAM is byte addressed ===&lt;br /&gt;
&lt;br /&gt;
The level log does not make clear that RAM is byte addressed (this is a change from 0.1059).&lt;br /&gt;
&lt;br /&gt;
Since the register file entries are 16-bits (2 bytes) wide the register address should be adjusted to match.&lt;br /&gt;
&lt;br /&gt;
=== r9 should have value 65535 not 0 ===&lt;br /&gt;
&lt;br /&gt;
If you see this error on tick 62, then you are writing to and reading from the zero register, this is an error in your circuit, not a bug in the game.&lt;br /&gt;
&lt;br /&gt;
== Integrating ALU ==&lt;br /&gt;
&lt;br /&gt;
The ALU you previous built has a multiply instruction. The tests for Integrating ALU assume mul returns zero.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WORKAROUND&#039;&#039;&#039;: Delete or otherwise disable the multiply componet inside the ALU custom component.&lt;br /&gt;
&lt;br /&gt;
== RAM ==&lt;br /&gt;
&lt;br /&gt;
=== The level log is incomplete. ===&lt;br /&gt;
&lt;br /&gt;
There are 4 new instructions, not the 2 listed in the level log:&lt;br /&gt;
* &amp;lt;code&amp;gt;0: load_8&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1: store_8&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2: load_16&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;3: store_16&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The level log incorrectly states put the store port at the top, they should (for this level) be at the bottom.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WORKAROUND&#039;&#039;&#039;:&lt;br /&gt;
Add to the existing program block from bottom to top:&lt;br /&gt;
# a 16-bit store port, then&lt;br /&gt;
# an 8-bit store.&lt;br /&gt;
# Move the existing 32 bit load port above the store ports, followed by&lt;br /&gt;
# a 16-bit load port, and&lt;br /&gt;
# an 8-bit load port.&lt;br /&gt;
&lt;br /&gt;
== Instruction aliases ==&lt;br /&gt;
&lt;br /&gt;
=== Level fails to compile due to wrong meta.txt ===&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;code&amp;gt;Turing Complete\campaign\symphony_9_aliases\meta.txt&amp;lt;/code&amp;gt; and delete the last 4 lines of default_assembly, so that the section reads&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;default_assembly = `&lt;br /&gt;
in r1&lt;br /&gt;
mov r2, r1&lt;br /&gt;
neg r3, r2&lt;br /&gt;
not r4, r2&lt;br /&gt;
`&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Level fails due to wrong test.si ===&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;code&amp;gt;Turing Complete\campaign\symphony_9_aliases\test.si&amp;lt;/code&amp;gt; and replace the it all with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;def get_input($scratch_space: [Int], tick: Int, $inputs: [Int]) {&lt;br /&gt;
    inputs[0] = 10&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
def check_output($scratch_space: [Int], tick: Int, inputs: [Int], outputs: [Int]) TestResult {&lt;br /&gt;
    switch tick&lt;br /&gt;
        0 {&lt;br /&gt;
            if get_register_value(1) != 10 {&lt;br /&gt;
                set_error(`The first instruction is supposed to move the input value (10) to r1.`)&lt;br /&gt;
                return fail&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        1 {&lt;br /&gt;
            if get_register_value(2) != 10 {&lt;br /&gt;
                set_error(`The first instruction is supposed to move the input value (10) to r2.`)&lt;br /&gt;
                return fail&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        2 {&lt;br /&gt;
            if get_register_value(3) != 65526 {&lt;br /&gt;
                set_error(`Negate r2 and store the result (65526) in r3.`)&lt;br /&gt;
                return fail&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        3 {&lt;br /&gt;
            if get_register_value(4) != 65525 {&lt;br /&gt;
                set_error(`NOT r2 and store the result (-9) in r4.`)&lt;br /&gt;
                return fail&lt;br /&gt;
            }&lt;br /&gt;
            return win&lt;br /&gt;
        } &lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Various levels ==&lt;br /&gt;
&lt;br /&gt;
A number of levels&#039; meta.txt have out of date spec.isa, these can be fixed with a simple regex&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
s/(^|  )([01][01])0/$10$2/g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>DemiurgE</name></author>
	</entry>
</feed>