50 lines
1.5 KiB
C
50 lines
1.5 KiB
C
#ifndef __SAGITTARIUS_H_
|
|
#define __SAGITTARIUS_H_
|
|
#include "SagittariusInst.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
#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 |