4.7 KiB
machine
memory
one large uint32 array
types
real (fixed point numbers)| Q16.16 number int (integer) i32 nat (unsigned integer) u32
3-3-2 bit rgb
rrrg ggbb xxxx yyyy
triangles
textures
devices
screen
default screen is a single 2 triangle square face with a single dynamic texture that can be drawn on it
keyboard
ASCIIUTF8 encoded values
mousejoystick
Theoretically a modern controller could be mapped into 3 mousejoystick devices
A nes controller could be mapped onto 1 mousejoystick device
x axis -> J1 -> J2 -> Dpad leftright y axis -> J1 -> J2 -> Dpad updown button 1 -> A -> t1 -> select button 2 -> B -> t2 -> start button 3 -> X -> b2 -> "meta button like controller start" button 4 -> Y -> b2 -> unused
xxxx yyyy 1234
x (4 bits) y (4 bits) 1 is button 1 pressed? 2 is button 2 pressed? 3 is button 3 pressed? 4 is button 4 pressed?
soundmusic
This one is going to be the hardest most likely| but its prolly going to be something like the backend dac for ORCA.
networkfilesystem
9p filesystemnetwork by default.
Have an easy way to network.
opcodes
| opcode | description |
| HALT | terminate execution |
| ADD-INT | dest = src1 + src2 |
| SUB-INT | dest = src1 - src2 |
| MUL-INT | dest = src1 src2 |
| DIV-INT | dest = src1 src2 |
| JEQ-INT | jump to address dest if src1 as int == src2 as int |
| JGT-INT | jump to address dest if src1 as int > src2 as int |
| JLT-INT | jump to address dest if src1 as int < src2 as int |
| JLE-INT | jump to address dest if src1 as int <= src2 as int |
| JGE-INT | jump to address dest if src1 as int >= src2 as int |
| INT-TO-REAL | dest = src1 as f32 |
| ADD-UINT | dest = src1 + src2 |
| SUB-UINT | dest = src1 - src2 |
| MUL-UINT | dest = src1 src2 |
| DIV-UINT | dest = src1 src2 |
| JEQ-UINT | jump to address dest if src1 as int == src2 as uint |
| JGT-UINT | jump to address dest if src1 as int > src2 as uint |
| JLT-UINT | jump to address dest if src1 as int < src2 as uint |
| JLE-UINT | jump to address dest if src1 as int <= src2 as uint |
| JGE-UINT | jump to address dest if src1 as int >= src2 as uint |
| UINT-TO-REAL | dest = src1 as f32 |
| ADD-REAL | dest = src1 + src2 |
| SUB-REAL | dest = src1 - src2 |
| MUL-REAL | dest = src1 src2 |
| DIV-REAL | dest = src1 src2 |
| JEQ-REAL | jump to address dest if src1 as real == src2 as real |
| JGE-REAL | jump to address dest if src1 as real >= src2 as real |
| JGT-REAL | jump to address dest if src1 as real > src2 as real |
| JLT-REAL | jump to address dest if src1 as real < src2 as real |
| JLE-REAL | jump to address dest if src1 as real <= src2 as real |
| REAL-TO-INT | dest = src1 as int |
| REAL-TO-UINT | dest = src1 as int |
| MOV | dest = src1 |
| JMP | jump to address src1 unconditionally |
| INT-TO-STRING | dest = src1 as str |
| UINT-TO-STRING | dest = src1 as str |
| REAL-TO-STRING | dest = src1 as str |
| READ-STRING | dest = read as str |
| PRINT-STRING | write src1 to stdout |
| CMP-STRING | dest = src1 as str == src2 as str |