mirror of
https://github.com/minetest-mods/mesecons.git
synced 2025-06-29 14:20:25 +02:00
Add documentation for Microcontroller (#603)
This commit is contained in:
59
mesecons_microcontroller/doc/microcontroller/description.md
Normal file
59
mesecons_microcontroller/doc/microcontroller/description.md
Normal file
@ -0,0 +1,59 @@
|
||||
<!-- 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.
|
Reference in New Issue
Block a user