Difference between revisions of "IC10"
From Unofficial Stationeers Wiki
(added links from script functions in the index to their definitions / examples.) |
(Added functions, slot variables and examples section headers, added slot variables, and provided examples for various slot variables.) |
||
Line 1: | Line 1: | ||
− | + | =MIPS scripting language for IC10 housings / chips | |
− | |||
− | |||
− | MIPS scripting language for IC10 housings / chips | ||
+ | {| | ||
+ | |+Functions | ||
+ | <div class="mw-collapsible mw-collapsed"> | ||
*[[#abs|abs]] | *[[#abs|abs]] | ||
*[[#add|add]] | *[[#add|add]] | ||
Line 46: | Line 46: | ||
*[[#yield|yield]] | *[[#yield|yield]] | ||
*[[##|#]] | *[[##|#]] | ||
− | + | </div> | |
− | + | |+Slot Variables | |
− | -- | + | <div class="mw-collapsible mw-collapsed"> |
+ | *[[#Occupied|Occupied]] | ||
+ | *[[#OccupantHash|OccupantHash]] | ||
+ | *[[#Quantity|Quantity]] | ||
+ | *[[#Damage|Damage]] | ||
+ | *[[#Efficiency|Efficiency]] | ||
+ | *[[#Health|Health]] | ||
+ | *[[#Growth|Growth]] | ||
+ | *[[#Pressure|Pressure]] | ||
+ | *[[#Temperature|Temperature]] | ||
+ | *[[#Charge|Charge]] | ||
+ | *[[#ChargeRatio|ChargeRatio]] | ||
+ | *[[#Class|Class]] | ||
+ | *[[#PressureWaste|PressureWaste]] | ||
+ | *[[#PressureAir|PressureAir]] | ||
+ | *[[#MaxQuantity|MaxQuantity]] | ||
+ | *[[#Mature|Mature]] | ||
+ | </div> | ||
+ | |} | ||
<pre> | <pre> | ||
Line 54: | Line 72: | ||
// space between arguments isn't important, but new lines start a new command. | // space between arguments isn't important, but new lines start a new command. | ||
</pre> | </pre> | ||
+ | <br> | ||
+ | |||
+ | ==Functions== | ||
+ | ---- | ||
+ | |||
− | |||
<div id="alias"></div> | <div id="alias"></div> | ||
;alias | ;alias | ||
Line 187: | Line 209: | ||
; # | ; # | ||
: // The following text will be ignored during compiling; use this to create comments. | : // The following text will be ignored during compiling; use this to create comments. | ||
+ | |||
+ | ==Slot Variables== | ||
----- | ----- | ||
+ | <div id="Occupied"></div> | ||
+ | ;Occupied | ||
+ | :<code>ls r0 d0 2 Occupied #Stores 1 in r0 if d0 has more seeds</code> | ||
+ | :<code>ls vOccupied dThisVictim 2 Occupied #stores 1 in vOccupied if dThisVictim has more seeds</code> | ||
+ | <div id="OccupantHash"></div> | ||
+ | ;OccupantHash | ||
+ | <div id="Quantity"></div> | ||
+ | ;Quantity | ||
+ | <div id="Damage"></div> | ||
+ | ;Damage | ||
+ | <div id="Efficiency"></div> | ||
+ | ;Efficiency | ||
+ | <div id="Health"></div> | ||
+ | ;Health | ||
+ | <div id="Growth"></div> | ||
+ | ;Growth | ||
+ | :<code>ls r0 d0 0 Growth # Store the numerical growth stage of d0 in r0</code> | ||
+ | <div id="Pressure"></div> | ||
+ | ;Pressure | ||
+ | <div id="Temperature"></div> | ||
+ | ;Temperature | ||
+ | <div id="Charge"></div> | ||
+ | ;Charge | ||
+ | <div id="ChargeRatio"></div> | ||
+ | ;ChargeRatio | ||
+ | <div id="Class"></div> | ||
+ | ;Class | ||
+ | <div id="PressureWaste"></div> | ||
+ | ;PressureWaste | ||
+ | <div id="PressureAir"></div> | ||
+ | ;PressureAir | ||
+ | <div id="MaxQuantity"></div> | ||
+ | ;MaxQuantity | ||
+ | |||
+ | <div id="Mature"></div> | ||
+ | ;Mature | ||
+ | :<code>ls r0 d0 0 Mature # Store 1 in r0 if d0 has a mature crop</code> | ||
+ | :<code>ls vMature dThisVictim 0 Mature # Store 1 in vMature if dThisVictim has a mature crop</code> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==Example== | ||
+ | ----- | ||
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 22:12, 22 October 2018
=MIPS scripting language for IC10 housings / chips
// 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.
Functions
- 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.
Slot Variables
- Occupied
ls r0 d0 2 Occupied #Stores 1 in r0 if d0 has more seeds
ls vOccupied dThisVictim 2 Occupied #stores 1 in vOccupied if dThisVictim has more seeds
- OccupantHash
- Quantity
- Damage
- Efficiency
- Health
- Growth
ls r0 d0 0 Growth # Store the numerical growth stage of d0 in r0
- Pressure
- Temperature
- Charge
- ChargeRatio
- Class
- PressureWaste
- PressureAir
- MaxQuantity
- Mature
ls r0 d0 0 Mature # Store 1 in r0 if d0 has a mature crop
ls vMature dThisVictim 0 Mature # Store 1 in vMature if dThisVictim has a mature crop
Example
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