The wiki has moved!

Visit the new wiki at stationeers-wiki.com The old wiki here at legacy.stationeers-wiki.com will sunset eventually.

Edits made after the 7th of March 6PM EST were NOT carried over to the new server as previously announced right here in this box.

 Actions

Difference between revisions of "IC10"

From Unofficial Stationeers Wiki

(Adjusted formatting to (hopefully) improve readability. Added IC10 to keywords.)
(alphabetized keywords, added infrastructure for in-definition examples and various examples, added bdseal, added alias definition)
Line 3: Line 3:
 
<pre>
 
<pre>
 
IC10
 
IC10
l
+
abs
s
+
add
ls
 
 
alias
 
alias
move
 
add
 
sub
 
slt
 
 
and
 
and
or
+
beq
xor
 
nor
 
mul
 
div
 
mod
 
j
 
bltz
 
 
bgez
 
bgez
 +
bgtz
 
blez
 
blez
bgtz
+
bltz
beq
 
 
bne
 
bne
jr
+
breq
brltz
 
 
brgez
 
brgez
 +
brgtz
 
brlez
 
brlez
brgtz
+
brltz
breq
 
 
brne
 
brne
sqrt
 
round
 
trunc
 
 
ceil
 
ceil
 +
div
 +
exp
 
floor
 
floor
 +
j
 +
jr
 +
l
 +
log
 +
ls
 
max
 
max
 
min
 
min
abs
+
mod
log
+
move
exp
+
mul
 +
nor
 +
or
 
rand
 
rand
 +
round
 +
s
 +
slt
 +
sqrt
 +
sub
 +
trunc
 +
xor
 
yield
 
yield
 
</pre>
 
</pre>
Line 54: Line 54:
  
 
<br>
 
<br>
 +
;alias
 +
:alias str r? d? // labels register or device reference with name.  When alias is applied to a device, it will effect what shows on the screws in the IC base.  (housing)
 +
<code>alias vTemperature r0</code>
 +
<br>
 +
<code>alias dAutoHydro1 d0</code>
  
 
;move     
 
;move     
 
:d s    // stores the value of s in d
 
:d s    // stores the value of s in d
 +
<code>move r0 42 # Store 42 in register 0</code>
  
 
;add     
 
;add     
 
:d s t  // calculates s + t and stores the result in d
 
:d s t  // calculates s + t and stores the result in d
 +
<code>add r0 r1 1 # add 1 to r1 and store the result as r0</code>
 +
<br>
 +
<code>add r0 r0 1 # increment r0 by one</code>
 
;sub     
 
;sub     
 
:d s t  // calculates s - t and stores the result in d
 
:d s t  // calculates s - t and stores the result in d
Line 131: Line 140:
 
;bne  
 
;bne  
 
:      s t a // jumps to line a if s != t
 
:      s t a // jumps to line a if s != t
 +
;bdseal
 +
:    d? a(r?|num) // Jump execution to line a and store current line number if device d? is set.
 +
<code>bdseal d0 32 #Store line number and jump to line 32 if d0 is assigned.</code>
 +
<BR>
 +
<code>bdseal dThisVictim HarvestCrop #Store line in ra and jump to sub HarvestCrop if device dThisVictim is assigned.</code>
  
 
;yield           
 
;yield           

Revision as of 20:52, 22 October 2018

Keywords:

IC10
abs
add
alias
and
beq
bgez
bgtz
blez
bltz
bne
breq
brgez
brgtz
brlez
brltz
brne
ceil
div
exp
floor
j
jr
l
log
ls
max
min
mod
move
mul
nor
or
rand
round
s
slt
sqrt
sub
trunc
xor
yield

// Text after a // will be ignored to the end of the line. The amount of white
// space between arguments isn't important, but new lines start a new command.


alias
alias str r? d? // labels register or device reference with name. When alias is applied to a device, it will effect what shows on the screws in the IC base. (housing)

alias vTemperature r0
alias dAutoHydro1 d0

move
d s // stores the value of s in d

move r0 42 # Store 42 in register 0

add
d s t // calculates s + t and stores the result in d

add r0 r1 1 # add 1 to r1 and store the result as r0
add r0 r0 1 # increment r0 by one

sub
d s t // calculates s - t and stores the result in d
mul
d s t // calculates s * t and stores the result in d
div
d s t // calculates s / t and stores the result in d
mod
d s t
// calculates s mod t and stores the result in d. Note this
// doesn't behave like the % operator - the result will be
// positive even if the either of the operands are negative
slt
d s t // stores 1 in d if s < t, 0 otherwise
sqrt
d s // calculates sqrt(s) and stores the result in d
round
d s // finds the rounded value of s and stores the result in d
trunc
d s // finds the truncated value of s and stores the result in d
ceil
d s // calculates the ceiling of s and stores the result in d
floor
d s // calculates the floor of s and stores the result in d
max
d s t // calculates the maximum of s and t and stores the result in d
min
d s t // calculates the minimum of s and t and stores the result in d
abs
d s // calculates the absolute value of s and stores the result in d
log
d s // calculates the natural logarithm of s and stores the result
// in d
exp
d s // calculates the exponential of s and stores the result in d
rand
d // selects a random number uniformly at random between 0 and 1
// inclusive and stores the result in d
// boolean arithmetic uses the C convention that 0 is false and any non-zero
// value is true.
and
d s t // stores 1 in d if both s and t have non-zero values,
// 0 otherwise
or
d s t // stores 1 in d if either s or t have non-zero values,
// 0 otherwise
xor
d s t // stores 1 in d if exactly one of s and t are non-zero,
// 0 otherwise
nor
d s t // stores 1 in d if both s and t equal zero, 0 otherwise


// Lines are numbered starting at zero

j
a // jumps to line a.
bltz
s a // jumps to line a if s < 0
blez
s a // jumps to line a if s <= 0
bgez
s a // jumps to line a if s >= 0
bgtz
s a // jumps to line a if s > 0
beq
s t a // jumps to line a if s == t
bne
s t a // jumps to line a if s != t
bdseal
d? a(r?|num) // Jump execution to line a and store current line number if device d? is set.

bdseal d0 32 #Store line number and jump to line 32 if d0 is assigned.
bdseal dThisVictim HarvestCrop #Store line in ra and jump to sub HarvestCrop if device dThisVictim is assigned.

yield
// ceases code execution for this power tick

This is a sample timer command set, alternating between 1 for 1 tick (0.5s), then off for 2 ticks (1s).

move r0 0		// Line 0: move the value 0 to register0
sub r1 r0 3		// Line 1: subtract 3 from the value in r0 and write it to r1
bltz r1 4		// Line 2: jump to line 4 if r1 < 0 (skip the next line)
move r0 0		// Line 3: move the value 0 to register0 
slt o r0 1		// Line 4: if r0 < 1 write 1 to the output, otherwise 0.
add r0 r0 1		// Line 5: increment r0 by 1
yield			// Line 6: wait until next power tick (0.5s)
j 1			// Line 7: jump back to line 1	

Example:

so you will do l r0 d0 SolarAngle
Sorry had last args swapped
That would read in the value
while,
s d1 Vertical r0
Would write the contents of r0 into the devices 1's Vertical property
additionally you can make some aliases
alias SolarSensor d0
l r0 SolarSensor SolarAngle

Another example:

Now the IC is inserted into the housing. The screws D0-D5 can be adjusted directly to the equipment (sensor, console, solar panel, etc.). The ports 'o' and 'i0-i2' have been removed. Instead, commands that directly read and write hardware parameters are added.
l <register> <data_channel> <parameter>
 reads the value of the parameter
s <data_channel> <parameter> <register_or_value>
 writes the value of the parameter
ls <register> <data_channel> <slot_number> <parameter> 
 reads the parameter value from the slot
For example, 
l r0 d0 Horizontal
 
s d5 Activate 1
 
ls r3 db 0 OccupantHash