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 "./base.h"
#include "./inst.h" #include "./inst.h"
#define VM_BYTE_REGISTERS 8
#define VM_WORD_REGISTERS 8
#define VM_FLOAT_REGISTERS 8
typedef struct typedef struct
{ {
struct Registers
{
byte b[VM_BYTE_REGISTERS];
word w[VM_WORD_REGISTERS];
f64 f[VM_FLOAT_REGISTERS];
} registers;
struct Stack struct Stack
{ {
byte *data; byte *data;
@@ -78,6 +87,30 @@ void vm_push_float(vm_t *vm, data_t f)
vm->stack.ptr += FLOAT_SIZE; 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) byte vm_pop_byte(vm_t *vm)
{ {
if (vm->stack.ptr == 0) if (vm->stack.ptr == 0)