Added vm_execute_all which executes an entire program

Handles OP_HALT
This commit is contained in:
2023-10-21 23:31:48 +01:00
parent 1c2de9a926
commit d2cdb211b2
3 changed files with 13 additions and 7 deletions

View File

@@ -50,6 +50,10 @@ void vm_execute(vm_t *vm)
vm->registers.ret = d.as_word; // will do type punning for me
prog->ptr++;
}
else if (instruction.opcode == OP_HALT)
{
// Do nothing here. Should be caught by callers of vm_execute
}
else
{
// TODO: Error (Unknown opcode)
@@ -57,6 +61,13 @@ void vm_execute(vm_t *vm)
}
}
void vm_execute_all(vm_t *vm)
{
struct Program *program = &vm->program;
while (program->instructions[program->ptr].opcode != OP_HALT)
vm_execute(vm);
}
void vm_load_stack(vm_t *vm, byte *bytes, size_t size)
{
vm->stack.data = bytes;