Difference between revisions of "IC10"
From Unofficial Stationeers Wiki
(alphabetized keywords, added infrastructure for in-definition examples and various examples, added bdseal, added alias definition) |
(added links from script functions in the index to their definitions / examples.) |
||
Line 1: | Line 1: | ||
Keywords: | Keywords: | ||
− | < | + | |
− | + | MIPS scripting language for IC10 housings / chips<br> | |
− | abs | + | |
− | add | + | *[[#abs|abs]] |
− | alias | + | *[[#add|add]] |
− | and | + | *[[#alias|alias]] |
− | beq | + | *[[#and|and]] |
− | bgez | + | *[[#beq|beq]] |
− | bgtz | + | *[[#bgez|bgez]] |
− | blez | + | *[[#bgtz|bgtz]] |
− | bltz | + | *[[#blez|blez]] |
− | bne | + | *[[#bltz|bltz]] |
− | breq | + | *[[#bne|bne]] |
− | brgez | + | *[[#breq|breq]] |
− | brgtz | + | *[[#brgez|brgez]] |
− | brlez | + | *[[#brgtz|brgtz]] |
− | brltz | + | *[[#brlez|brlez]] |
− | brne | + | *[[#brltz|brltz]] |
− | ceil | + | *[[#brne|brne]] |
− | div | + | *[[#ceil|cell]] |
− | exp | + | *[[#div|div]] |
− | floor | + | *[[#exp|exp]] |
− | j | + | *[[#floor|floor]] |
− | jr | + | *[[#j|j]] |
− | l | + | *[[#jr|jr]] |
− | log | + | *[[#l|l]] |
− | ls | + | *[[#log|log]] |
− | max | + | *[[#ls|ls]] |
− | min | + | *[[#max|max]] |
− | mod | + | *[[#min|min]] |
− | move | + | *[[#mod|mod]] |
− | mul | + | *[[#move|move]] |
− | nor | + | *[[#mul|mul]] |
− | or | + | *[[#nor|nor]] |
− | rand | + | *[[#or|or]] |
− | round | + | *[[#rand|rand]] |
− | s | + | *[[#round|round]] |
− | slt | + | *[[#s|s]] |
− | sqrt | + | *[[#slt|slt]] |
− | sub | + | *[[#sqrt|sqrt]] |
− | trunc | + | *[[#sub|sub]] |
− | xor | + | *[[#trunc|trunc]] |
− | yield | + | *[[#xor|xor]]xor |
− | + | *[[#yield|yield]] | |
+ | *[[##|#]] | ||
+ | |||
---- | ---- | ||
Line 54: | Line 56: | ||
<br> | <br> | ||
+ | <div id="alias"></div> | ||
;alias | ;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 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) | ||
Line 60: | Line 63: | ||
<code>alias dAutoHydro1 d0</code> | <code>alias dAutoHydro1 d0</code> | ||
+ | <div id="move"></div> | ||
;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> | <code>move r0 42 # Store 42 in register 0</code> | ||
+ | <div id="add"></div> | ||
;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 | ||
Line 69: | Line 74: | ||
<br> | <br> | ||
<code>add r0 r0 1 # increment r0 by one</code> | <code>add r0 r0 1 # increment r0 by one</code> | ||
+ | <div id="sub"></div> | ||
;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 | ||
+ | <div id="mul"></div> | ||
;mul | ;mul | ||
:d s t // calculates s * t and stores the result in d | :d s t // calculates s * t and stores the result in d | ||
+ | <div id="div"></div> | ||
;div | ;div | ||
:d s t // calculates s / t and stores the result in d | :d s t // calculates s / t and stores the result in d | ||
+ | <div id="mod"></div> | ||
;mod | ;mod | ||
:d s t | :d s t | ||
Line 81: | Line 90: | ||
::// positive even if the either of the operands are negative | ::// positive even if the either of the operands are negative | ||
+ | <div id="slt"></div> | ||
;slt | ;slt | ||
:d s t // stores 1 in d if s < t, 0 otherwise | :d s t // stores 1 in d if s < t, 0 otherwise | ||
+ | <div id="sqrt"></div> | ||
;sqrt | ;sqrt | ||
:d s // calculates sqrt(s) and stores the result in d | :d s // calculates sqrt(s) and stores the result in d | ||
+ | <div id="round"></div> | ||
;round | ;round | ||
:d s // finds the rounded value of s and stores the result in d | :d s // finds the rounded value of s and stores the result in d | ||
+ | <div id="trunc"></div> | ||
;trunc | ;trunc | ||
:d s // finds the truncated value of s and stores the result in d | :d s // finds the truncated value of s and stores the result in d | ||
+ | <div id="ceil"></div> | ||
;ceil | ;ceil | ||
: d s // calculates the ceiling of s and stores the result in d | : d s // calculates the ceiling of s and stores the result in d | ||
+ | <div id="floor"></div> | ||
;floor | ;floor | ||
: d s // calculates the floor of s and stores the result in d | : d s // calculates the floor of s and stores the result in d | ||
+ | <div id="max"></div> | ||
;max | ;max | ||
: d s t // calculates the maximum of s and t and stores the result in d | : d s t // calculates the maximum of s and t and stores the result in d | ||
+ | <div id="min"></div> | ||
;min | ;min | ||
: d s t // calculates the minimum of s and t and stores the result in d | : d s t // calculates the minimum of s and t and stores the result in d | ||
+ | <div id="abs"></div> | ||
;abs | ;abs | ||
: d s // calculates the absolute value of s and stores the result in d | : d s // calculates the absolute value of s and stores the result in d | ||
+ | <div id="log"></div> | ||
;log | ;log | ||
: d s // calculates the natural logarithm of s and stores the result | : d s // calculates the natural logarithm of s and stores the result | ||
::// in d | ::// in d | ||
+ | <div id="exp"></div> | ||
;exp | ;exp | ||
: d s // calculates the exponential of s and stores the result in d | : d s // calculates the exponential of s and stores the result in d | ||
+ | <div id="rand"></div> | ||
;rand | ;rand | ||
: d // selects a random number uniformly at random between 0 and 1 | : d // selects a random number uniformly at random between 0 and 1 | ||
Line 112: | Line 133: | ||
::// boolean arithmetic uses the C convention that 0 is false and any non-zero | ::// boolean arithmetic uses the C convention that 0 is false and any non-zero | ||
::// value is true. | ::// value is true. | ||
+ | <div id="and"></div> | ||
;and | ;and | ||
: d s t // stores 1 in d if both s and t have non-zero values, | : d s t // stores 1 in d if both s and t have non-zero values, | ||
::// 0 otherwise | ::// 0 otherwise | ||
+ | <div id="or"></div> | ||
;or | ;or | ||
: d s t // stores 1 in d if either s or t have non-zero values, | : d s t // stores 1 in d if either s or t have non-zero values, | ||
::// 0 otherwise | ::// 0 otherwise | ||
+ | <div id="xor"></div> | ||
;xor | ;xor | ||
: d s t // stores 1 in d if exactly one of s and t are non-zero, | : d s t // stores 1 in d if exactly one of s and t are non-zero, | ||
::// 0 otherwise | ::// 0 otherwise | ||
+ | <div id="nor"></div> | ||
;nor | ;nor | ||
: d s t // stores 1 in d if both s and t equal zero, 0 otherwise | : d s t // stores 1 in d if both s and t equal zero, 0 otherwise | ||
Line 126: | Line 151: | ||
// Lines are numbered starting at zero | // Lines are numbered starting at zero | ||
+ | <div id="j"></div> | ||
;j | ;j | ||
: a // jumps to line a. | : a // jumps to line a. | ||
+ | <div id="bltz"></div> | ||
;bltz | ;bltz | ||
: s a // jumps to line a if s < 0 | : s a // jumps to line a if s < 0 | ||
+ | <div id="blez"></div> | ||
;blez | ;blez | ||
: s a // jumps to line a if s <= 0 | : s a // jumps to line a if s <= 0 | ||
+ | |||
+ | <div id="bgez"></div> | ||
;bgez | ;bgez | ||
: s a // jumps to line a if s >= 0 | : s a // jumps to line a if s >= 0 | ||
+ | <div id="bgtz"></div> | ||
;bgtz | ;bgtz | ||
: s a // jumps to line a if s > 0 | : s a // jumps to line a if s > 0 | ||
+ | <div id="beq"></div> | ||
;beq | ;beq | ||
: s t a // jumps to line a if s == t | : s t a // jumps to line a if s == t | ||
+ | <div id="bne"></div> | ||
;bne | ;bne | ||
: s t a // jumps to line a if s != t | : s t a // jumps to line a if s != t | ||
+ | <div id="bdseal"></div> | ||
;bdseal | ;bdseal | ||
: d? a(r?|num) // Jump execution to line a and store current line number if device d? is set. | : d? a(r?|num) // Jump execution to line a and store current line number if device d? is set. | ||
Line 146: | Line 180: | ||
<code>bdseal dThisVictim HarvestCrop #Store line in ra and jump to sub HarvestCrop if device dThisVictim is assigned.</code> | <code>bdseal dThisVictim HarvestCrop #Store line in ra and jump to sub HarvestCrop if device dThisVictim is assigned.</code> | ||
+ | <div id="yield"></div> | ||
;yield | ;yield | ||
: // ceases code execution for this power tick | : // ceases code execution for this power tick | ||
+ | |||
+ | <div id="#"></div> | ||
+ | ; # | ||
+ | : // The following text will be ignored during compiling; use this to create comments. | ||
+ | ----- | ||
+ | |||
This is a sample timer command set, alternating between 1 for 1 tick (0.5s), then off for 2 ticks (1s). | This is a sample timer command set, alternating between 1 for 1 tick (0.5s), then off for 2 ticks (1s). |
Revision as of 20:41, 22 October 2018
Keywords:
MIPS scripting language for IC10 housings / chips
- abs
- add
- alias
- and
- beq
- bgez
- bgtz
- blez
- bltz
- bne
- breq
- brgez
- brgtz
- brlez
- brltz
- brne
- cell
- div
- exp
- floor
- j
- jr
- l
- log
- ls
- max
- min
- mod
- move
- mul
- nor
- or
- rand
- round
- s
- slt
- sqrt
- sub
- trunc
- xorxor
- 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
- #
- // The following text will be ignored during compiling; use this to create comments.
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