redc
Version:
Compiles RED lang into Minecraft schematics
65 lines (52 loc) • 2.11 kB
Markdown
# redc
the compiler for REDlang, a minecraft general purpose computer
## Usage
```
$ npm install -g redc
$ redc -f <path/to/file>
```
All options:
| option | short | description |
|--------|-------|-------------|
| --file | -f | Path to input RED file [required]
| --out | -o | Directory to output .mcfunction (defaults to the current directory)
| --name | -n | Name of the outputted .mcfunction file (defaults to name of <file>)
In node
```javascript
import redc from 'redc';
// or: import { compile } from 'redc';
redc.compile(...).then(console.log);
// => "setblock..."
```
## Executing code on the computer
1. Build the code: `redc -f <filename> -o`
2. Find the save file of your copy of the computer (typically in `AppData/Roaming/.minecraft/saves/...` on Windows)
3. Copy the `.mcfunction` file into `datapacks/red/data/red/functions`
4. Enter the world in Minecraft (if you are already in it, leave so the game reparses functions)
5. Enter command `/function red:<filename>`
6. Go to the front of the ROM and disable the breaker right outside it (the row of pistons)
## REDlang
REDlang is very low level. Every line translates 1:1 with machine code.
A VSCode extension for syntax highlighting is available for install [redlang](https://marketplace.visualstudio.com/items?itemName=probeiuscorp.redlang)
Example:
```
use i = ram:0
use counter = device:0
@entry
[Main]
i = 0
goto Loop
[Loop]
counter = i
i = i plus 1
# i will roll over eventually and then the `if` will not pass
goto Loop if i
# fall through
exit
```
The code will run like a `for` loop, writing the index to the first word of device memory, starting from 0 and counting until it overflows at 63.
#### Breakdown
- The code defines two variables, allocating their sources and address in memory, syntax being: `use <variable> = <ram|device|input>:<address>`.
- It defines two routines, `Main` and `Loop`, tagging `Main` as the entry routine.
- `i` is initialized to 0 because there might be some memory from an old execution.
- `counter` cannot be assigned to `counter + 1` because `counter` is write-only memory.