Actions

Difference between revisions of "MIPS"

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:
  
<pre>
+
 
IC10
+
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
</pre>
+
*[[#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 21:41, 22 October 2018

Keywords:


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.


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