Added registers to virtual machine
Registers for bytes, words and floats with routines to set them.
This commit is contained in:
33
src/main.c
33
src/main.c
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user