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
0before. - An incoming signal changes its state.
- An
afterevent happens (see commandafterbelow).
- 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 waitingafterevent at once. Warning: This is not reliable, ie.minetest.afteris 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 condition2whereopis one of:&: AND|: OR~: XOR (inequality)
- Note: Explicit precedence using parentheses is not supported.