From 503ec4cdb1cb7a8d53e4895c6bc334d636730b6d Mon Sep 17 00:00:00 2001 From: Nunuhara Cabbage Date: Tue, 15 Oct 2019 21:51:47 -0700 Subject: [PATCH] Fix arithmetic assignment instructions The assigned value is pushed to the stack. --- vm.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/vm.c b/vm.c index 91a2e2b..eccb242 100644 --- a/vm.c +++ b/vm.c @@ -573,43 +573,43 @@ static void execute_instruction(int16_t opcode) // +=, -=, etc. case PLUSA: v = stack_pop().i; - stack_pop_ref()[0].i += v; + stack_push(stack_pop_ref()[0].i += v); break; case MINUSA: v = stack_pop().i; - stack_pop_ref()[0].i -= v; + stack_push(stack_pop_ref()[0].i -= v); break; case MULA: v = stack_pop().i; - stack_pop_ref()[0].i *= v; + stack_push(stack_pop_ref()[0].i *= v); break; case DIVA: v = stack_pop().i; - stack_pop_ref()[0].i /= v; + stack_push(stack_pop_ref()[0].i /= v); break; case MODA: v = stack_pop().i; - stack_pop_ref()[0].i %= v; + stack_push(stack_pop_ref()[0].i %= v); break; case ANDA: v = stack_pop().i; - stack_pop_ref()[0].i &= v; + stack_push(stack_pop_ref()[0].i &= v); break; case ORA: v = stack_pop().i; - stack_pop_ref()[0].i |= v; + stack_push(stack_pop_ref()[0].i |= v); break; case XORA: v = stack_pop().i; - stack_pop_ref()[0].i ^= v; + stack_push(stack_pop_ref()[0].i ^= v); break; case LSHIFTA: v = stack_pop().i; - stack_pop_ref()[0].i <<= v; + stack_push(stack_pop_ref()[0].i <<= v); break; case RSHIFTA: v = stack_pop().i; - stack_pop_ref()[0].i >>= v; + stack_push(stack_pop_ref()[0].i >>= v); break; case INC: stack_pop_ref()[0].i++; @@ -617,6 +617,9 @@ static void execute_instruction(int16_t opcode) case DEC: stack_pop_ref()[0].i--; break; + case ITOB: + stack_set(0, !!stack_peek(0).i); + break; // // --- Floating Point Arithmetic --- //