Added registers to virtual machine

Registers for bytes, words and floats with routines to set them.
This commit is contained in:
2023-10-15 21:00:01 +01:00
parent 7a820290f9
commit 33aa62634a

View File

@@ -16,8 +16,17 @@
#include "./base.h"
#include "./inst.h"
#define VM_BYTE_REGISTERS 8
#define VM_WORD_REGISTERS 8
#define VM_FLOAT_REGISTERS 8
typedef struct
{
struct Registers
{
byte b[VM_BYTE_REGISTERS];
word w[VM_WORD_REGISTERS];
f64 f[VM_FLOAT_REGISTERS];
} registers;
struct Stack
{
byte *data;
@@ -78,6 +87,30 @@ void vm_push_float(vm_t *vm, data_t f)
vm->stack.ptr += FLOAT_SIZE;
}
void vm_mov_byte(vm_t *vm, data_t b, word reg)
{
if (reg >= VM_BYTE_REGISTERS)
// TODO: Error (reg is not a valid byte register)
return;
vm->registers.b[reg] = b.as_byte;
}
void vm_mov_word(vm_t *vm, data_t w, word reg)
{
if (reg >= VM_WORD_REGISTERS)
// TODO: Error (reg is not a valid byte register)
return;
vm->registers.w[reg] = w.as_word;
}
void vm_mov_float(vm_t *vm, data_t f, word reg)
{
if (reg >= VM_FLOAT_REGISTERS)
// TODO: Error (reg is not a valid byte register)
return;
vm->registers.f[reg] = f.as_float;
}
byte vm_pop_byte(vm_t *vm)
{
if (vm->stack.ptr == 0)