forked from minetest-mods/mesecons
2.6 KiB
2.6 KiB
The Microcontroller is a semi-advanced programmable component with a persistent 256 bit EEPROM memory.
Warning: This device is largely considered deprecated and might contain bugs. It is recommended to use a Luacontroller instead.
Detailed documentation can be found below:
- The Microcontroller's code is executed whenever any of the following events
happens:
- The Microcontroller is programmed. In this case the EEPROM and ports are all
reset to
0
before. - An incoming signal changes its state.
- An
after
event happens (see commandafter
below).
- The Microcontroller is programmed. In this case the EEPROM and ports are all
reset to
- There are 4 I/O ports (ABCD) and 256 EEPROM bits (1 to 256).
- The code consists of a sequence of commands.
- Everything after
:
is a comment. - Strings are enclosed in
"
s. - Spaces and tabs outside of strings are ignored.
- Basic command syntax:
command_name`(`param1`,` param2`,` ...`)`
- Commands:
if(condition) commands [> else_commands];
: Evaluates the given condition and takes the corresponding branch. The else branch is optional (as indicated by the[
and]
). The>
is part of the syntax and indicates the start of the else branch. The;
marks the end of the if command.on(port1, port2, ...)
: Sets the given ports to1
.off(port1, port2, ...)
: Sets the given ports to0
.print("string" or codition, ...)
: Evaluates the conditions and prints the concatenation of all params to stdout (only useful in singleplayer).after(time, "more commands")
: Executes the commands in the string after the given time in seconds. There can only be one waitingafter
event at once. Warning: This is not reliable, ie.minetest.after
is used.sbi(port_or_eeprom, condition)
: Evaluates the condition and sets the port or EEPROM bit to the resulting value. Note: EEPROM indices don't use#
here, ie. it'ssbi(1, #2)
, notsbi(#1, #2)
.
- Conditions (sorted by descending precedence; they are all evaluated from left
to right):
0
,1
: constantA
, ...,D
: value of a port. Takes writes that already happened during the current execution into account.#1
, ...,#256
: value of an EEPROM bit. Takes writes that already happened during the current execution into account.!condition
: negation (can only be applied once, ie. not!!1
)condition1 = condition2
: XNOR (equality)condition1 op condition2
whereop
is one of:&
: AND|
: OR~
: XOR (inequality)
- Note: Explicit precedence using parentheses is not supported.