From cad6ed96046bf82f9786b77e2fb74f02c838954d Mon Sep 17 00:00:00 2001 From: sfja Date: Mon, 31 Mar 2025 16:23:47 +0200 Subject: [PATCH] support negative offset --- vm/vm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vm/vm.c b/vm/vm.c index 24555bc..2f3eb82 100644 --- a/vm/vm.c +++ b/vm/vm.c @@ -154,8 +154,8 @@ void vm_start(Drive* boot_drive, IODevice* io_device) uint16_t addr; if (addr_is_reg) { Reg reg = is_store ? ins_dst_reg(ins) : ins_op2_reg(ins); - uint16_t offset = eat_uint16(vm); - addr = vm->regs[reg] + offset; + int16_t offset = (int16_t)eat_uint16(vm); + addr = (uint16_t)((int16_t)vm->regs[reg] + offset); } else { addr = eat_uint16(vm); } @@ -186,8 +186,8 @@ void vm_start(Drive* boot_drive, IODevice* io_device) uint16_t addr; if (addr_is_reg) { Reg reg = is_store ? ins_dst_reg(ins) : ins_op2_reg(ins); - uint16_t offset = eat_uint16(vm); - addr = vm->regs[reg] + offset; + int16_t offset = (int16_t)eat_uint16(vm); + addr = (uint16_t)((int16_t)vm->regs[reg] + offset); } else { addr = eat_uint16(vm); }