#ifndef __SAGITTARIUS_H_ #define __SAGITTARIUS_H_ #include "SagittariusInst.h" #include #include #include #include "SagittariusBase.h" typedef struct SagittariusRegister { // 256 Usable + Overflow preventing 256 extra bytes. uint8_t head[512]; } SagittariusRegister; typedef struct SagittariusMemory { uint8_t *data; uint64_t size; } SagittariusMemory; typedef struct SagittariusCore { SagittariusRegister reg; SagittariusMemory *memory; uint64_t pc; } SagittariusCore; typedef int32_t (*SagittariusSyscall)(SagittariusCore *core, uint64_t arg_start); typedef struct SagittariusSyscallEntry { uint64_t id; SagittariusSyscall syscall; } SagittariusSyscallEntry; typedef struct SagittariusVM { SagittariusSyscallEntry *SagittariusSyscallEntries; uint64_t SagittariusSyscallCount; uint64_t SagittariusSyscallCapacity; SagittariusMemory Memory; } SagittariusVM; typedef struct SagittariusProgram { SagittariusInst *instructions; uint64_t instCount; uint8_t *data; uint64_t data_size; } SagittariusProgram; SAGITTARIUS_API SagittariusVM *sagittarius_vm_new(uint64_t memory_size); SAGITTARIUS_API void sagittarius_vm_free(SagittariusVM *vm); SAGITTARIUS_API void sagittarius_step(SagittariusVM *vm); SAGITTARIUS_API void sagittarius_mem_resize(SagittariusVM *vm, uint64_t new_size); SAGITTARIUS_API uint64_t sagittarius_mem_getsize(SagittariusVM *vm); SAGITTARIUS_API void sagittarius_load_program_to_mem(SagittariusVM *vm, SagittariusProgram *program, uint64_t offset); #endif