x86 interpreter in a Minecraft datapack
There is a resource pack which retextures the blocks to show their instruction.
| Instruction | Args | Block | Description |
|---|---|---|---|
| add | R1 R2/HEX | warped_planks | Add value to R1, save to R1 |
| call | LBL/HEX | prismarine_bricks | Push EIP to stack, Jump to LBL or HEX |
| cmp | R1 R2/HEX | spruce_planks | Compare values and update the greater and equal flags |
| dec | R1 | dark_oak_planks | Decrement value of R1 by 1 |
| div | R1/HEX | birch_planks | Divide EAX by value. Store result in EAD and remainder in EDX |
| inc | R1 | acacia_planks | Increment value of R1 by 1 |
| int3 | packed_ice | Switch program to singlestep mode (Breakpoint) | |
| je | LBL/HEX | smooth_stone | Jump if the equal flag is set |
| jg | LBL/HEX | stone_bricks | Jump if the greater flag is set |
| jge | LBL/HEX | chiseled_stone_bricks | Jump if the greater flag or the equal flag is set |
| jl | LBL/HEX | mossy_stone_bricks | Jump if neither greater flag or equal flag is set |
| jle | LBL/HEX | cracked_stone_bricks | Jump if the greater flag is not set |
| jmp | LBL/HEX | slime_block | Jump to LBL or to HEX |
| jne | LBL/HEX | bricks | Jump if the equal flag is not set |
| load | R1 R2 | andesite | Read to R1 from ram[R2] |
| mov | R1 R2/HEX | oak_planks | Set the value of R1 to value |
| mul | R1/HEX | jungle_planks | Multiply EAX by value and save truncated result to EAX |
| pop | R1 | sponge | Read 32 bit value from stack and save to R1 |
| push | R1/HEX | wet_sponge | Write 32 bit value to top of stack |
| ret | prismarine | POP EIP | |
| store | R1 R2/HEX | cobblestone | Write value to R1 in ram |
| sub | R1 R2/HEX | crimson_planks | Subtract value to R1, save to R1 |
| syscall | chain_command_block | Execute a syscall |
| Register | Block | Common uses |
|---|---|---|
| EAX | netherite | Return value |
| EBX | diamond_block | |
| ECX | iron_block | |
| EDX | gold_block | |
| ESI | redstone_block | |
| EDI | coal_block | |
| ESP | emerald_block | Stack Pointer |
| EBP | lapis_block | |
| EIP | dark_prismarine | Instruction Pointer |
| IDK1 | quartz_block | |
| IDK2 | blue_ice |
| Syscall | EAX | Desc |
|---|---|---|
| read | 0 | Read from player to EAX. (Hangs until read) |
| 1 | Prints integer value from EBX | |
| random | 2 | Reads random 32 bit value to EAX |
