diff --git a/Headers/Sagittarius.h b/Headers/Sagittarius.h index ec2859d..4954e71 100644 --- a/Headers/Sagittarius.h +++ b/Headers/Sagittarius.h @@ -4,40 +4,47 @@ #include #include #include -#ifdef _WIN32 -#define SAGITTARIUS_API __declspec(dllexport) -#else -#define SAGITTARIUS_API __attribute__((visibility("default"))) -#endif -typedef struct SagittariusRegister{ - //256 Usable + Overflow preventing 256 extra bytes. +#include "SagittariusBase.h" +typedef struct SagittariusRegister +{ + // 256 Usable + Overflow preventing 256 extra bytes. uint8_t head[512]; -}SagittariusRegister; -typedef struct SagittariusMemory{ - uint8_t* data; +} SagittariusRegister; +typedef struct SagittariusMemory +{ + uint8_t *data; uint64_t size; } SagittariusMemory; -typedef struct SagittariusCore{ +typedef struct SagittariusCore +{ SagittariusRegister reg; - SagittariusMemory* memory; + SagittariusMemory *memory; uint64_t pc; -}SagittariusCore; -typedef int32_t(* SagittariusSyscall)(SagittariusCore* core, uint64_t arg_start); -typedef struct SagittariusSyscallEntry{ +} 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; +} SagittariusSyscallEntry; +typedef struct SagittariusVM +{ + SagittariusSyscallEntry *SagittariusSyscallEntries; uint64_t SagittariusSyscallCount; uint64_t SagittariusSyscallCapacity; SagittariusMemory Memory; -}SagittariusVM; - -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); - +} 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 \ No newline at end of file diff --git a/Headers/SagittariusBase.h b/Headers/SagittariusBase.h new file mode 100644 index 0000000..cbeb1ed --- /dev/null +++ b/Headers/SagittariusBase.h @@ -0,0 +1,12 @@ +#ifndef _SAGITTARIUS_BASE_H_ +#define _SAGITTARIUS_BASE_H_ + +#ifdef _WIN32 +#define SAGITTARIUS_API __declspec(dllexport) +#define internal +#else +#define SAGITTARIUS_API __attribute__((visibility("default"))) +#define internal __attribute__((visibility("hidden"))) +#endif + +#endif \ No newline at end of file diff --git a/Headers/SagittariusInst.h b/Headers/SagittariusInst.h index b08e804..63e2737 100644 --- a/Headers/SagittariusInst.h +++ b/Headers/SagittariusInst.h @@ -145,7 +145,8 @@ typedef enum math2op sag_math2_pow, } math2op; -typedef enum math1op{ +typedef enum math1op +{ sag_math1_sin, sag_math1_cos, sag_math1_tan, @@ -156,7 +157,20 @@ typedef enum math1op{ sag_math1_acos, sag_math1_atan, sag_math1_abs, -}math1op; +} math1op; +typedef enum sagittarius_type +{ + st_uint8, + st_uint16, + st_uint32, + st_uint64, + st_int8, + st_int16, + st_int32, + st_int64, + st_single, + st_double +} sagittarius_type; typedef struct SagittariusInst { uint64_t data; diff --git a/Headers/SagittariusInternal.h b/Headers/SagittariusInternal.h new file mode 100644 index 0000000..8a533b8 --- /dev/null +++ b/Headers/SagittariusInternal.h @@ -0,0 +1,9 @@ +#include "Sagittarius.h" +#include +internal bool SagMath2Add(SagittariusCore *core, sagittarius_type t, uint8_t L, uint8_t R, uint8_t T); +internal bool SagMath2Sub(SagittariusCore *core, sagittarius_type t, uint8_t L, uint8_t R, uint8_t T); +internal bool SagMath2Mul(SagittariusCore *core, sagittarius_type t, uint8_t L, uint8_t R, uint8_t T); +internal bool SagMath2Div(SagittariusCore *core, sagittarius_type t, uint8_t L, uint8_t R, uint8_t T); +internal bool SagMath2Mod(SagittariusCore *core, sagittarius_type t, uint8_t L, uint8_t R, uint8_t T); +internal bool Math2Op(SagittariusCore *core, SagittariusInst inst); +internal bool Math1Op(SagittariusCore *core, SagittariusInst inst); \ No newline at end of file diff --git a/Headers/SagittariusPanic.h b/Headers/SagittariusPanic.h new file mode 100644 index 0000000..2450853 --- /dev/null +++ b/Headers/SagittariusPanic.h @@ -0,0 +1,20 @@ +#ifndef _SAGITTARIUS_PANIC_H_ +#define _SAGITTARIUS_PANIC_H_ +#include +typedef enum SagMsgLevel +{ + info, + warn, + error, + fatal +} SagMsgLevel; +typedef struct NoticiableMsg +{ + SagMsgLevel level; + uint64_t NoticiableId; + char* msg; +} NoticiableMsg; +#define Sagittarius_Msg_Generic 0x0000_0000_0000_0000 +#define Sagittarius_Msg_Unknown 0xFFFFFFFFFFFFFFFF +#define Sagittarius_Msg_OOB 0x1000_0000_0000_0000 +#endif \ No newline at end of file