<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://stationeers-wiki.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Traineratwot</id>
	<title>Stationeers Community Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://stationeers-wiki.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Traineratwot"/>
	<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/Special:Contributions/Traineratwot"/>
	<updated>2026-04-04T10:30:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Integrated_Circuit_(IC10)&amp;diff=20063</id>
		<title>Integrated Circuit (IC10)</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Integrated_Circuit_(IC10)&amp;diff=20063"/>
		<updated>2024-04-04T07:07:54Z</updated>

		<summary type="html">&lt;p&gt;Traineratwot: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
[[Category:Circuits]]&lt;br /&gt;
[[Category:MIPS Programming]]&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{Itembox&lt;br /&gt;
 | name        = Integrated Circuit (IC10)&lt;br /&gt;
 | image       = [[File:IC 10.png|thumb|IC Housing and IC10 disassembled]]&lt;br /&gt;
 | createdwith = [[Electronics Printer]]&lt;br /&gt;
 | cost        = 10 [[Gold]], 4 [[Steel]], 5 [[Electrum]], 2 [[Solder]]&lt;br /&gt;
 | stacks      = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
A chip that is programmed with a [[computer]]. Place the circuit in a [[Kit (IC Housing)|IC Housing]] or directly into the programmable slot of certain devices, e.g. [[Kit (Atmospherics)|Atmospherics]].  The [[MIPS]] language is used.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Where to get programs =&lt;br /&gt;
* Write one by yourself using the [[computer]] or [[Laptop]].&lt;br /&gt;
* Paste whatever you have found on the internet into your [[computer]].&lt;br /&gt;
* Load from your private library program you have saved previously (even from different savegame).&lt;br /&gt;
* Get one from Steam Workshop (first subscribe in steam, then in game it will be available in &amp;quot;library&amp;quot; on computer).&lt;br /&gt;
&lt;br /&gt;
= How to create programs =&lt;br /&gt;
== You&#039;ll need ==&lt;br /&gt;
# Basic knowledge about math and logic&lt;br /&gt;
# Whatever you&#039;re intending to program (e.g.: cycling airlock) you must be learnt to do manually (e.g.: close doors, turn on vents, etc)&lt;br /&gt;
# Learn the MIPS programming language. MIPS is real world low-level (i.e. close to hardware) programming language. IC10 is MIPS with some Stationeers flavor added. It is fairly simple and compact. Due to its simplicity MIPS is not suitable for big programs but you re not going to develop those in the game anyways.&lt;br /&gt;
&lt;br /&gt;
== How to start getting in the MIPS programing ==&lt;br /&gt;
Get some simple program (even 10 lines will do), run it in Stationeers to see what it does and then read the text. Look into ingame editor help pages to decrypt keywords. MIPS keywords are abbreviations of English words and mostly make sense, eg. &amp;lt;code&amp;gt;beqz r0 foobar&amp;lt;/code&amp;gt; means &amp;quot;&#039;&#039;&#039;B&#039;&#039;&#039;ranch (jump) to line labeled foobar if r0 &#039;&#039;&#039;EQ&#039;&#039;&#039;uals to &#039;&#039;&#039;Z&#039;&#039;&#039;ero&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= How to flash program onto the IC chip =&lt;br /&gt;
# Setup a [[Computer]], wire it to power.&lt;br /&gt;
# Insert a [[Motherboard (IC Editor)]] in it.&lt;br /&gt;
# Place [[Kit (IC Housing)|IC Housing]].&lt;br /&gt;
# Wire DATA (green, right) port of the computer to DATA (green, bottom) port on the IC Housing.&lt;br /&gt;
## Unless you&#039;re going to actually use/test your program in this particular IC Housing you do not need to power it.&lt;br /&gt;
# Insert [[Integrated Circuit (IC10)]] into [[Kit (IC Housing)|IC Housing]].&lt;br /&gt;
# Turn on the Computer, look at its screen and see if your IC Housing is listed and selected in the drop-down selector. You can have several IC Housings on the same data network, in that case better be renaming them using [[Labeller]]. The IC10 Integrated Circuit itself can also be labeled (and painted).&lt;br /&gt;
## Optional: click &amp;quot;Import&amp;quot; to retrieve a program from the [[Integrated Circuit (IC10)]] into the computer.&lt;br /&gt;
# Click &amp;quot;Edit&amp;quot; to open the code editor. Write/load from &amp;quot;Library&amp;quot;/paste your program, click &amp;quot;Confirm&amp;quot;.&lt;br /&gt;
# Now Computer contains the new program and Integrated Circuit still contains old one (or empty program). Click &amp;quot;Export&amp;quot; on the computer to copy the program into the Circuit. If the IC housing is powered the program will immediately run. You can repeat &amp;quot;Export&amp;quot; as many times as you want and reuse old Circuits.&lt;br /&gt;
# When Circuit is picked up size of the stored program in bytes is shown.&lt;br /&gt;
&lt;br /&gt;
Note: Steps 1-6 can be used with a [[Laptop]] now as well.  The laptop includes an IC housing so you don&#039;t have to place your own and wire it to edit chips.  This is limited to editing chips that are in the laptop (1 at a time) and cannot be used to edit chips already on the network.&lt;br /&gt;
&lt;br /&gt;
= How to make use of programmed IC Integrated Circuit =&lt;br /&gt;
# Place [[Kit (IC Housing)|IC Housing]], wire it to power, insert the Circuit&lt;br /&gt;
# Connect DATA (green, bottom) port on the IC Housing to machines you want to control. Some machines like an [[Autolathe]] have a DATA port, you need to use it (or both DATA and POWER). Some machines like a [[Stacker]] only have &amp;quot;universal&amp;quot; port.&lt;br /&gt;
# Unless you&#039;re going to modify/debug your program on place you do not require a [[Computer]] here.&lt;br /&gt;
# Using [[Screwdriver]] adjust six (or less) screws according to program description/purpose. Many programs do assign labels to screws using &amp;lt;code&amp;gt;alias&amp;lt;/code&amp;gt; command (that&#039;s considered good style), to take benefit of it you can turn on IC Housing for a short time (that way it will blink yellow, it&#039;s okay). If all screws are set to &amp;quot;None&amp;quot; a misconfigured program can do no harm.&lt;br /&gt;
# Turn on the IC Housing.&lt;br /&gt;
&lt;br /&gt;
= How large a program can be =&lt;br /&gt;
There are 128 lines each being 52 characters long. Each character (incl. line break) takes 2 bytes. Maximum size IC chip will show is 13566.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* [[WebEditor]] — https://ic10.dev/&lt;br /&gt;
* [[MIPS]] — basic info and command reference&lt;br /&gt;
* [[Advanced IC10 Programming]]&lt;br /&gt;
* [https://stationeering.com/tools/ic Stationeering.com] by Melair — online emulator and command reference.&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Traineratwot</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=20062</id>
		<title>Advanced IC10 Programming</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=20062"/>
		<updated>2024-04-04T07:07:13Z</updated>

		<summary type="html">&lt;p&gt;Traineratwot: /* VS code extension */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:MIPS Programming]]&lt;br /&gt;
= VS code extension =&lt;br /&gt;
&#039;&#039;&#039;For convenient operation, there is an extension for the visual studio code IDE&#039;&#039;&#039; [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10 Link]&lt;br /&gt;
&lt;br /&gt;
Web version: https://ic10.dev/&lt;br /&gt;
&lt;br /&gt;
and compiler [http://traineratwot.aytour.ru/wiki/icx ICX]&lt;br /&gt;
&lt;br /&gt;
= Flow Control And Data Manipulation =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: This level of coding is NOT needed to play the game to it&#039;s full extent. it&#039;s aimed at people looking for custom, self-inspired challenges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Devices By Register ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can use a register to access the device based on pin number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt; r0 0&lt;br /&gt;
next:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Horizontal 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Vertical 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 On 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt; r0 r0 1&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt; r0 6 next&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A function is just a label we jump to, but using the -al version of branch instructions (jal, beqzal) as they store the return address into the special &#039;&#039;&#039;ra&#039;&#039;&#039; register.&lt;br /&gt;
When calling a function from another function (or from itself), ra will be overwritten so we have to store it in the stack and take it out when the function completes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If we hadn&#039;t used the stack, the jump at the end of _MyFunction would take us to the call of _MySecondFunction instead of the main section.&lt;br /&gt;
&lt;br /&gt;
== Loops ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The challenge with loops is to keep them clean. Relative jumps are a great way to save lines but they can quickly turn code messy and adding lines might break them if you overlook them. If code length is not an issue, stick to labels where possible.&lt;br /&gt;
&lt;br /&gt;
== Indexing With Relative Jump ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jr&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;123&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 0&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;456&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;789&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 2&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Use this to set one or more parameters or call functions using an index number you calculated (or read from a dial button). We multiply it by 2 because we need space for a jump after each move command so we don&#039;t run the subsequent ones and we add 1 because for a 0 index &amp;quot;jr 0&amp;quot; would lock up our IC.&lt;br /&gt;
&lt;br /&gt;
== Redefining Aliases ==&lt;br /&gt;
&lt;br /&gt;
Say you have a complex function that manipulates a device (reads/writes multiple parameters, controls timing etc) and you want to reuse it for multiple devices. You could copy paste the whole function, or you could redefine the alias you used and point it to another device, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrent&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrent&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;NOTE: This wouldn&#039;t work in real languages since aliases and defines are just directives for the (pre)compiler, they&#039;re not evaluated during runtime by the CPU&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can combine this with a loop and indexing to run your function on multiple devices automatically.&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_UpdateReference&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_FunctionForDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_UpdateReference:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jr&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 0&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 2&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d3&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 3&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_FunctionForDevice:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Manipulate dCurrentDevice&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Device Manipulation =&lt;br /&gt;
&lt;br /&gt;
== Timing And Parameters ==&lt;br /&gt;
&lt;br /&gt;
Some devices don&#039;t react well to having parameters changed while they&#039;re performing an action such as import or export. Notable mentions are the stacker, sorter and the vending machine. You can avoid them locking up (or getting jammed with items) either by adding delays (yield, sleep) or by actively waiting for their slots to become unoccupied, or their Activation to become 0.&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;WaitForDevices:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;yield&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dSorter&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Occupied&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgtz&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;WaitForDevices&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dSorter&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Occupied&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgtz&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;WaitForDevices&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dSorter&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Occupied&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgtz&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;WaitForDevices&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dVender&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Occupied&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgtz&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;WaitForDevices&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dVender&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Occupied&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgtz&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;WaitForDevices&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The slot reader labels slots from 1 but in the IC they start at 0. It is also a good idea to check any device involved in your solution with both a logical and slot reader as the current databases may not list all existing slots or parameters. You should always make use of all data available from devices as they may greatly simplify your project.&lt;br /&gt;
&lt;br /&gt;
Using delays is convenient, but has downsides. You&#039;re giving up real-time control over the process and may miss certain events or react too late and cause a device to jam. You also need to consider that code takes time to run, and for example if you have a complicated condition for setting the output of a sorter depending on the item that entered it, it may be better to leave it OFF by default and only turn it on once the output is correctly set. (Devices react differently to being fed items while powered down. ie the stacker will keep it in the Import slot but the vending machine will completely import it, so make sure to manually test everything you can prior to automating it)&lt;br /&gt;
= Sample Projects =&lt;br /&gt;
&lt;br /&gt;
== Vending Machine Exporter ==&lt;br /&gt;
&lt;br /&gt;
[[Vending_Machine_Export_IC10]]&lt;/div&gt;</summary>
		<author><name>Traineratwot</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=IC10&amp;diff=12491</id>
		<title>IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=IC10&amp;diff=12491"/>
		<updated>2022-07-04T16:37:34Z</updated>

		<summary type="html">&lt;p&gt;Traineratwot: fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:MIPS Programming]]&lt;br /&gt;
=MIPS scripting language for IC10 housings / chips=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Text after a # will be ignored to the end of the line. The amount of white&lt;br /&gt;
# space between arguments isn&#039;t important, but new lines start a new command.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Registers==&lt;br /&gt;
The IC contains 16 registers, numbered r0-r15. Think of these as variables in other programming languages. In fact, you can name them with the alias command (see below).&lt;br /&gt;
&lt;br /&gt;
To set a register directly (such as r0=2), use the &amp;lt;b&amp;gt;move&amp;lt;/b&amp;gt; command. To read a value from a device, use &amp;lt;b&amp;gt;l&amp;lt;/b&amp;gt; (load). To write a value back to a device, use &amp;lt;b&amp;gt;s&amp;lt;/b&amp;gt; (set). Note that&lt;br /&gt;
like most machine languages, the &amp;lt;i&amp;gt;destination&amp;lt;/i&amp;gt; goes first, so instructions always look like: action destination source.&lt;br /&gt;
&lt;br /&gt;
Here are some examples set a register, reading a value from a device and writing a value to device:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;move r0 10&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Sets register r0 to the value 10&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;move r0 r1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Copies the value of register r1 to register r0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l r0 d0 Temperature&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Reads the Temperature parameter from device d0 and places the value in register r0.&lt;br /&gt;
Note: not all devices have a Temperature parameter, check the in-game stationpedia.&lt;br /&gt;
&lt;br /&gt;
To set a device specific value (like &amp;quot;On&amp;quot;), you can write into this value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;s d0 On r0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Writes the value from register &#039;&#039;&#039;r0&#039;&#039;&#039; out to &#039;&#039;&#039;On&#039;&#039;&#039; parameter of device &#039;&#039;&#039;d0&#039;&#039;&#039;. In this example the device will be turned On, if valve of register r0 equals 1, otherwise (register r0 equals 0) it will turned off. See section [[MIPS#Device_Variables|Device Variables]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s recommended to use labels (like: &#039;&#039;someVariable&#039;&#039;) instead of a direct reference to the register. See &#039;&#039;&#039;alias&#039;&#039;&#039; in section [[MIPS#Instructions|Instructions]].&lt;br /&gt;
&lt;br /&gt;
There are two more registers. One called &#039;&#039;&#039;ra&#039;&#039;&#039; (return address) and one called &#039;&#039;&#039;sp&#039;&#039;&#039; (stack pointer). The &#039;&#039;&#039;ra&#039;&#039;&#039; is used by certain jump and branching instructions (those ending with &#039;&#039;&#039;-al&#039;&#039;&#039;) to remember which line in the script it should return to. The &#039;&#039;&#039;sp&#039;&#039;&#039; tracks the next index within the stack (a memory that can store up to 512 values) to be pushed (written) to or popped (read) from. Neither &#039;&#039;&#039;ra&#039;&#039;&#039; or &#039;&#039;&#039;sp&#039;&#039;&#039; is protected, their values can be changed by instructions like any other register.&lt;br /&gt;
&lt;br /&gt;
==Device Ports==&lt;br /&gt;
ICs can interact with up to 6 other devices via d0 - d5, as well as the device it&#039;s attached to via db. To change or set a device, use a screwdriver and adjust the device in the IC housing. You can read or set any of the device&#039;s properties, so it is possible to do things like read the pressure or oxygen content of a room on the same Device port. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;l&#039;&#039;&#039; (load) or &#039;&#039;&#039;s&#039;&#039;&#039; (set) instructions you have to read or set these values to your device. Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l r0 d0 Temperature&amp;lt;/code&amp;gt; #Reads the &#039;&#039;&#039;Temperature&#039;&#039;&#039; from an atmosphere sensor at device port &#039;&#039;&#039;d0&#039;&#039;&#039; into register &#039;&#039;&#039;r0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;s d1 Setting r0 &amp;lt;/code&amp;gt; # Writes the value of the register &#039;&#039;&#039;r0&#039;&#039;&#039; to the device on port &#039;&#039;&#039;d1&#039;&#039;&#039; into the variable &#039;&#039;&#039;Setting&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Labels==&lt;br /&gt;
Labels are used to make it easier to jump between lines in the script. The label will have a numerical value that is the same as its line number. Even though it&#039;s possible to use a labels value for calculations, doing so is a bad idea since any changes to the code can change the line numbers of the labels.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;main:&amp;lt;/code&amp;gt; # define a jump mark with label &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;j main&amp;lt;/code&amp;gt; # jumps back to &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Constants==&lt;br /&gt;
Instead of using a register to store a fixed value, a constant can be made. Using this name will refer to the assigned value. With the help of Constants you can save register places.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define pi 3.14159&amp;lt;/code&amp;gt; # defines a Constant with name &#039;&#039;&#039;pi&#039;&#039;&#039; and set it&#039;s value to 3.14159&lt;br /&gt;
&lt;br /&gt;
You can use these constants like any other variables (see: alias in section [[MIPS#Instructions|Instructions]]). Example:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move r0 pi&amp;lt;/code&amp;gt; # set the value of register &#039;&#039;&#039;r0&#039;&#039;&#039; to the value of constant named &#039;&#039;&#039;pi&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Indirect referencing==&lt;br /&gt;
This is a way of accessing a register by using another register as a pointer. Adding an additional r infront of the register turns on this behaviour. The value stored in the register being used as the pointer must be between 0 to 15, this will then point to a register from r0 to r15, higher or lower values will cause an error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;move r0 5&amp;lt;/code&amp;gt; stores the value 5 in r0&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move rr0 10&amp;lt;/code&amp;gt; is now the same as &amp;lt;code&amp;gt;move r5 10&amp;lt;/code&amp;gt; since r0 has the value 5, rr0 points at the register r5&lt;br /&gt;
&lt;br /&gt;
Additional r&#039;s can be added to do indirect referencing multiple times in a row.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move r1 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move r2 3&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move rrr1 4&amp;lt;/code&amp;gt; is now the same as &amp;lt;code&amp;gt;move r3 4&amp;lt;/code&amp;gt; since r1 points at r2 which points at r3&lt;br /&gt;
&lt;br /&gt;
This also works with devices&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move r0 2&amp;lt;/code&amp;gt; stores the value 2 in r0&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;s dr0 On 1&amp;lt;/code&amp;gt; is now the same as &amp;lt;code&amp;gt;s d2 On 1&amp;lt;/code&amp;gt;, r0 has the value 2 so dr0 points at d2&lt;br /&gt;
&lt;br /&gt;
==Debugging advices==&lt;br /&gt;
The value stored in a register or variable can easily be displayed by writing it to the Setting parameter of the IC housing. This has no side effects. To see the value, just stand close to the IC housing and look directly at the housing.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;s db Setting r0&amp;lt;/code&amp;gt;. # sets/writes the value of register &#039;&#039;&#039;r0&#039;&#039;&#039; into the parameter &#039;&#039;&#039;Setting&#039;&#039;&#039; of the IC Housing(&#039;&#039;&#039;db&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
To check if a certain block of code is executed, use the above trick but with a random number that you choose, like the line number.&amp;lt;br&amp;gt; This example will display the number 137 on the IC housing.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;s db Setting 137&amp;lt;/code&amp;gt;  # sets/writes the number 137 into the parameter &#039;&#039;&#039;Setting&#039;&#039;&#039; of the IC Housing(&#039;&#039;&#039;db&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
A [[Cartridge#Configuration|configuration cartridge]] installed in a [[Handheld_Tablet|tablet]]  can be used to see all available values and configuration parameter for all devices you focus on.&lt;br /&gt;
&lt;br /&gt;
==Learning MIPS==&lt;br /&gt;
MIPS can be difficult to get started with. So here is a list of instructions that are useful for beginners. These can be used to write many different scripts.&lt;br /&gt;
&lt;br /&gt;
General:&lt;br /&gt;
* alias (make the script easier to read by assigning a name to a register or device, example: &amp;lt;code&amp;gt;alias rTemperature r15&amp;lt;/code&amp;gt;)&lt;br /&gt;
* label: (where &amp;quot;label&amp;quot; can be replaced with almost any word, jump and branch instructions will go to these, example: &amp;lt;code&amp;gt;start:&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt; (pause for 1-tick and then resume, if not used the script will automatically pause for 1-tick after 128 lines)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Jumps:&lt;br /&gt;
*&amp;lt;code&amp;gt;j someLabelName&amp;lt;/code&amp;gt; # jump to line with &#039;&#039;&#039;someLabelName&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;jal someLabelName&amp;lt;/code&amp;gt; # stores the next line number into the register ra (return address) and then jump to &#039;&#039;&#039;someLabelName&#039;&#039;&#039;)&lt;br /&gt;
*&amp;lt;code&amp;gt;j ra&amp;lt;/code&amp;gt; # jump to register ra (return address)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Branching (jump-if):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
beq (branch if equal)&lt;br /&gt;
bne (branch if not-equal)&lt;br /&gt;
bgt (branch if greater than)&lt;br /&gt;
blt (branch if less than)&lt;br /&gt;
The suffix -al can be added to each of these (example: beqal) to save the next line number into the &amp;quot;return address&amp;quot; register&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Device interactions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
l (load)&lt;br /&gt;
lb (load batch, requires one of the following: Average / Sum / Minimum / Maximum)&lt;br /&gt;
ls (load slot)&lt;br /&gt;
s (store)&lt;br /&gt;
sb (store batch)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Logic and Math:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
seqz (common NOT-gate: turns 0 into 1, and all other values into 0)&lt;br /&gt;
move&lt;br /&gt;
add (addition)&lt;br /&gt;
sub (subtraction)&lt;br /&gt;
mul (multiplication)&lt;br /&gt;
div (division)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Common device variables:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
On (1 is on, 0 is off)&lt;br /&gt;
Open (1 is open, 0 is closed)&lt;br /&gt;
Setting (meaning varies between devices, example: a LED display(console) will show this value)&lt;br /&gt;
Activate (1 usually means running, example: a Daylight sensor is 1 when the sun shines on it)&lt;br /&gt;
Temperature (in Kelvin, Celsius + 273.15)&lt;br /&gt;
Pressure (in kPa)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Notes:&lt;br /&gt;
&amp;lt;br&amp;gt;-All instructions and variables can be seen in-game in the MIPS editor window by clicking the &amp;quot;f&amp;quot;, &amp;quot;x&amp;quot; and &amp;quot;s(x)&amp;quot; buttons on the top right.&lt;br /&gt;
&amp;lt;br&amp;gt;-The stationpedia is the best source to see which variables are available to each device.&lt;br /&gt;
&amp;lt;br&amp;gt;-Most scripts are loops, they end with a jump instruction that leads back up to the start. Otherwise they will just run once and then stop.&lt;br /&gt;
&lt;br /&gt;
Two practice scripts:&lt;br /&gt;
&amp;lt;br&amp;gt;Automatic Night Light: Load &amp;quot;Activate&amp;quot; from a Daylight sensor, flip the value with a NOT-gate, store the value to the &amp;quot;On&amp;quot; variable of one or more lights.&lt;br /&gt;
&amp;lt;br&amp;gt;Automatic Wall Cooler: Read &amp;quot;Temperature&amp;quot; from a Gas Sensor. Branch if the value is greater than X, turn on the cooler. Branch if the value is less than Y, turn off the cooler. (Wall coolers need a minumum of 12.5 kPa pressure in the connected pipe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Instructions=&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;alias&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;alias&lt;br /&gt;
:alias str r? d? # labels register or device reference with name.  When alias is applied to a device, it will affect what shows on the screws in the IC base.  (housing)&lt;br /&gt;
&amp;lt;code&amp;gt;alias vTemperature r0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;alias dAutoHydro1 d0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;move&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;move    &lt;br /&gt;
:d s     # stores the value of s in d&lt;br /&gt;
&amp;lt;code&amp;gt;move r0 42 # Store 42 in register 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;l&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;load&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;l (load)&lt;br /&gt;
:l r# d# parameter&lt;br /&gt;
Reads from a device (d#) and stores the value in a register (r#)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l r0 d0 Setting&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Read from the device on d0 into register 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l r1 d5 Pressure&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Read the pressure from a sensor&lt;br /&gt;
&lt;br /&gt;
This also works with aliases. For example:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
alias Sensor d0 &amp;lt;br/&amp;gt;&lt;br /&gt;
l r0 Sensor Temperature&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ls&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;load slot&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ls (load slot)&lt;br /&gt;
:ls r# d# slotNum parameter&lt;br /&gt;
Reads from a slot (slotNum) of a device (d#)  and stores the value in a register (r#)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls r0 d0 2 Occupied&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Read from the second slot of device on d0, stores 1 in r0 if it&#039;s occupied, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
And here is the code to read the charge of an AIMeE:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
alias robot d0 &amp;lt;br/&amp;gt;&lt;br /&gt;
alias charge r0 &amp;lt;br/&amp;gt;&lt;br /&gt;
ls charge robot 0 Charge &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;s&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;set&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;s (set)&lt;br /&gt;
:s d# parameter r#&lt;br /&gt;
Writes a setting to a device. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;s d0 Setting r0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;add&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;add     &lt;br /&gt;
:d s t   # calculates s + t and stores the result in d&lt;br /&gt;
&amp;lt;code&amp;gt;add r0 r1 1 # add 1 to r1 and store the result as r0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;add r0 r0 1 # increment r0 by one&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;sub&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;sub     &lt;br /&gt;
:d s t   # calculates s - t and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;mul&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;mul     &lt;br /&gt;
:d s t   # calculates s * t and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;div&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;div     &lt;br /&gt;
:d s t   # calculates s / t and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;mod&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;mod     &lt;br /&gt;
:d s t   &lt;br /&gt;
::# calculates s mod t and stores the result in d. Note this&lt;br /&gt;
::# doesn&#039;t behave like the % operator - the result will be &lt;br /&gt;
::# positive even if the either of the operands are negative&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;slt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;slt     &lt;br /&gt;
:d s t   # stores 1 in d if s &amp;lt; t, 0 otherwise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sqrt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;sqrt    &lt;br /&gt;
:d s     # calculates sqrt(s) and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;round   &lt;br /&gt;
:d s     # finds the rounded value of s and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;trunc&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;trunc   &lt;br /&gt;
:d s     # finds the truncated value of s and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;ceil&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ceil   &lt;br /&gt;
: d s     # calculates the ceiling of s and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;floor&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;floor  &lt;br /&gt;
: d s     # calculates the floor of s and stores the result in d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;max&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;max    &lt;br /&gt;
: d s t   # calculates the maximum of s and t and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;min&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;min    &lt;br /&gt;
: d s t   # calculates the minimum of s and t and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;abs&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;abs    &lt;br /&gt;
: d s     # calculates the absolute value of s and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;log&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;log    &lt;br /&gt;
: d s     # calculates the natural logarithm of s and stores the result&lt;br /&gt;
::# in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;exp&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;exp    &lt;br /&gt;
: d s     # calculates the exponential of s and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;rand&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;rand   &lt;br /&gt;
: d       # selects a random number uniformly at random between 0 and 1&lt;br /&gt;
::# inclusive and stores the result in d&lt;br /&gt;
&lt;br /&gt;
::# boolean arithmetic uses the C convention that 0 is false and any non-zero&lt;br /&gt;
::# value is true.&lt;br /&gt;
&amp;lt;div id=&amp;quot;and&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;and    &lt;br /&gt;
: d s t   # stores 1 in d if both s and t have non-zero values,&lt;br /&gt;
::# 0 otherwise&lt;br /&gt;
&amp;lt;div id=&amp;quot;or&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;or     &lt;br /&gt;
: d s t   # stores 1 in d if either s or t have non-zero values,&lt;br /&gt;
::# 0 otherwise&lt;br /&gt;
&amp;lt;div id=&amp;quot;xor&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;xor    &lt;br /&gt;
: d s t   # stores 1 in d if exactly one of s and t are non-zero,&lt;br /&gt;
::# 0 otherwise&lt;br /&gt;
&amp;lt;div id=&amp;quot;nor&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;nor &lt;br /&gt;
:    d s t   # stores 1 in d if both s and t equal zero, 0 otherwise&lt;br /&gt;
::# Lines are numbered starting at zero&lt;br /&gt;
&amp;lt;div id=&amp;quot;j&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;j&lt;br /&gt;
:             a # jumps to line a.&lt;br /&gt;
&amp;lt;div id=&amp;quot;bltz&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;bltz&lt;br /&gt;
:      s   a # jumps to line a if s &amp;lt;  0&lt;br /&gt;
&amp;lt;div id=&amp;quot;blez&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;blez &lt;br /&gt;
:     s   a # jumps to line a if s &amp;lt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;bgez&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;bgez &lt;br /&gt;
:     s   a # jumps to line a if s &amp;gt;= 0&lt;br /&gt;
&amp;lt;div id=&amp;quot;bgtz&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;bgtz&lt;br /&gt;
:      s   a # jumps to line a if s &amp;gt;  0&lt;br /&gt;
&amp;lt;div id=&amp;quot;beq&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;beq &lt;br /&gt;
:      s t a # jumps to line a if s == t&lt;br /&gt;
&amp;lt;div id=&amp;quot;bne&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;bne &lt;br /&gt;
:      s t a # jumps to line a if s != t&lt;br /&gt;
&amp;lt;div id=&amp;quot;bdseal&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;bdseal&lt;br /&gt;
:    d? a(r?|num) # Jump execution to line a and store current line number if device d? is set.&lt;br /&gt;
&amp;lt;code&amp;gt;bdseal d0 32 #Store line number and jump to line 32 if d0 is assigned.&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;bdseal dThisVictim HarvestCrop #Store line in ra and jump to sub HarvestCrop if device dThisVictim is assigned.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;yield&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;yield           &lt;br /&gt;
: 	# ceases code execution for this power tick&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;lb&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;lb&lt;br /&gt;
:      r? typeHash var batchMode # Loads var from all output network devices with provided typeHash  using provided batchMode: Average(0), Sum (1), Minimum (2), Maximum (3). Can be used word or number. Result store into r?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sb&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;sb&lt;br /&gt;
:      typeHash var r? # Store register r? to var on all output network devices with provided typeHash&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
; #&lt;br /&gt;
:     # The following text will be ignored during compiling; use this to create comments.&lt;br /&gt;
&lt;br /&gt;
[https://www.cs.tufts.edu/comp/140/lectures/Day_3/mips_summary.pdf Other examples]&lt;br /&gt;
&lt;br /&gt;
== Conditional functions cheatsheet ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! suffix !! description !! branch to line !! branch and store return address !! relative jump to line !! set register&lt;br /&gt;
|-&lt;br /&gt;
| prefix: ||  || b- || b-al || br- || s-&lt;br /&gt;
|-&lt;br /&gt;
|  || unconditional || j    || jal    || jr    || &lt;br /&gt;
|-&lt;br /&gt;
| -eq  || if a == b || beq  || beqal  || breq  || seq&lt;br /&gt;
|-&lt;br /&gt;
| -eqz || if a == 0 || beqz || beqzal || breqz || seqz&lt;br /&gt;
|-&lt;br /&gt;
| -ge  || if a &amp;gt;= b || bge  || bgeal  || brge  || sge&lt;br /&gt;
|-&lt;br /&gt;
| -gez || if a &amp;gt;= 0 || bgez || bgezal || brgez || sgez&lt;br /&gt;
|-&lt;br /&gt;
| -gt  || if a &amp;gt; b  || bgt  || bgtal  || brgt  || sgt&lt;br /&gt;
|-&lt;br /&gt;
| -gtz || if a &amp;gt; 0  || bgtz || bgtzal || brgtz || sgtz&lt;br /&gt;
|-&lt;br /&gt;
| -le  || if a &amp;lt;= b || ble  || bleal  || brle  || sle&lt;br /&gt;
|-&lt;br /&gt;
| -lez || if a &amp;lt;= 0 || blez || blezal || brlez || slez&lt;br /&gt;
|-&lt;br /&gt;
| -lt  || if a &amp;lt; b  || blt  || bltal  || brlt  || slt&lt;br /&gt;
|-&lt;br /&gt;
| -ltz || if a &amp;lt; 0  || bltz || bltzal || brltz || sltz&lt;br /&gt;
|-&lt;br /&gt;
| -ne  || if a != b || bne  || bneal  || brne  || sne&lt;br /&gt;
|-&lt;br /&gt;
| -nez || if a != 0 || bnez || bnezal || brnez || snez&lt;br /&gt;
|-&lt;br /&gt;
| -dns || if device d is not set          || bdns || bdnsal || brdns || sdns&lt;br /&gt;
|-&lt;br /&gt;
| -dse || if device d is set              || bdse || bdseal || brdse || sdse&lt;br /&gt;
|-&lt;br /&gt;
| -ap  || if a approximately equals b     || bap  || bapal  || brap  || sap&lt;br /&gt;
|-&lt;br /&gt;
| -apz || if a approximately equals 0     || bapz || bapzal || brapz || sapz&lt;br /&gt;
|-&lt;br /&gt;
| -na  || if a not approximately equals b || bna  || bnaal  || brna  || sna&lt;br /&gt;
|-&lt;br /&gt;
| -naz || if a not approximately equals 0 || bnaz || bnazal || brnaz || snaz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All &amp;lt;code&amp;gt;b-&amp;lt;/code&amp;gt; commands require target line as last argument, all &amp;lt;code&amp;gt;s-&amp;lt;/code&amp;gt; commands require register to store result as first argument. All &amp;lt;code&amp;gt;br-&amp;lt;/code&amp;gt; commands require number to jump relatively as last argument. e.g. &amp;lt;code&amp;gt;breq a b 3&amp;lt;/code&amp;gt; means if a=b then jump to 3 lines after.&lt;br /&gt;
&lt;br /&gt;
All approximate functions require additional argument denoting how close two numbers need to be considered equal. E.g.: &amp;lt;code&amp;gt;sap r0 100 101 0.01&amp;lt;/code&amp;gt; will consider 100 and 101 almost equal (not more than 1%=0.01 different) and will set r0 to 1. The exact formula is &amp;lt;code&amp;gt;if abs(a - b) &amp;lt;= max(c * max(abs(a), abs(b)), float.epsilon * 8)&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;-ap&amp;lt;/code&amp;gt; and is similar for other approximate functions.&lt;br /&gt;
&lt;br /&gt;
==Device Variables==&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Activate&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Activate&lt;br /&gt;
:1 if device is activated (usually means running), otherwise 0&lt;br /&gt;
:&amp;lt;code&amp;gt;l r0 d0 Activate # sets r0 to 1 if on or 0 if off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;AirRelease&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;AirRelease&lt;br /&gt;
&amp;lt;div id=&amp;quot;Charge&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Charge&lt;br /&gt;
:    The current charge the device has.&lt;br /&gt;
&amp;lt;div id=&amp;quot;CLearMemory&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;CLearMemory&lt;br /&gt;
:    When set to 1, clears the counter memory (e.g. ExportCount).  Will set itself back to 0 when triggered.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Color&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Color&lt;br /&gt;
:    0 (or lower) = Blue&lt;br /&gt;
:    1 = Grey&lt;br /&gt;
:    2 = Green&lt;br /&gt;
:    3 = Orange&lt;br /&gt;
:    4 = Red&lt;br /&gt;
:    5 = Yellow&lt;br /&gt;
:    6 = White&lt;br /&gt;
:    7 = Black&lt;br /&gt;
:    8 = Brown&lt;br /&gt;
:    9 = Khaki&lt;br /&gt;
:    10 = Pink&lt;br /&gt;
:    11 (or higher) = Purple&lt;br /&gt;
&amp;lt;div id=&amp;quot;CompletionRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;CompletionRatio&lt;br /&gt;
&amp;lt;div id=&amp;quot;ElevatorLevel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ElevatorLevel&lt;br /&gt;
&amp;lt;div id=&amp;quot;ElevatorSpeed&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ElevatorSpeed&lt;br /&gt;
&amp;lt;div id=&amp;quot;Error&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Error&lt;br /&gt;
:	1 if device is in error state, otherwise 0&lt;br /&gt;
&amp;lt;div id=&amp;quot;ExportCount&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ExportCount&lt;br /&gt;
:    How many items exporfted since last ClearMemory.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Filtration&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Filtration&lt;br /&gt;
:	The current state of the filtration system.  For example filtration = 1 for a Hardsuit when filtration is On.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Harvest&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Harvest&lt;br /&gt;
:	Performs the harvesting action for any plant based machinery.&lt;br /&gt;
:  &amp;lt;code&amp;gt;s d0 Harvest 1 # Performs 1 harvest action on device d0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;Horizontal&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Horizontal&lt;br /&gt;
&amp;lt;div id=&amp;quot;HorizontalRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;HorizontalRatio&lt;br /&gt;
&amp;lt;div id=&amp;quot;Idle&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Idle&lt;br /&gt;
&amp;lt;div id=&amp;quot;ImportCount&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ImportCount&lt;br /&gt;
&amp;lt;div id=&amp;quot;Lock&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Lock&lt;br /&gt;
&amp;lt;div id=&amp;quot;Maximum&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Maximum&lt;br /&gt;
&amp;lt;div id=&amp;quot;Mode&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Mode&lt;br /&gt;
&amp;lt;div id=&amp;quot;On&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;On&lt;br /&gt;
&amp;lt;div id=&amp;quot;Open&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Open&lt;br /&gt;
&amp;lt;div id=&amp;quot;Output&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Output&lt;br /&gt;
&amp;lt;div id=&amp;quot;Plant&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Plant&lt;br /&gt;
:    Performs the planting operation for any plant based machinery.&lt;br /&gt;
:  &amp;lt;code&amp;gt;s d0 Plant 1 # Plants one crop in device d0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;PositionX&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PositionX&lt;br /&gt;
&amp;lt;div id=&amp;quot;PositionY&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PositionY&lt;br /&gt;
&amp;lt;div id=&amp;quot;PositionZ&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PositionZ&lt;br /&gt;
&amp;lt;div id=&amp;quot;Power&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Power&lt;br /&gt;
&amp;lt;div id=&amp;quot;PowerActual&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PowerActual&lt;br /&gt;
&amp;lt;div id=&amp;quot;PowerPotential&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PowerPotential&lt;br /&gt;
&amp;lt;div id=&amp;quot;PowerRequired&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PowerRequired&lt;br /&gt;
&amp;lt;div id=&amp;quot;Pressure&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Pressure&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureExternal&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureExternal&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureInteral&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureInteral&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureSetting&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureSetting&lt;br /&gt;
&amp;lt;div id=&amp;quot;Quantity&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Quantity&lt;br /&gt;
:	Total quantity in the device.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Ratio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Ratio&lt;br /&gt;
:	Context specific value depending on device, 0 to 1 based ratio.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioCarbonDioxide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioCarbonDioxide&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioNitrogen&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioNitrogen&lt;br /&gt;
:	The ratio of nitrogen in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioOxygen&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioOxygen&lt;br /&gt;
:	The ratio of oxygen in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioPollutant&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioPollutant&lt;br /&gt;
:	The ratio of pollutant in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioVolatiles&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioVolatiles&lt;br /&gt;
:	The ratio of volatiles in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioWater&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioWater&lt;br /&gt;
:	The ratio of water in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Reagents&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Reagents&lt;br /&gt;
&amp;lt;div id=&amp;quot;RecipeHash&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RecipeHash&lt;br /&gt;
&amp;lt;div id=&amp;quot;RequestHash&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RequestHash&lt;br /&gt;
&amp;lt;div id=&amp;quot;RequiredPower&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RequiredPower&lt;br /&gt;
&amp;lt;div id=&amp;quot;Setting&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Setting&lt;br /&gt;
&amp;lt;div id=&amp;quot;SolarAngle&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;SolarAngle&lt;br /&gt;
:    Solar angle of the device.&lt;br /&gt;
:  &amp;lt;code&amp;gt;l r0 d0 SolarAngle # Sets r0 to the solar angle of d0.&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;Temperature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Temperature&lt;br /&gt;
&amp;lt;div id=&amp;quot;TemperatureSettings&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;TemperatureSettings&lt;br /&gt;
&amp;lt;div id=&amp;quot;TotalMoles&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;TotalMoles&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityMagnitude&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityMagnitude&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityRelativeX&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityRelativeX&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityRelativeY&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityRelativeY&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityRelativeZ&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityRelativeZ&lt;br /&gt;
&amp;lt;div id=&amp;quot;Vertical&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Vertical&lt;br /&gt;
:	Vertical setting of the device.&lt;br /&gt;
&amp;lt;div id=&amp;quot;VerticalRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VerticalRatio&lt;br /&gt;
:	Ratio of vertical setting for device.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Volume&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Volume&lt;br /&gt;
:	Returns the device atmosphere volume&lt;br /&gt;
&lt;br /&gt;
==Slot Variables==&lt;br /&gt;
In general (always?) slots are assigned as follows.&lt;br /&gt;
:Slot 0: Import&lt;br /&gt;
:Slot 1: Export&lt;br /&gt;
:Slot 2: Inside Machine&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Occupied&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Occupied&lt;br /&gt;
:&amp;lt;code&amp;gt;ls r0 d0 2 Occupied #Stores 1 in r0 if d0 has more seeds&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ls vOccupied dThisVictim 2 Occupied #stores 1 in vOccupied if dThisVictim has more seeds&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;OccupantHash&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;OccupantHash&lt;br /&gt;
&amp;lt;div id=&amp;quot;Quantity&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Quantity&lt;br /&gt;
&amp;lt;div id=&amp;quot;Damage&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Damage&lt;br /&gt;
&amp;lt;div id=&amp;quot;Efficiency&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Efficiency&lt;br /&gt;
&amp;lt;div id=&amp;quot;Health&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Health&lt;br /&gt;
&amp;lt;div id=&amp;quot;Growth&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Growth&lt;br /&gt;
:&amp;lt;code&amp;gt;ls r0 d0 0 Growth # Store the numerical growth stage of d0 in r0&amp;lt;/code&amp;gt; &lt;br /&gt;
&amp;lt;div id=&amp;quot;Pressure&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Pressure&lt;br /&gt;
&amp;lt;div id=&amp;quot;Temperature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Temperature&lt;br /&gt;
&amp;lt;div id=&amp;quot;Charge&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Charge&lt;br /&gt;
&amp;lt;div id=&amp;quot;ChargeRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ChargeRatio&lt;br /&gt;
&amp;lt;div id=&amp;quot;Class&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Class&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureWaste&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureWaste&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureAir&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureAir&lt;br /&gt;
&amp;lt;div id=&amp;quot;MaxQuantity&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;MaxQuantity&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Mature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Mature&lt;br /&gt;
:&amp;lt;code&amp;gt;ls r0 d0 0 Mature # Store 1 in r0 if d0 has a mature crop&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ls vMature dThisVictim 0 Mature # Store 1 in vMature if dThisVictim has a mature crop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=Examples=&lt;br /&gt;
Previous examples were obsolete due to game changes, or confusing, they have been moved into the Discussions section&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Harvie automation===&lt;br /&gt;
This script uses the batch instruction &amp;lt;code&amp;gt;sb ...&amp;lt;/code&amp;gt; to control all Harvie devices on the network. But only one Harvie and one Tray will be the &#039;&#039;master&#039;&#039; and have their values read, the rest of the Harvies will repeat exactly what this unit does. Some problems with this design is that different types of crops mature at different speeds, and if seeds were manually planted and the master unit recieved the first seed, the harvesting action will be performed too early on all the other plants since they are growing a few seconds slower.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;{{int:Expand, Automated Harvie Script}}&amp;quot; data-collapsetext=&amp;quot;{{int:Collapse, Automated Harvie Script}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
alias dHarvie d0&lt;br /&gt;
alias dTray d1&lt;br /&gt;
&lt;br /&gt;
alias rHarvieHash r8&lt;br /&gt;
alias rTrayHash r9&lt;br /&gt;
l rHarvieHash dHarvie PrefabHash&lt;br /&gt;
l rTrayHash dTray PrefabHash&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
yield&lt;br /&gt;
 #read plant data from the Tray&lt;br /&gt;
ls r0 dTray 0 Mature&lt;br /&gt;
 #harvestable plants return 1, young plants return 0&lt;br /&gt;
 #nothing planted returns -1&lt;br /&gt;
beq r0 -1 plantCrop&lt;br /&gt;
beq r0 1 harvestCrop&lt;br /&gt;
ls r0 dTray 0 Seeding&lt;br /&gt;
 #seeds available returns 1, all seeds picked returns 0&lt;br /&gt;
 #plants too young or old for seeds returns -1&lt;br /&gt;
beq r0 1 harvestCrop&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
plantCrop:&lt;br /&gt;
 #stop the planting if no seeds available&lt;br /&gt;
 #otherwise it will plant nothing repeatedly&lt;br /&gt;
ls r0 dHarvie 0 Occupied&lt;br /&gt;
beq r0 0 main&lt;br /&gt;
sb rHarvieHash Plant 1&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
harvestCrop:&lt;br /&gt;
sb rHarvieHash Harvest 1&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
### End Script ###&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Solar Panel 2-axis tracking===&lt;br /&gt;
This script was copied from the [[Solar_Logic_Circuits_Guide]] (code provided by bti, comments and readability changes by Fudd79)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;{{int:Expand, Solar Panel 2-axis tracking}}&amp;quot; data-collapsetext=&amp;quot;{{int:Collapse, Solar Panel 2-axis tracking}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This code assumes the following:&lt;br /&gt;
# Daylight Sensor data-port points north&lt;br /&gt;
# Solar Panel data-port points east&lt;br /&gt;
&lt;br /&gt;
alias sensor d0&lt;br /&gt;
alias v_angle r0&lt;br /&gt;
alias h_angle r1&lt;br /&gt;
alias sun_up r2&lt;br /&gt;
&lt;br /&gt;
define solar_panel_hash -539224550&lt;br /&gt;
define heavy_solar_panel_hash -1545574413&lt;br /&gt;
&lt;br /&gt;
start:&lt;br /&gt;
# Check to see if sun is up&lt;br /&gt;
l sun_up sensor Activate&lt;br /&gt;
# Go to reset if it&#039;s not&lt;br /&gt;
beqz sun_up reset&lt;br /&gt;
&lt;br /&gt;
# Calculate vertical angle&lt;br /&gt;
l v_angle sensor Vertical&lt;br /&gt;
div v_angle v_angle 1.5&lt;br /&gt;
sub v_angle 50 v_angle&lt;br /&gt;
&lt;br /&gt;
# Write vertical angle to all solar panels&lt;br /&gt;
sb solar_panel_hash Vertical v_angle&lt;br /&gt;
sb heavy_solar_panel_hash Vertical v_angle&lt;br /&gt;
&lt;br /&gt;
# Obtain horizontal angle&lt;br /&gt;
l h_angle sensor Horizontal&lt;br /&gt;
&lt;br /&gt;
# Write vertical angle to all solar panels&lt;br /&gt;
sb solar_panel_hash Horizontal h_angle&lt;br /&gt;
sb heavy_solar_panel_hash Horizontal h_angle&lt;br /&gt;
&lt;br /&gt;
# Go to start again&lt;br /&gt;
yield&lt;br /&gt;
j start&lt;br /&gt;
&lt;br /&gt;
reset:&lt;br /&gt;
# Park solar panels vertically facing sunrise&lt;br /&gt;
sb solar_panel_hash Vertical 0&lt;br /&gt;
sb heavy_solar_panel_hash Vertical 0&lt;br /&gt;
# Park solar panels horizontally facing sunrise&lt;br /&gt;
sb solar_panel_hash Horizontal -90&lt;br /&gt;
sb heavy_solar_panel_hash Horizontal -90&lt;br /&gt;
# Wait 10 seconds&lt;br /&gt;
sleep 10&lt;br /&gt;
# Go to start again&lt;br /&gt;
j start&lt;br /&gt;
&lt;br /&gt;
### End Script ###&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Example experiment: how many lines of code are executed each tick?===&lt;br /&gt;
To determine this, a script without &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt; will be used. It should have as few lines as possible (so no labels are used, but a reset value at the top will be needed) and count the number of lines, the IC Housing will be used to display the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
move r0 1   #the first line has number 0&lt;br /&gt;
add r0 r0 3&lt;br /&gt;
s db Setting r0&lt;br /&gt;
j 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Result (the numbers appears every 0.5 seconds):&lt;br /&gt;
&amp;lt;br&amp;gt;127&lt;br /&gt;
&amp;lt;br&amp;gt;256 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;385 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;511 (+126)&lt;br /&gt;
&amp;lt;br&amp;gt;640 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;769 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;895 (+126)&lt;br /&gt;
&amp;lt;br&amp;gt;1024 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;1153 (+129)&lt;br /&gt;
&lt;br /&gt;
There is a repeating +129, +129, +126 sequence, a hint that the real value is 128. Which also happens to be the number of lines in a script, which makes sense. A variation of this experiment will show that empty rows are also counted towards this number.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=Links=&lt;br /&gt;
----&lt;br /&gt;
* [https://stationeering.com/tools/ic] Stationeering.com offers a programmable circuits simulator so you can develop your code without repeatedly dying in game!&lt;br /&gt;
* [http://www.easy68k.com/] EASy68K is a 68000 Structured Assembly Language IDE.&lt;br /&gt;
* [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10] syntax highlighting for IC10 MIPS for Visual Studio Code (updated Feb 10th 2022)&lt;br /&gt;
* [https://pastebin.com/6Uw1KSRN] syntax highlighting for IC10 MIPS for KDE kwrite/kate text editor&lt;br /&gt;
* [https://drive.google.com/file/d/1yEsJ-u94OkuMQ8K6fY7Ja1HNpLcAdjo_/view] syntax highlighting for IC10 MIPS for Notepad++&lt;br /&gt;
* [https://pastebin.com/3kmGy0NN] syntax highlighting for IC10 MIPS for Notepad++ (updated: 05/05/2021)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Index=&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|+Functions &lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
*[[#abs|abs]]&lt;br /&gt;
*[[#add|add]]&lt;br /&gt;
*[[#alias|alias]]&lt;br /&gt;
*[[#and|and]]&lt;br /&gt;
*[[#beq|beq]]&lt;br /&gt;
*[[#bgez|bgez]]&lt;br /&gt;
*[[#bgtz|bgtz]]&lt;br /&gt;
*[[#blez|blez]]&lt;br /&gt;
*[[#bltz|bltz]]&lt;br /&gt;
*[[#bne|bne]]&lt;br /&gt;
*[[#breq|breq]]&lt;br /&gt;
*[[#brgez|brgez]]&lt;br /&gt;
*[[#brgtz|brgtz]]&lt;br /&gt;
*[[#brlez|brlez]]&lt;br /&gt;
*[[#brltz|brltz]]&lt;br /&gt;
*[[#brne|brne]]&lt;br /&gt;
*[[#ceil|cell]]&lt;br /&gt;
*[[#div|div]]&lt;br /&gt;
*[[#exp|exp]]&lt;br /&gt;
*[[#floor|floor]]&lt;br /&gt;
*[[#j|j]]&lt;br /&gt;
*[[#jr|jr]]&lt;br /&gt;
*[[#l|l]]&lt;br /&gt;
*[[#log|log]]&lt;br /&gt;
*[[#ls|ls]]&lt;br /&gt;
*[[#max|max]]&lt;br /&gt;
*[[#min|min]]&lt;br /&gt;
*[[#mod|mod]]&lt;br /&gt;
*[[#move|move]]&lt;br /&gt;
*[[#mul|mul]]&lt;br /&gt;
*[[#nor|nor]]&lt;br /&gt;
*[[#or|or]]&lt;br /&gt;
*[[#rand|rand]]&lt;br /&gt;
*[[#round|round]]&lt;br /&gt;
*[[#s|s]]&lt;br /&gt;
*[[#slt|slt]]&lt;br /&gt;
*[[#sqrt|sqrt]]&lt;br /&gt;
*[[#sub|sub]]&lt;br /&gt;
*[[#trunc|trunc]]&lt;br /&gt;
*[[#xor|xor]]xor&lt;br /&gt;
*[[#yield|yield]]&lt;br /&gt;
*[[##|#]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|+Device Variables &lt;br /&gt;
&amp;lt;div  class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
*[[#Activate|Activate]]&lt;br /&gt;
*[[#AirRelease|AirRelease]]&lt;br /&gt;
*[[#Charge|Charge]]&lt;br /&gt;
*[[#CLearMemory|CLearMemory]]&lt;br /&gt;
*[[#Color|Color]]&lt;br /&gt;
*[[#CompletionRatio|CompletionRatio]]&lt;br /&gt;
*[[#ElevatorLevel|ElevatorLevel]]&lt;br /&gt;
*[[#ElevatorSpeed|ElevatorSpeed]]&lt;br /&gt;
*[[#Error|Error]]&lt;br /&gt;
*[[#ExportCount|ExportCount]]&lt;br /&gt;
*[[#Filtration|Filtration]]&lt;br /&gt;
*[[#Harvest|Harvest]]&lt;br /&gt;
*[[#Horizontal|Horizontal]]&lt;br /&gt;
*[[#HorizontalRatio|HorizontalRatio]]&lt;br /&gt;
*[[#Idle|Idle]]&lt;br /&gt;
*[[#ImportCount|ImportCount]]&lt;br /&gt;
*[[#Lock|Lock]]&lt;br /&gt;
*[[#Maximum|Maximum]]&lt;br /&gt;
*[[#Mode|Mode]]&lt;br /&gt;
*[[#On|On]]&lt;br /&gt;
*[[#Open|Open]]&lt;br /&gt;
*[[#Output|Output]]&lt;br /&gt;
*[[#Plant|Plant]]&lt;br /&gt;
*[[#PositionX|PositionX]]&lt;br /&gt;
*[[#PositionY|PositionY]]&lt;br /&gt;
*[[#PositionZ|PositionZ]]&lt;br /&gt;
*[[#Power|Power]]&lt;br /&gt;
*[[#PowerActual|PowerActual]]&lt;br /&gt;
*[[#PowerPotential|PowerPotential]]&lt;br /&gt;
*[[#PowerRequired|PowerRequired]]&lt;br /&gt;
*[[#Pressure|Pressure]]&lt;br /&gt;
*[[#PressureExternal|PressureExternal]]&lt;br /&gt;
*[[#PressureInteral|PressureInteral]]&lt;br /&gt;
*[[#PressureSetting|PressureSetting]]&lt;br /&gt;
*[[#Quantity|Quantity]]&lt;br /&gt;
*[[#Ratio|Ratio]]&lt;br /&gt;
*[[#RatioCarbonDioxide|RatioCarbonDioxide]]&lt;br /&gt;
*[[#RatioNitrogen|RatioNitrogen]]&lt;br /&gt;
*[[#RatioOxygen|RatioOxygen]]&lt;br /&gt;
*[[#RatioPollutant|RatioPollutant]]&lt;br /&gt;
*[[#RatioVolatiles|RatioVolatiles]]&lt;br /&gt;
*[[#RatioWater|RatioWater]]&lt;br /&gt;
*[[#Reagents|Reagents]]&lt;br /&gt;
*[[#RecipeHash|RecipeHash]]&lt;br /&gt;
*[[#RequestHash|RequestHash]]&lt;br /&gt;
*[[#RequiredPower|RequiredPower]]&lt;br /&gt;
*[[#Setting|Setting]]&lt;br /&gt;
*[[#SolarAngle|SolarAngle]]&lt;br /&gt;
*[[#Temperature|Temperature]]&lt;br /&gt;
*[[#TemperatureSettings|TemperatureSettings]]&lt;br /&gt;
*[[#TotalMoles|TotalMoles]]&lt;br /&gt;
*[[#VelocityMagnitude|VelocityMagnitude]]&lt;br /&gt;
*[[#VelocityRelativeX|VelocityRelativeX]]&lt;br /&gt;
*[[#VelocityRelativeY|VelocityRelativeY]]&lt;br /&gt;
*[[#VelocityRelativeZ|VelocityRelativeZ]]&lt;br /&gt;
*[[#Vertical|Vertical]]&lt;br /&gt;
*[[#VerticalRatio|VerticalRatio]]&lt;br /&gt;
*[[#Volume|Volume]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|+Slot Variables &lt;br /&gt;
&amp;lt;div  class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
*[[#Occupied|Occupied]]&lt;br /&gt;
*[[#OccupantHash|OccupantHash]]&lt;br /&gt;
*[[#Quantity|Quantity]]&lt;br /&gt;
*[[#Damage|Damage]]&lt;br /&gt;
*[[#Efficiency|Efficiency]]&lt;br /&gt;
*[[#Health|Health]]&lt;br /&gt;
*[[#Growth|Growth]]&lt;br /&gt;
*[[#Pressure|Pressure]]&lt;br /&gt;
*[[#Temperature|Temperature]]&lt;br /&gt;
*[[#Charge|Charge]]&lt;br /&gt;
*[[#ChargeRatio|ChargeRatio]]&lt;br /&gt;
*[[#Class|Class]]&lt;br /&gt;
*[[#PressureWaste|PressureWaste]]&lt;br /&gt;
*[[#PressureAir|PressureAir]]&lt;br /&gt;
*[[#MaxQuantity|MaxQuantity]]&lt;br /&gt;
*[[#Mature|Mature]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=IcX preprocessor=&lt;br /&gt;
&lt;br /&gt;
[https://traineratwot.aytour.ru/wiki/icx Official wiki]&lt;/div&gt;</summary>
		<author><name>Traineratwot</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=IC10&amp;diff=12490</id>
		<title>IC10</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=IC10&amp;diff=12490"/>
		<updated>2022-07-04T16:36:38Z</updated>

		<summary type="html">&lt;p&gt;Traineratwot: add IcX wiki link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:MIPS Programming]]&lt;br /&gt;
=MIPS scripting language for IC10 housings / chips=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Text after a # will be ignored to the end of the line. The amount of white&lt;br /&gt;
# space between arguments isn&#039;t important, but new lines start a new command.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Registers==&lt;br /&gt;
The IC contains 16 registers, numbered r0-r15. Think of these as variables in other programming languages. In fact, you can name them with the alias command (see below).&lt;br /&gt;
&lt;br /&gt;
To set a register directly (such as r0=2), use the &amp;lt;b&amp;gt;move&amp;lt;/b&amp;gt; command. To read a value from a device, use &amp;lt;b&amp;gt;l&amp;lt;/b&amp;gt; (load). To write a value back to a device, use &amp;lt;b&amp;gt;s&amp;lt;/b&amp;gt; (set). Note that&lt;br /&gt;
like most machine languages, the &amp;lt;i&amp;gt;destination&amp;lt;/i&amp;gt; goes first, so instructions always look like: action destination source.&lt;br /&gt;
&lt;br /&gt;
Here are some examples set a register, reading a value from a device and writing a value to device:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;move r0 10&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Sets register r0 to the value 10&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;move r0 r1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Copies the value of register r1 to register r0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l r0 d0 Temperature&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Reads the Temperature parameter from device d0 and places the value in register r0.&lt;br /&gt;
Note: not all devices have a Temperature parameter, check the in-game stationpedia.&lt;br /&gt;
&lt;br /&gt;
To set a device specific value (like &amp;quot;On&amp;quot;), you can write into this value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;s d0 On r0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Writes the value from register &#039;&#039;&#039;r0&#039;&#039;&#039; out to &#039;&#039;&#039;On&#039;&#039;&#039; parameter of device &#039;&#039;&#039;d0&#039;&#039;&#039;. In this example the device will be turned On, if valve of register r0 equals 1, otherwise (register r0 equals 0) it will turned off. See section [[MIPS#Device_Variables|Device Variables]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s recommended to use labels (like: &#039;&#039;someVariable&#039;&#039;) instead of a direct reference to the register. See &#039;&#039;&#039;alias&#039;&#039;&#039; in section [[MIPS#Instructions|Instructions]].&lt;br /&gt;
&lt;br /&gt;
There are two more registers. One called &#039;&#039;&#039;ra&#039;&#039;&#039; (return address) and one called &#039;&#039;&#039;sp&#039;&#039;&#039; (stack pointer). The &#039;&#039;&#039;ra&#039;&#039;&#039; is used by certain jump and branching instructions (those ending with &#039;&#039;&#039;-al&#039;&#039;&#039;) to remember which line in the script it should return to. The &#039;&#039;&#039;sp&#039;&#039;&#039; tracks the next index within the stack (a memory that can store up to 512 values) to be pushed (written) to or popped (read) from. Neither &#039;&#039;&#039;ra&#039;&#039;&#039; or &#039;&#039;&#039;sp&#039;&#039;&#039; is protected, their values can be changed by instructions like any other register.&lt;br /&gt;
&lt;br /&gt;
==Device Ports==&lt;br /&gt;
ICs can interact with up to 6 other devices via d0 - d5, as well as the device it&#039;s attached to via db. To change or set a device, use a screwdriver and adjust the device in the IC housing. You can read or set any of the device&#039;s properties, so it is possible to do things like read the pressure or oxygen content of a room on the same Device port. &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;l&#039;&#039;&#039; (load) or &#039;&#039;&#039;s&#039;&#039;&#039; (set) instructions you have to read or set these values to your device. Examples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l r0 d0 Temperature&amp;lt;/code&amp;gt; #Reads the &#039;&#039;&#039;Temperature&#039;&#039;&#039; from an atmosphere sensor at device port &#039;&#039;&#039;d0&#039;&#039;&#039; into register &#039;&#039;&#039;r0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;s d1 Setting r0 &amp;lt;/code&amp;gt; # Writes the value of the register &#039;&#039;&#039;r0&#039;&#039;&#039; to the device on port &#039;&#039;&#039;d1&#039;&#039;&#039; into the variable &#039;&#039;&#039;Setting&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Labels==&lt;br /&gt;
Labels are used to make it easier to jump between lines in the script. The label will have a numerical value that is the same as its line number. Even though it&#039;s possible to use a labels value for calculations, doing so is a bad idea since any changes to the code can change the line numbers of the labels.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;main:&amp;lt;/code&amp;gt; # define a jump mark with label &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;j main&amp;lt;/code&amp;gt; # jumps back to &#039;&#039;&#039;main&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Constants==&lt;br /&gt;
Instead of using a register to store a fixed value, a constant can be made. Using this name will refer to the assigned value. With the help of Constants you can save register places.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;define pi 3.14159&amp;lt;/code&amp;gt; # defines a Constant with name &#039;&#039;&#039;pi&#039;&#039;&#039; and set it&#039;s value to 3.14159&lt;br /&gt;
&lt;br /&gt;
You can use these constants like any other variables (see: alias in section [[MIPS#Instructions|Instructions]]). Example:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move r0 pi&amp;lt;/code&amp;gt; # set the value of register &#039;&#039;&#039;r0&#039;&#039;&#039; to the value of constant named &#039;&#039;&#039;pi&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Indirect referencing==&lt;br /&gt;
This is a way of accessing a register by using another register as a pointer. Adding an additional r infront of the register turns on this behaviour. The value stored in the register being used as the pointer must be between 0 to 15, this will then point to a register from r0 to r15, higher or lower values will cause an error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;move r0 5&amp;lt;/code&amp;gt; stores the value 5 in r0&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move rr0 10&amp;lt;/code&amp;gt; is now the same as &amp;lt;code&amp;gt;move r5 10&amp;lt;/code&amp;gt; since r0 has the value 5, rr0 points at the register r5&lt;br /&gt;
&lt;br /&gt;
Additional r&#039;s can be added to do indirect referencing multiple times in a row.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move r1 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move r2 3&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move rrr1 4&amp;lt;/code&amp;gt; is now the same as &amp;lt;code&amp;gt;move r3 4&amp;lt;/code&amp;gt; since r1 points at r2 which points at r3&lt;br /&gt;
&lt;br /&gt;
This also works with devices&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;move r0 2&amp;lt;/code&amp;gt; stores the value 2 in r0&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;s dr0 On 1&amp;lt;/code&amp;gt; is now the same as &amp;lt;code&amp;gt;s d2 On 1&amp;lt;/code&amp;gt;, r0 has the value 2 so dr0 points at d2&lt;br /&gt;
&lt;br /&gt;
==Debugging advices==&lt;br /&gt;
The value stored in a register or variable can easily be displayed by writing it to the Setting parameter of the IC housing. This has no side effects. To see the value, just stand close to the IC housing and look directly at the housing.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;s db Setting r0&amp;lt;/code&amp;gt;. # sets/writes the value of register &#039;&#039;&#039;r0&#039;&#039;&#039; into the parameter &#039;&#039;&#039;Setting&#039;&#039;&#039; of the IC Housing(&#039;&#039;&#039;db&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
To check if a certain block of code is executed, use the above trick but with a random number that you choose, like the line number.&amp;lt;br&amp;gt; This example will display the number 137 on the IC housing.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;s db Setting 137&amp;lt;/code&amp;gt;  # sets/writes the number 137 into the parameter &#039;&#039;&#039;Setting&#039;&#039;&#039; of the IC Housing(&#039;&#039;&#039;db&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
A [[Cartridge#Configuration|configuration cartridge]] installed in a [[Handheld_Tablet|tablet]]  can be used to see all available values and configuration parameter for all devices you focus on.&lt;br /&gt;
&lt;br /&gt;
==Learning MIPS==&lt;br /&gt;
MIPS can be difficult to get started with. So here is a list of instructions that are useful for beginners. These can be used to write many different scripts.&lt;br /&gt;
&lt;br /&gt;
General:&lt;br /&gt;
* alias (make the script easier to read by assigning a name to a register or device, example: &amp;lt;code&amp;gt;alias rTemperature r15&amp;lt;/code&amp;gt;)&lt;br /&gt;
* label: (where &amp;quot;label&amp;quot; can be replaced with almost any word, jump and branch instructions will go to these, example: &amp;lt;code&amp;gt;start:&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt; (pause for 1-tick and then resume, if not used the script will automatically pause for 1-tick after 128 lines)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Jumps:&lt;br /&gt;
*&amp;lt;code&amp;gt;j someLabelName&amp;lt;/code&amp;gt; # jump to line with &#039;&#039;&#039;someLabelName&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;jal someLabelName&amp;lt;/code&amp;gt; # stores the next line number into the register ra (return address) and then jump to &#039;&#039;&#039;someLabelName&#039;&#039;&#039;)&lt;br /&gt;
*&amp;lt;code&amp;gt;j ra&amp;lt;/code&amp;gt; # jump to register ra (return address)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Branching (jump-if):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
beq (branch if equal)&lt;br /&gt;
bne (branch if not-equal)&lt;br /&gt;
bgt (branch if greater than)&lt;br /&gt;
blt (branch if less than)&lt;br /&gt;
The suffix -al can be added to each of these (example: beqal) to save the next line number into the &amp;quot;return address&amp;quot; register&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Device interactions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
l (load)&lt;br /&gt;
lb (load batch, requires one of the following: Average / Sum / Minimum / Maximum)&lt;br /&gt;
ls (load slot)&lt;br /&gt;
s (store)&lt;br /&gt;
sb (store batch)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Logic and Math:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
seqz (common NOT-gate: turns 0 into 1, and all other values into 0)&lt;br /&gt;
move&lt;br /&gt;
add (addition)&lt;br /&gt;
sub (subtraction)&lt;br /&gt;
mul (multiplication)&lt;br /&gt;
div (division)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Common device variables:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
On (1 is on, 0 is off)&lt;br /&gt;
Open (1 is open, 0 is closed)&lt;br /&gt;
Setting (meaning varies between devices, example: a LED display(console) will show this value)&lt;br /&gt;
Activate (1 usually means running, example: a Daylight sensor is 1 when the sun shines on it)&lt;br /&gt;
Temperature (in Kelvin, Celsius + 273.15)&lt;br /&gt;
Pressure (in kPa)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Notes:&lt;br /&gt;
&amp;lt;br&amp;gt;-All instructions and variables can be seen in-game in the MIPS editor window by clicking the &amp;quot;f&amp;quot;, &amp;quot;x&amp;quot; and &amp;quot;s(x)&amp;quot; buttons on the top right.&lt;br /&gt;
&amp;lt;br&amp;gt;-The stationpedia is the best source to see which variables are available to each device.&lt;br /&gt;
&amp;lt;br&amp;gt;-Most scripts are loops, they end with a jump instruction that leads back up to the start. Otherwise they will just run once and then stop.&lt;br /&gt;
&lt;br /&gt;
Two practice scripts:&lt;br /&gt;
&amp;lt;br&amp;gt;Automatic Night Light: Load &amp;quot;Activate&amp;quot; from a Daylight sensor, flip the value with a NOT-gate, store the value to the &amp;quot;On&amp;quot; variable of one or more lights.&lt;br /&gt;
&amp;lt;br&amp;gt;Automatic Wall Cooler: Read &amp;quot;Temperature&amp;quot; from a Gas Sensor. Branch if the value is greater than X, turn on the cooler. Branch if the value is less than Y, turn off the cooler. (Wall coolers need a minumum of 12.5 kPa pressure in the connected pipe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Instructions=&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;alias&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;alias&lt;br /&gt;
:alias str r? d? # labels register or device reference with name.  When alias is applied to a device, it will affect what shows on the screws in the IC base.  (housing)&lt;br /&gt;
&amp;lt;code&amp;gt;alias vTemperature r0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;alias dAutoHydro1 d0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;move&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;move    &lt;br /&gt;
:d s     # stores the value of s in d&lt;br /&gt;
&amp;lt;code&amp;gt;move r0 42 # Store 42 in register 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;l&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;load&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;l (load)&lt;br /&gt;
:l r# d# parameter&lt;br /&gt;
Reads from a device (d#) and stores the value in a register (r#)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l r0 d0 Setting&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Read from the device on d0 into register 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;l r1 d5 Pressure&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Read the pressure from a sensor&lt;br /&gt;
&lt;br /&gt;
This also works with aliases. For example:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
alias Sensor d0 &amp;lt;br/&amp;gt;&lt;br /&gt;
l r0 Sensor Temperature&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;ls&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;load slot&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ls (load slot)&lt;br /&gt;
:ls r# d# slotNum parameter&lt;br /&gt;
Reads from a slot (slotNum) of a device (d#)  and stores the value in a register (r#)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ls r0 d0 2 Occupied&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;Read from the second slot of device on d0, stores 1 in r0 if it&#039;s occupied, 0 otherwise.&lt;br /&gt;
&lt;br /&gt;
And here is the code to read the charge of an AIMeE:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
alias robot d0 &amp;lt;br/&amp;gt;&lt;br /&gt;
alias charge r0 &amp;lt;br/&amp;gt;&lt;br /&gt;
ls charge robot 0 Charge &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;s&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;set&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;s (set)&lt;br /&gt;
:s d# parameter r#&lt;br /&gt;
Writes a setting to a device. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;s d0 Setting r0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;add&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;add     &lt;br /&gt;
:d s t   # calculates s + t and stores the result in d&lt;br /&gt;
&amp;lt;code&amp;gt;add r0 r1 1 # add 1 to r1 and store the result as r0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;add r0 r0 1 # increment r0 by one&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;sub&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;sub     &lt;br /&gt;
:d s t   # calculates s - t and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;mul&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;mul     &lt;br /&gt;
:d s t   # calculates s * t and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;div&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;div     &lt;br /&gt;
:d s t   # calculates s / t and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;mod&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;mod     &lt;br /&gt;
:d s t   &lt;br /&gt;
::# calculates s mod t and stores the result in d. Note this&lt;br /&gt;
::# doesn&#039;t behave like the % operator - the result will be &lt;br /&gt;
::# positive even if the either of the operands are negative&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;slt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;slt     &lt;br /&gt;
:d s t   # stores 1 in d if s &amp;lt; t, 0 otherwise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sqrt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;sqrt    &lt;br /&gt;
:d s     # calculates sqrt(s) and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;round&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;round   &lt;br /&gt;
:d s     # finds the rounded value of s and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;trunc&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;trunc   &lt;br /&gt;
:d s     # finds the truncated value of s and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;ceil&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ceil   &lt;br /&gt;
: d s     # calculates the ceiling of s and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;floor&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;floor  &lt;br /&gt;
: d s     # calculates the floor of s and stores the result in d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;max&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;max    &lt;br /&gt;
: d s t   # calculates the maximum of s and t and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;min&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;min    &lt;br /&gt;
: d s t   # calculates the minimum of s and t and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;abs&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;abs    &lt;br /&gt;
: d s     # calculates the absolute value of s and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;log&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;log    &lt;br /&gt;
: d s     # calculates the natural logarithm of s and stores the result&lt;br /&gt;
::# in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;exp&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;exp    &lt;br /&gt;
: d s     # calculates the exponential of s and stores the result in d&lt;br /&gt;
&amp;lt;div id=&amp;quot;rand&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;rand   &lt;br /&gt;
: d       # selects a random number uniformly at random between 0 and 1&lt;br /&gt;
::# inclusive and stores the result in d&lt;br /&gt;
&lt;br /&gt;
::# boolean arithmetic uses the C convention that 0 is false and any non-zero&lt;br /&gt;
::# value is true.&lt;br /&gt;
&amp;lt;div id=&amp;quot;and&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;and    &lt;br /&gt;
: d s t   # stores 1 in d if both s and t have non-zero values,&lt;br /&gt;
::# 0 otherwise&lt;br /&gt;
&amp;lt;div id=&amp;quot;or&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;or     &lt;br /&gt;
: d s t   # stores 1 in d if either s or t have non-zero values,&lt;br /&gt;
::# 0 otherwise&lt;br /&gt;
&amp;lt;div id=&amp;quot;xor&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;xor    &lt;br /&gt;
: d s t   # stores 1 in d if exactly one of s and t are non-zero,&lt;br /&gt;
::# 0 otherwise&lt;br /&gt;
&amp;lt;div id=&amp;quot;nor&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;nor &lt;br /&gt;
:    d s t   # stores 1 in d if both s and t equal zero, 0 otherwise&lt;br /&gt;
::# Lines are numbered starting at zero&lt;br /&gt;
&amp;lt;div id=&amp;quot;j&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;j&lt;br /&gt;
:             a # jumps to line a.&lt;br /&gt;
&amp;lt;div id=&amp;quot;bltz&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;bltz&lt;br /&gt;
:      s   a # jumps to line a if s &amp;lt;  0&lt;br /&gt;
&amp;lt;div id=&amp;quot;blez&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;blez &lt;br /&gt;
:     s   a # jumps to line a if s &amp;lt;= 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;bgez&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;bgez &lt;br /&gt;
:     s   a # jumps to line a if s &amp;gt;= 0&lt;br /&gt;
&amp;lt;div id=&amp;quot;bgtz&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;bgtz&lt;br /&gt;
:      s   a # jumps to line a if s &amp;gt;  0&lt;br /&gt;
&amp;lt;div id=&amp;quot;beq&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;beq &lt;br /&gt;
:      s t a # jumps to line a if s == t&lt;br /&gt;
&amp;lt;div id=&amp;quot;bne&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;bne &lt;br /&gt;
:      s t a # jumps to line a if s != t&lt;br /&gt;
&amp;lt;div id=&amp;quot;bdseal&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;bdseal&lt;br /&gt;
:    d? a(r?|num) # Jump execution to line a and store current line number if device d? is set.&lt;br /&gt;
&amp;lt;code&amp;gt;bdseal d0 32 #Store line number and jump to line 32 if d0 is assigned.&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;bdseal dThisVictim HarvestCrop #Store line in ra and jump to sub HarvestCrop if device dThisVictim is assigned.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;yield&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;yield           &lt;br /&gt;
: 	# ceases code execution for this power tick&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;lb&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;lb&lt;br /&gt;
:      r? typeHash var batchMode # Loads var from all output network devices with provided typeHash  using provided batchMode: Average(0), Sum (1), Minimum (2), Maximum (3). Can be used word or number. Result store into r?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sb&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;sb&lt;br /&gt;
:      typeHash var r? # Store register r? to var on all output network devices with provided typeHash&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;#&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
; #&lt;br /&gt;
:     # The following text will be ignored during compiling; use this to create comments.&lt;br /&gt;
&lt;br /&gt;
[https://www.cs.tufts.edu/comp/140/lectures/Day_3/mips_summary.pdf Other examples]&lt;br /&gt;
&lt;br /&gt;
== Conditional functions cheatsheet ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! suffix !! description !! branch to line !! branch and store return address !! relative jump to line !! set register&lt;br /&gt;
|-&lt;br /&gt;
| prefix: ||  || b- || b-al || br- || s-&lt;br /&gt;
|-&lt;br /&gt;
|  || unconditional || j    || jal    || jr    || &lt;br /&gt;
|-&lt;br /&gt;
| -eq  || if a == b || beq  || beqal  || breq  || seq&lt;br /&gt;
|-&lt;br /&gt;
| -eqz || if a == 0 || beqz || beqzal || breqz || seqz&lt;br /&gt;
|-&lt;br /&gt;
| -ge  || if a &amp;gt;= b || bge  || bgeal  || brge  || sge&lt;br /&gt;
|-&lt;br /&gt;
| -gez || if a &amp;gt;= 0 || bgez || bgezal || brgez || sgez&lt;br /&gt;
|-&lt;br /&gt;
| -gt  || if a &amp;gt; b  || bgt  || bgtal  || brgt  || sgt&lt;br /&gt;
|-&lt;br /&gt;
| -gtz || if a &amp;gt; 0  || bgtz || bgtzal || brgtz || sgtz&lt;br /&gt;
|-&lt;br /&gt;
| -le  || if a &amp;lt;= b || ble  || bleal  || brle  || sle&lt;br /&gt;
|-&lt;br /&gt;
| -lez || if a &amp;lt;= 0 || blez || blezal || brlez || slez&lt;br /&gt;
|-&lt;br /&gt;
| -lt  || if a &amp;lt; b  || blt  || bltal  || brlt  || slt&lt;br /&gt;
|-&lt;br /&gt;
| -ltz || if a &amp;lt; 0  || bltz || bltzal || brltz || sltz&lt;br /&gt;
|-&lt;br /&gt;
| -ne  || if a != b || bne  || bneal  || brne  || sne&lt;br /&gt;
|-&lt;br /&gt;
| -nez || if a != 0 || bnez || bnezal || brnez || snez&lt;br /&gt;
|-&lt;br /&gt;
| -dns || if device d is not set          || bdns || bdnsal || brdns || sdns&lt;br /&gt;
|-&lt;br /&gt;
| -dse || if device d is set              || bdse || bdseal || brdse || sdse&lt;br /&gt;
|-&lt;br /&gt;
| -ap  || if a approximately equals b     || bap  || bapal  || brap  || sap&lt;br /&gt;
|-&lt;br /&gt;
| -apz || if a approximately equals 0     || bapz || bapzal || brapz || sapz&lt;br /&gt;
|-&lt;br /&gt;
| -na  || if a not approximately equals b || bna  || bnaal  || brna  || sna&lt;br /&gt;
|-&lt;br /&gt;
| -naz || if a not approximately equals 0 || bnaz || bnazal || brnaz || snaz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All &amp;lt;code&amp;gt;b-&amp;lt;/code&amp;gt; commands require target line as last argument, all &amp;lt;code&amp;gt;s-&amp;lt;/code&amp;gt; commands require register to store result as first argument. All &amp;lt;code&amp;gt;br-&amp;lt;/code&amp;gt; commands require number to jump relatively as last argument. e.g. &amp;lt;code&amp;gt;breq a b 3&amp;lt;/code&amp;gt; means if a=b then jump to 3 lines after.&lt;br /&gt;
&lt;br /&gt;
All approximate functions require additional argument denoting how close two numbers need to be considered equal. E.g.: &amp;lt;code&amp;gt;sap r0 100 101 0.01&amp;lt;/code&amp;gt; will consider 100 and 101 almost equal (not more than 1%=0.01 different) and will set r0 to 1. The exact formula is &amp;lt;code&amp;gt;if abs(a - b) &amp;lt;= max(c * max(abs(a), abs(b)), float.epsilon * 8)&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;-ap&amp;lt;/code&amp;gt; and is similar for other approximate functions.&lt;br /&gt;
&lt;br /&gt;
==Device Variables==&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Activate&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Activate&lt;br /&gt;
:1 if device is activated (usually means running), otherwise 0&lt;br /&gt;
:&amp;lt;code&amp;gt;l r0 d0 Activate # sets r0 to 1 if on or 0 if off&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;AirRelease&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;AirRelease&lt;br /&gt;
&amp;lt;div id=&amp;quot;Charge&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Charge&lt;br /&gt;
:    The current charge the device has.&lt;br /&gt;
&amp;lt;div id=&amp;quot;CLearMemory&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;CLearMemory&lt;br /&gt;
:    When set to 1, clears the counter memory (e.g. ExportCount).  Will set itself back to 0 when triggered.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Color&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Color&lt;br /&gt;
:    0 (or lower) = Blue&lt;br /&gt;
:    1 = Grey&lt;br /&gt;
:    2 = Green&lt;br /&gt;
:    3 = Orange&lt;br /&gt;
:    4 = Red&lt;br /&gt;
:    5 = Yellow&lt;br /&gt;
:    6 = White&lt;br /&gt;
:    7 = Black&lt;br /&gt;
:    8 = Brown&lt;br /&gt;
:    9 = Khaki&lt;br /&gt;
:    10 = Pink&lt;br /&gt;
:    11 (or higher) = Purple&lt;br /&gt;
&amp;lt;div id=&amp;quot;CompletionRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;CompletionRatio&lt;br /&gt;
&amp;lt;div id=&amp;quot;ElevatorLevel&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ElevatorLevel&lt;br /&gt;
&amp;lt;div id=&amp;quot;ElevatorSpeed&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ElevatorSpeed&lt;br /&gt;
&amp;lt;div id=&amp;quot;Error&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Error&lt;br /&gt;
:	1 if device is in error state, otherwise 0&lt;br /&gt;
&amp;lt;div id=&amp;quot;ExportCount&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ExportCount&lt;br /&gt;
:    How many items exporfted since last ClearMemory.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Filtration&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Filtration&lt;br /&gt;
:	The current state of the filtration system.  For example filtration = 1 for a Hardsuit when filtration is On.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Harvest&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Harvest&lt;br /&gt;
:	Performs the harvesting action for any plant based machinery.&lt;br /&gt;
:  &amp;lt;code&amp;gt;s d0 Harvest 1 # Performs 1 harvest action on device d0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;Horizontal&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Horizontal&lt;br /&gt;
&amp;lt;div id=&amp;quot;HorizontalRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;HorizontalRatio&lt;br /&gt;
&amp;lt;div id=&amp;quot;Idle&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Idle&lt;br /&gt;
&amp;lt;div id=&amp;quot;ImportCount&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ImportCount&lt;br /&gt;
&amp;lt;div id=&amp;quot;Lock&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Lock&lt;br /&gt;
&amp;lt;div id=&amp;quot;Maximum&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Maximum&lt;br /&gt;
&amp;lt;div id=&amp;quot;Mode&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Mode&lt;br /&gt;
&amp;lt;div id=&amp;quot;On&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;On&lt;br /&gt;
&amp;lt;div id=&amp;quot;Open&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Open&lt;br /&gt;
&amp;lt;div id=&amp;quot;Output&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Output&lt;br /&gt;
&amp;lt;div id=&amp;quot;Plant&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Plant&lt;br /&gt;
:    Performs the planting operation for any plant based machinery.&lt;br /&gt;
:  &amp;lt;code&amp;gt;s d0 Plant 1 # Plants one crop in device d0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;PositionX&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PositionX&lt;br /&gt;
&amp;lt;div id=&amp;quot;PositionY&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PositionY&lt;br /&gt;
&amp;lt;div id=&amp;quot;PositionZ&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PositionZ&lt;br /&gt;
&amp;lt;div id=&amp;quot;Power&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Power&lt;br /&gt;
&amp;lt;div id=&amp;quot;PowerActual&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PowerActual&lt;br /&gt;
&amp;lt;div id=&amp;quot;PowerPotential&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PowerPotential&lt;br /&gt;
&amp;lt;div id=&amp;quot;PowerRequired&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PowerRequired&lt;br /&gt;
&amp;lt;div id=&amp;quot;Pressure&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Pressure&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureExternal&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureExternal&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureInteral&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureInteral&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureSetting&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureSetting&lt;br /&gt;
&amp;lt;div id=&amp;quot;Quantity&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Quantity&lt;br /&gt;
:	Total quantity in the device.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Ratio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Ratio&lt;br /&gt;
:	Context specific value depending on device, 0 to 1 based ratio.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioCarbonDioxide&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioCarbonDioxide&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioNitrogen&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioNitrogen&lt;br /&gt;
:	The ratio of nitrogen in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioOxygen&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioOxygen&lt;br /&gt;
:	The ratio of oxygen in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioPollutant&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioPollutant&lt;br /&gt;
:	The ratio of pollutant in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioVolatiles&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioVolatiles&lt;br /&gt;
:	The ratio of volatiles in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;RatioWater&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RatioWater&lt;br /&gt;
:	The ratio of water in device atmosphere.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Reagents&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Reagents&lt;br /&gt;
&amp;lt;div id=&amp;quot;RecipeHash&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RecipeHash&lt;br /&gt;
&amp;lt;div id=&amp;quot;RequestHash&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RequestHash&lt;br /&gt;
&amp;lt;div id=&amp;quot;RequiredPower&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;RequiredPower&lt;br /&gt;
&amp;lt;div id=&amp;quot;Setting&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Setting&lt;br /&gt;
&amp;lt;div id=&amp;quot;SolarAngle&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;SolarAngle&lt;br /&gt;
:    Solar angle of the device.&lt;br /&gt;
:  &amp;lt;code&amp;gt;l r0 d0 SolarAngle # Sets r0 to the solar angle of d0.&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;Temperature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Temperature&lt;br /&gt;
&amp;lt;div id=&amp;quot;TemperatureSettings&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;TemperatureSettings&lt;br /&gt;
&amp;lt;div id=&amp;quot;TotalMoles&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;TotalMoles&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityMagnitude&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityMagnitude&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityRelativeX&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityRelativeX&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityRelativeY&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityRelativeY&lt;br /&gt;
&amp;lt;div id=&amp;quot;VelocityRelativeZ&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VelocityRelativeZ&lt;br /&gt;
&amp;lt;div id=&amp;quot;Vertical&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Vertical&lt;br /&gt;
:	Vertical setting of the device.&lt;br /&gt;
&amp;lt;div id=&amp;quot;VerticalRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;VerticalRatio&lt;br /&gt;
:	Ratio of vertical setting for device.&lt;br /&gt;
&amp;lt;div id=&amp;quot;Volume&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Volume&lt;br /&gt;
:	Returns the device atmosphere volume&lt;br /&gt;
&lt;br /&gt;
==Slot Variables==&lt;br /&gt;
In general (always?) slots are assigned as follows.&lt;br /&gt;
:Slot 0: Import&lt;br /&gt;
:Slot 1: Export&lt;br /&gt;
:Slot 2: Inside Machine&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Occupied&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Occupied&lt;br /&gt;
:&amp;lt;code&amp;gt;ls r0 d0 2 Occupied #Stores 1 in r0 if d0 has more seeds&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ls vOccupied dThisVictim 2 Occupied #stores 1 in vOccupied if dThisVictim has more seeds&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;OccupantHash&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;OccupantHash&lt;br /&gt;
&amp;lt;div id=&amp;quot;Quantity&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Quantity&lt;br /&gt;
&amp;lt;div id=&amp;quot;Damage&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Damage&lt;br /&gt;
&amp;lt;div id=&amp;quot;Efficiency&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Efficiency&lt;br /&gt;
&amp;lt;div id=&amp;quot;Health&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Health&lt;br /&gt;
&amp;lt;div id=&amp;quot;Growth&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Growth&lt;br /&gt;
:&amp;lt;code&amp;gt;ls r0 d0 0 Growth # Store the numerical growth stage of d0 in r0&amp;lt;/code&amp;gt; &lt;br /&gt;
&amp;lt;div id=&amp;quot;Pressure&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Pressure&lt;br /&gt;
&amp;lt;div id=&amp;quot;Temperature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Temperature&lt;br /&gt;
&amp;lt;div id=&amp;quot;Charge&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Charge&lt;br /&gt;
&amp;lt;div id=&amp;quot;ChargeRatio&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;ChargeRatio&lt;br /&gt;
&amp;lt;div id=&amp;quot;Class&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Class&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureWaste&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureWaste&lt;br /&gt;
&amp;lt;div id=&amp;quot;PressureAir&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;PressureAir&lt;br /&gt;
&amp;lt;div id=&amp;quot;MaxQuantity&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;MaxQuantity&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Mature&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
;Mature&lt;br /&gt;
:&amp;lt;code&amp;gt;ls r0 d0 0 Mature # Store 1 in r0 if d0 has a mature crop&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;ls vMature dThisVictim 0 Mature # Store 1 in vMature if dThisVictim has a mature crop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=Examples=&lt;br /&gt;
Previous examples were obsolete due to game changes, or confusing, they have been moved into the Discussions section&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Harvie automation===&lt;br /&gt;
This script uses the batch instruction &amp;lt;code&amp;gt;sb ...&amp;lt;/code&amp;gt; to control all Harvie devices on the network. But only one Harvie and one Tray will be the &#039;&#039;master&#039;&#039; and have their values read, the rest of the Harvies will repeat exactly what this unit does. Some problems with this design is that different types of crops mature at different speeds, and if seeds were manually planted and the master unit recieved the first seed, the harvesting action will be performed too early on all the other plants since they are growing a few seconds slower.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;{{int:Expand, Automated Harvie Script}}&amp;quot; data-collapsetext=&amp;quot;{{int:Collapse, Automated Harvie Script}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
alias dHarvie d0&lt;br /&gt;
alias dTray d1&lt;br /&gt;
&lt;br /&gt;
alias rHarvieHash r8&lt;br /&gt;
alias rTrayHash r9&lt;br /&gt;
l rHarvieHash dHarvie PrefabHash&lt;br /&gt;
l rTrayHash dTray PrefabHash&lt;br /&gt;
&lt;br /&gt;
main:&lt;br /&gt;
yield&lt;br /&gt;
 #read plant data from the Tray&lt;br /&gt;
ls r0 dTray 0 Mature&lt;br /&gt;
 #harvestable plants return 1, young plants return 0&lt;br /&gt;
 #nothing planted returns -1&lt;br /&gt;
beq r0 -1 plantCrop&lt;br /&gt;
beq r0 1 harvestCrop&lt;br /&gt;
ls r0 dTray 0 Seeding&lt;br /&gt;
 #seeds available returns 1, all seeds picked returns 0&lt;br /&gt;
 #plants too young or old for seeds returns -1&lt;br /&gt;
beq r0 1 harvestCrop&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
plantCrop:&lt;br /&gt;
 #stop the planting if no seeds available&lt;br /&gt;
 #otherwise it will plant nothing repeatedly&lt;br /&gt;
ls r0 dHarvie 0 Occupied&lt;br /&gt;
beq r0 0 main&lt;br /&gt;
sb rHarvieHash Plant 1&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
harvestCrop:&lt;br /&gt;
sb rHarvieHash Harvest 1&lt;br /&gt;
j main&lt;br /&gt;
&lt;br /&gt;
### End Script ###&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Solar Panel 2-axis tracking===&lt;br /&gt;
This script was copied from the [[Solar_Logic_Circuits_Guide]] (code provided by bti, comments and readability changes by Fudd79)&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; data-expandtext=&amp;quot;{{int:Expand, Solar Panel 2-axis tracking}}&amp;quot; data-collapsetext=&amp;quot;{{int:Collapse, Solar Panel 2-axis tracking}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# This code assumes the following:&lt;br /&gt;
# Daylight Sensor data-port points north&lt;br /&gt;
# Solar Panel data-port points east&lt;br /&gt;
&lt;br /&gt;
alias sensor d0&lt;br /&gt;
alias v_angle r0&lt;br /&gt;
alias h_angle r1&lt;br /&gt;
alias sun_up r2&lt;br /&gt;
&lt;br /&gt;
define solar_panel_hash -539224550&lt;br /&gt;
define heavy_solar_panel_hash -1545574413&lt;br /&gt;
&lt;br /&gt;
start:&lt;br /&gt;
# Check to see if sun is up&lt;br /&gt;
l sun_up sensor Activate&lt;br /&gt;
# Go to reset if it&#039;s not&lt;br /&gt;
beqz sun_up reset&lt;br /&gt;
&lt;br /&gt;
# Calculate vertical angle&lt;br /&gt;
l v_angle sensor Vertical&lt;br /&gt;
div v_angle v_angle 1.5&lt;br /&gt;
sub v_angle 50 v_angle&lt;br /&gt;
&lt;br /&gt;
# Write vertical angle to all solar panels&lt;br /&gt;
sb solar_panel_hash Vertical v_angle&lt;br /&gt;
sb heavy_solar_panel_hash Vertical v_angle&lt;br /&gt;
&lt;br /&gt;
# Obtain horizontal angle&lt;br /&gt;
l h_angle sensor Horizontal&lt;br /&gt;
&lt;br /&gt;
# Write vertical angle to all solar panels&lt;br /&gt;
sb solar_panel_hash Horizontal h_angle&lt;br /&gt;
sb heavy_solar_panel_hash Horizontal h_angle&lt;br /&gt;
&lt;br /&gt;
# Go to start again&lt;br /&gt;
yield&lt;br /&gt;
j start&lt;br /&gt;
&lt;br /&gt;
reset:&lt;br /&gt;
# Park solar panels vertically facing sunrise&lt;br /&gt;
sb solar_panel_hash Vertical 0&lt;br /&gt;
sb heavy_solar_panel_hash Vertical 0&lt;br /&gt;
# Park solar panels horizontally facing sunrise&lt;br /&gt;
sb solar_panel_hash Horizontal -90&lt;br /&gt;
sb heavy_solar_panel_hash Horizontal -90&lt;br /&gt;
# Wait 10 seconds&lt;br /&gt;
sleep 10&lt;br /&gt;
# Go to start again&lt;br /&gt;
j start&lt;br /&gt;
&lt;br /&gt;
### End Script ###&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
===Example experiment: how many lines of code are executed each tick?===&lt;br /&gt;
To determine this, a script without &amp;lt;code&amp;gt;yield&amp;lt;/code&amp;gt; will be used. It should have as few lines as possible (so no labels are used, but a reset value at the top will be needed) and count the number of lines, the IC Housing will be used to display the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
move r0 1   #the first line has number 0&lt;br /&gt;
add r0 r0 3&lt;br /&gt;
s db Setting r0&lt;br /&gt;
j 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Result (the numbers appears every 0.5 seconds):&lt;br /&gt;
&amp;lt;br&amp;gt;127&lt;br /&gt;
&amp;lt;br&amp;gt;256 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;385 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;511 (+126)&lt;br /&gt;
&amp;lt;br&amp;gt;640 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;769 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;895 (+126)&lt;br /&gt;
&amp;lt;br&amp;gt;1024 (+129)&lt;br /&gt;
&amp;lt;br&amp;gt;1153 (+129)&lt;br /&gt;
&lt;br /&gt;
There is a repeating +129, +129, +126 sequence, a hint that the real value is 128. Which also happens to be the number of lines in a script, which makes sense. A variation of this experiment will show that empty rows are also counted towards this number.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=Links=&lt;br /&gt;
----&lt;br /&gt;
* [https://stationeering.com/tools/ic] Stationeering.com offers a programmable circuits simulator so you can develop your code without repeatedly dying in game!&lt;br /&gt;
* [http://www.easy68k.com/] EASy68K is a 68000 Structured Assembly Language IDE.&lt;br /&gt;
* [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10] syntax highlighting for IC10 MIPS for Visual Studio Code (updated Feb 10th 2022)&lt;br /&gt;
* [https://pastebin.com/6Uw1KSRN] syntax highlighting for IC10 MIPS for KDE kwrite/kate text editor&lt;br /&gt;
* [https://drive.google.com/file/d/1yEsJ-u94OkuMQ8K6fY7Ja1HNpLcAdjo_/view] syntax highlighting for IC10 MIPS for Notepad++&lt;br /&gt;
* [https://pastebin.com/3kmGy0NN] syntax highlighting for IC10 MIPS for Notepad++ (updated: 05/05/2021)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Index=&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|+Functions &lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
*[[#abs|abs]]&lt;br /&gt;
*[[#add|add]]&lt;br /&gt;
*[[#alias|alias]]&lt;br /&gt;
*[[#and|and]]&lt;br /&gt;
*[[#beq|beq]]&lt;br /&gt;
*[[#bgez|bgez]]&lt;br /&gt;
*[[#bgtz|bgtz]]&lt;br /&gt;
*[[#blez|blez]]&lt;br /&gt;
*[[#bltz|bltz]]&lt;br /&gt;
*[[#bne|bne]]&lt;br /&gt;
*[[#breq|breq]]&lt;br /&gt;
*[[#brgez|brgez]]&lt;br /&gt;
*[[#brgtz|brgtz]]&lt;br /&gt;
*[[#brlez|brlez]]&lt;br /&gt;
*[[#brltz|brltz]]&lt;br /&gt;
*[[#brne|brne]]&lt;br /&gt;
*[[#ceil|cell]]&lt;br /&gt;
*[[#div|div]]&lt;br /&gt;
*[[#exp|exp]]&lt;br /&gt;
*[[#floor|floor]]&lt;br /&gt;
*[[#j|j]]&lt;br /&gt;
*[[#jr|jr]]&lt;br /&gt;
*[[#l|l]]&lt;br /&gt;
*[[#log|log]]&lt;br /&gt;
*[[#ls|ls]]&lt;br /&gt;
*[[#max|max]]&lt;br /&gt;
*[[#min|min]]&lt;br /&gt;
*[[#mod|mod]]&lt;br /&gt;
*[[#move|move]]&lt;br /&gt;
*[[#mul|mul]]&lt;br /&gt;
*[[#nor|nor]]&lt;br /&gt;
*[[#or|or]]&lt;br /&gt;
*[[#rand|rand]]&lt;br /&gt;
*[[#round|round]]&lt;br /&gt;
*[[#s|s]]&lt;br /&gt;
*[[#slt|slt]]&lt;br /&gt;
*[[#sqrt|sqrt]]&lt;br /&gt;
*[[#sub|sub]]&lt;br /&gt;
*[[#trunc|trunc]]&lt;br /&gt;
*[[#xor|xor]]xor&lt;br /&gt;
*[[#yield|yield]]&lt;br /&gt;
*[[##|#]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|+Device Variables &lt;br /&gt;
&amp;lt;div  class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
*[[#Activate|Activate]]&lt;br /&gt;
*[[#AirRelease|AirRelease]]&lt;br /&gt;
*[[#Charge|Charge]]&lt;br /&gt;
*[[#CLearMemory|CLearMemory]]&lt;br /&gt;
*[[#Color|Color]]&lt;br /&gt;
*[[#CompletionRatio|CompletionRatio]]&lt;br /&gt;
*[[#ElevatorLevel|ElevatorLevel]]&lt;br /&gt;
*[[#ElevatorSpeed|ElevatorSpeed]]&lt;br /&gt;
*[[#Error|Error]]&lt;br /&gt;
*[[#ExportCount|ExportCount]]&lt;br /&gt;
*[[#Filtration|Filtration]]&lt;br /&gt;
*[[#Harvest|Harvest]]&lt;br /&gt;
*[[#Horizontal|Horizontal]]&lt;br /&gt;
*[[#HorizontalRatio|HorizontalRatio]]&lt;br /&gt;
*[[#Idle|Idle]]&lt;br /&gt;
*[[#ImportCount|ImportCount]]&lt;br /&gt;
*[[#Lock|Lock]]&lt;br /&gt;
*[[#Maximum|Maximum]]&lt;br /&gt;
*[[#Mode|Mode]]&lt;br /&gt;
*[[#On|On]]&lt;br /&gt;
*[[#Open|Open]]&lt;br /&gt;
*[[#Output|Output]]&lt;br /&gt;
*[[#Plant|Plant]]&lt;br /&gt;
*[[#PositionX|PositionX]]&lt;br /&gt;
*[[#PositionY|PositionY]]&lt;br /&gt;
*[[#PositionZ|PositionZ]]&lt;br /&gt;
*[[#Power|Power]]&lt;br /&gt;
*[[#PowerActual|PowerActual]]&lt;br /&gt;
*[[#PowerPotential|PowerPotential]]&lt;br /&gt;
*[[#PowerRequired|PowerRequired]]&lt;br /&gt;
*[[#Pressure|Pressure]]&lt;br /&gt;
*[[#PressureExternal|PressureExternal]]&lt;br /&gt;
*[[#PressureInteral|PressureInteral]]&lt;br /&gt;
*[[#PressureSetting|PressureSetting]]&lt;br /&gt;
*[[#Quantity|Quantity]]&lt;br /&gt;
*[[#Ratio|Ratio]]&lt;br /&gt;
*[[#RatioCarbonDioxide|RatioCarbonDioxide]]&lt;br /&gt;
*[[#RatioNitrogen|RatioNitrogen]]&lt;br /&gt;
*[[#RatioOxygen|RatioOxygen]]&lt;br /&gt;
*[[#RatioPollutant|RatioPollutant]]&lt;br /&gt;
*[[#RatioVolatiles|RatioVolatiles]]&lt;br /&gt;
*[[#RatioWater|RatioWater]]&lt;br /&gt;
*[[#Reagents|Reagents]]&lt;br /&gt;
*[[#RecipeHash|RecipeHash]]&lt;br /&gt;
*[[#RequestHash|RequestHash]]&lt;br /&gt;
*[[#RequiredPower|RequiredPower]]&lt;br /&gt;
*[[#Setting|Setting]]&lt;br /&gt;
*[[#SolarAngle|SolarAngle]]&lt;br /&gt;
*[[#Temperature|Temperature]]&lt;br /&gt;
*[[#TemperatureSettings|TemperatureSettings]]&lt;br /&gt;
*[[#TotalMoles|TotalMoles]]&lt;br /&gt;
*[[#VelocityMagnitude|VelocityMagnitude]]&lt;br /&gt;
*[[#VelocityRelativeX|VelocityRelativeX]]&lt;br /&gt;
*[[#VelocityRelativeY|VelocityRelativeY]]&lt;br /&gt;
*[[#VelocityRelativeZ|VelocityRelativeZ]]&lt;br /&gt;
*[[#Vertical|Vertical]]&lt;br /&gt;
*[[#VerticalRatio|VerticalRatio]]&lt;br /&gt;
*[[#Volume|Volume]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|+Slot Variables &lt;br /&gt;
&amp;lt;div  class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
*[[#Occupied|Occupied]]&lt;br /&gt;
*[[#OccupantHash|OccupantHash]]&lt;br /&gt;
*[[#Quantity|Quantity]]&lt;br /&gt;
*[[#Damage|Damage]]&lt;br /&gt;
*[[#Efficiency|Efficiency]]&lt;br /&gt;
*[[#Health|Health]]&lt;br /&gt;
*[[#Growth|Growth]]&lt;br /&gt;
*[[#Pressure|Pressure]]&lt;br /&gt;
*[[#Temperature|Temperature]]&lt;br /&gt;
*[[#Charge|Charge]]&lt;br /&gt;
*[[#ChargeRatio|ChargeRatio]]&lt;br /&gt;
*[[#Class|Class]]&lt;br /&gt;
*[[#PressureWaste|PressureWaste]]&lt;br /&gt;
*[[#PressureAir|PressureAir]]&lt;br /&gt;
*[[#MaxQuantity|MaxQuantity]]&lt;br /&gt;
*[[#Mature|Mature]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=IcX preprocessor=&lt;br /&gt;
&lt;br /&gt;
[https://traineratwot.aytour.ru/wiki Official wiki]&lt;/div&gt;</summary>
		<author><name>Traineratwot</name></author>
	</entry>
	<entry>
		<id>https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=11346</id>
		<title>Advanced IC10 Programming</title>
		<link rel="alternate" type="text/html" href="https://stationeers-wiki.com/index.php?title=Advanced_IC10_Programming&amp;diff=11346"/>
		<updated>2021-12-04T13:49:18Z</updated>

		<summary type="html">&lt;p&gt;Traineratwot: add info about extension&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:MIPS Programming]]&lt;br /&gt;
= VS code extension =&lt;br /&gt;
&#039;&#039;&#039;For convenient operation, there is an extension for the visual studio code IDE&#039;&#039;&#039; [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10 Link]&lt;br /&gt;
&lt;br /&gt;
and compiler [http://traineratwot.aytour.ru/wiki/icx ICX]&lt;br /&gt;
&lt;br /&gt;
= Flow Control And Data Manipulation =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For convenient operation, there is an extension for the visual studio code IDE&#039;&#039;&#039; [https://marketplace.visualstudio.com/items?itemName=Traineratwot.stationeers-ic10 Link]&lt;br /&gt;
&lt;br /&gt;
and compiler [http://traineratwot.aytour.ru/wiki/icx ICX]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: This level of coding is NOT needed to play the game to it&#039;s full extent. it&#039;s aimed at people looking for custom, self-inspired challenges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Devices By Register ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can use a register to access the device based on pin number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt; r0 0&lt;br /&gt;
next:&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Horizontal 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 Vertical 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; dr0 On 0&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt; r0 r0 1&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;blt&amp;lt;/span&amp;gt; r0 6 next&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family: Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
A function is just a label we jump to, but using the -al version of branch instructions (jal, beqzal) as they store the return address into the special &#039;&#039;&#039;ra&#039;&#039;&#039; register.&lt;br /&gt;
When calling a function from another function (or from itself), ra will be overwritten so we have to store it in the stack and take it out when the function completes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;push&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;pop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MySecondFunction:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
If we hadn&#039;t used the stack, the jump at the end of _MyFunction would take us to the call of _MySecondFunction instead of the main section.&lt;br /&gt;
&lt;br /&gt;
== Loops ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The challenge with loops is to keep them clean. Relative jumps are a great way to save lines but they can quickly turn code messy and adding lines might break them if you overlook them. If code length is not an issue, stick to labels where possible.&lt;br /&gt;
&lt;br /&gt;
== Indexing With Relative Jump ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIndex&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jr&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;123&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 0&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;456&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rValue&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;789&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 2&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;...&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Use this to set one or more parameters or call functions using an index number you calculated (or read from a dial button). We multiply it by 2 because we need space for a jump after each move command so we don&#039;t run the subsequent ones and we add 1 because for a 0 index &amp;quot;jr 0&amp;quot; would lock up our IC.&lt;br /&gt;
&lt;br /&gt;
== Redefining Aliases ==&lt;br /&gt;
&lt;br /&gt;
Say you have a complex function that manipulates a device (reads/writes multiple parameters, controls timing etc) and you want to reuse it for multiple devices. You could copy paste the whole function, or you could redefine the alias you used and point it to another device, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrent&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrent&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_MyFunction&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;NOTE: This wouldn&#039;t work in real languages since aliases and defines are just directives for the (pre)compiler, they&#039;re not evaluated during runtime by the CPU&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can combine this with a loop and indexing to run your function on multiple devices automatically.&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;move&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_UpdateReference&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jal&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_FunctionForDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgt&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Loop_End:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;main&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_UpdateReference:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;mul&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rIterator&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #6666FF;&amp;quot;&amp;gt;add&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;jr&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rTemp&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 0&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 1&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 2&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dCurrentDevice&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;d3&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Index 3&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Select_end:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;_FunctionForDevice:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF8000;&amp;quot;&amp;gt;#Manipulate dCurrentDevice&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Device Manipulation =&lt;br /&gt;
&lt;br /&gt;
== Timing And Parameters ==&lt;br /&gt;
&lt;br /&gt;
Some devices don&#039;t react well to having parameters changed while they&#039;re performing an action such as import or export. Notable mentions are the stacker, sorter and the vending machine. You can avoid them locking up (or getting jammed with items) either by adding delays (yield, sleep) or by actively waiting for their slots to become unoccupied, or their Activation to become 0.&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #000000; float: none&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;float: none; white-space: pre; line-height: 1; color: #FFFFFF; background: #000000; font-size: 110%;font-family:Consolas; margin-left: 10px;&amp;gt;&amp;lt;span&amp;gt;WaitForDevices:&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;yield&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dSorter&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Occupied&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgtz&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;WaitForDevices&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dSorter&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Occupied&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgtz&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;WaitForDevices&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dSorter&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Occupied&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgtz&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;WaitForDevices&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dVender&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Occupied&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgtz&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;WaitForDevices&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #00FFFF;&amp;quot;&amp;gt;ls&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;dVender&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;Occupied&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;bgtz&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;rBusy&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;WaitForDevices&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: #FF0000;&amp;quot;&amp;gt;j&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;ra&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; The slot reader labels slots from 1 but in the IC they start at 0. It is also a good idea to check any device involved in your solution with both a logical and slot reader as the current databases may not list all existing slots or parameters. You should always make use of all data available from devices as they may greatly simplify your project.&lt;br /&gt;
&lt;br /&gt;
Using delays is convenient, but has downsides. You&#039;re giving up real-time control over the process and may miss certain events or react too late and cause a device to jam. You also need to consider that code takes time to run, and for example if you have a complicated condition for setting the output of a sorter depending on the item that entered it, it may be better to leave it OFF by default and only turn it on once the output is correctly set. (Devices react differently to being fed items while powered down. ie the stacker will keep it in the Import slot but the vending machine will completely import it, so make sure to manually test everything you can prior to automating it)&lt;br /&gt;
= Sample Projects =&lt;br /&gt;
&lt;br /&gt;
== Vending Machine Exporter ==&lt;br /&gt;
&lt;br /&gt;
[[Vending_Machine_Export_IC10]]&lt;/div&gt;</summary>
		<author><name>Traineratwot</name></author>
	</entry>
</feed>