mirror of
https://github.com/BoredDevNL/BoredOS.git
synced 2026-05-15 10:48:38 +00:00
1.50 is a version with not that many "os-related" updates, but it does bring something new: BoredOS! Since BrewOS was already being used for a custom operating system for smart coffee machines, i decided to copy the naming of my github username: BoreddevNL and turned that into, well BoredOS. Anyways this update brings some extra stability and graphical bug fixes, that's about it. Oh yeah also a mouse sensitivity slider in the control panel. Enjoy!
108 lines
No EOL
2.1 KiB
C
108 lines
No EOL
2.1 KiB
C
#ifndef VM_H
|
|
#define VM_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
// Simple Stack-Based VM
|
|
// Header: "BORDEXE" (7 bytes) + Version (1 byte)
|
|
|
|
#define VM_MAGIC "BORDEXE"
|
|
#define VM_STACK_SIZE 256
|
|
#define VM_MEMORY_SIZE (64 * 1024) // 64KB
|
|
|
|
typedef enum {
|
|
OP_HALT = 0,
|
|
OP_IMM, // Push immediate (int32)
|
|
OP_LOAD, // Load from memory (addr) - int32
|
|
OP_STORE, // Store to memory (addr) - int32
|
|
OP_ADD, // +
|
|
OP_SUB, // -
|
|
OP_MUL, // *
|
|
OP_DIV, // /
|
|
OP_PRINT, // Deprecated
|
|
OP_PRITC, // Deprecated
|
|
OP_JMP, // Jump (addr)
|
|
OP_JZ, // Jump if zero
|
|
OP_EQ, // ==
|
|
OP_NEQ, // !=
|
|
OP_LT, // <
|
|
OP_GT, // >
|
|
OP_LE, // <=
|
|
OP_GE, // >=
|
|
OP_SYSCALL, // Call system function (id)
|
|
OP_LOAD8, // Load byte
|
|
OP_STORE8, // Store byte
|
|
OP_PUSH_PTR, // Push pointer to data segment (relative to start of mem)
|
|
OP_POP // Pop and discard top of stack
|
|
} OpCode;
|
|
|
|
// Syscall IDs
|
|
typedef enum {
|
|
SYS_EXIT = 0,
|
|
SYS_PRINT_INT,
|
|
SYS_PRINT_CHAR,
|
|
SYS_PRINT_STR,
|
|
SYS_NL,
|
|
SYS_CLS,
|
|
SYS_GETCHAR,
|
|
SYS_STRLEN,
|
|
SYS_STRCMP,
|
|
SYS_STRCPY,
|
|
SYS_STRCAT,
|
|
SYS_MEMSET,
|
|
SYS_MEMCPY,
|
|
SYS_MALLOC,
|
|
SYS_FREE,
|
|
SYS_RAND,
|
|
SYS_SRAND,
|
|
SYS_ABS,
|
|
SYS_MIN,
|
|
SYS_MAX,
|
|
SYS_POW,
|
|
SYS_SQRT,
|
|
SYS_SLEEP,
|
|
SYS_FOPEN,
|
|
SYS_FCLOSE,
|
|
SYS_FREAD,
|
|
SYS_FWRITE,
|
|
SYS_FSEEK,
|
|
SYS_REMOVE,
|
|
SYS_DRAW_PIXEL,
|
|
SYS_DRAW_RECT,
|
|
SYS_DRAW_LINE,
|
|
SYS_DRAW_TEXT,
|
|
SYS_GET_WIDTH,
|
|
SYS_GET_HEIGHT,
|
|
SYS_GET_TIME,
|
|
SYS_KB_HIT,
|
|
SYS_MOUSE_X,
|
|
SYS_MOUSE_Y,
|
|
SYS_MOUSE_STATE,
|
|
SYS_PLAY_SOUND,
|
|
SYS_ATOI,
|
|
SYS_ITOA,
|
|
SYS_PEEK,
|
|
SYS_POKE,
|
|
SYS_EXEC,
|
|
SYS_SYSTEM,
|
|
SYS_STRCHR,
|
|
SYS_MEMCMP,
|
|
SYS_GET_DATE,
|
|
// New Builtins
|
|
SYS_ISALNUM,
|
|
SYS_ISALPHA,
|
|
SYS_ISDIGIT,
|
|
SYS_TOLOWER,
|
|
SYS_TOUPPER,
|
|
SYS_STRNCPY,
|
|
SYS_STRNCAT,
|
|
SYS_STRNCMP,
|
|
SYS_STRSTR,
|
|
SYS_STRRCHR,
|
|
SYS_MEMMOVE
|
|
} SyscallID;
|
|
|
|
int vm_exec(const uint8_t *code, int code_size);
|
|
|
|
#endif |