59 lines
2.6 KiB
Markdown
59 lines
2.6 KiB
Markdown
<!-- Generate `description.html` from this by using `$ md2html -o description.html description.md`. -->
|
|
|
|
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 command `after` below).
|
|
* 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 to `1`.
|
|
* `off(port1, port2, ...)`:
|
|
Sets the given ports to `0`.
|
|
* `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 waiting `after` 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's `sbi(1, #2)`, not `sbi(#1, #2)`.
|
|
* Conditions (sorted by descending precedence; they are all evaluated from left
|
|
to right):
|
|
* `0`, `1`: constant
|
|
* `A`, ..., `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` where `op` is one of:
|
|
* `&`: AND
|
|
* `|`: OR
|
|
* `~`: XOR (inequality)
|
|
* Note: Explicit precedence using parentheses is not supported.
|