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 |