Update interpreter and opcodes header
authorbylex <mbilek06@gmail.com>
Wed, 2 Oct 2024 06:06:46 +0000 (08:06 +0200)
committerbylex <mbilek06@gmail.com>
Wed, 2 Oct 2024 06:06:46 +0000 (08:06 +0200)
interpreter.c
opcodes.h

index e771ffa5ad93b2d59c92dde8e7d2d918b30faf5d..a71abaca0d856c1d2c84d47603fb7f98392ae447 100644 (file)
@@ -26,7 +26,7 @@ void load_mem()
        mem[3] = 1000;
 
        mem[6] = (uint16_t)1 << 8 | 0;
-       mem[7] = (uint16_t)1 << 8 | 0;
+       mem[7] = (uint16_t)0 << 8 | 1;
        
        mem[8] = (uint16_t)9 << 8 | 0;
        mem[9] = 0;
index 9b71fb8e450e6698d58710ece3dced91a0eb06a1..49e08fbc742cf3a4a8afd5d5df4e671cc75e594a 100644 (file)
--- a/opcodes.h
+++ b/opcodes.h
@@ -9,8 +9,8 @@
  * 
  * lod, 4 byte length - instruction + dest register + source address - load 2 bytes from memory to register
  * ldl, 4 byte length - instruction + dest register + number literal - load 2 bytes from instruction to register
- * sav, 4 byte length - instruction + dest address + source register - save 2 bytes from register to memory
- * swp, 4 byte length - instruction + address + register - swap 2 bytes between register and memory
+ * sav, 4 byte length - instruction + dest register + source address - save 2 bytes from register to memory
+ * swp, 4 byte length - instruction + register + address - swap 2 bytes between register and memory
  *
  * jmp, 2 byte length - instruction + register - jump to address in memory
  * jez, 4 byte length - instruction + cond register + address - conditional jump to address in memory, if untrue acts as nop
@@ -32,6 +32,8 @@
 #include <stdint.h>
 #include <stdbool.h>
 
+#include "common.h"
+
 extern uint16_t regs[256];
 extern uint16_t mem[65536];
 
@@ -50,14 +52,14 @@ void nop(uint8_t unused_1, uint8_t unused_2, uint8_t unused_3)
 
 
 
-void inc(uint8_t dest_reg, uint8_t source_reg, uint8_t unused_1)
+void inc(uint8_t dest_reg, uint8_t unused_1, uint8_t source_reg)
 {
        regs[dest_reg] = regs[dest_reg] + regs[source_reg];
        current_instruction += 2;
        return;
 }
 
-void dec(uint8_t dest_reg, uint8_t source_reg, uint8_t unused_1)
+void dec(uint8_t dest_reg, uint8_t unused_1, uint8_t source_reg)
 {
        regs[dest_reg] = regs[dest_reg] - regs[source_reg];
        current_instruction += 2;
@@ -82,7 +84,7 @@ void ldl(uint8_t dest_reg, uint8_t num_literal_1, uint8_t num_literal_2)
        return;
 }
 
-void sav(uint8_t dest_addr_1, uint8_t dest_addr_2, uint8_t source_reg)
+void sav(uint8_t source_reg, uint8_t dest_addr_1, uint8_t dest_addr_2)
 {
        uint16_t dest_addr = (uint16_t)dest_addr_1 << 8 | dest_addr_2;
        mem[dest_addr] = regs[source_reg];
@@ -90,7 +92,7 @@ void sav(uint8_t dest_addr_1, uint8_t dest_addr_2, uint8_t source_reg)
        return;
 }
 
-void swp(uint8_t addr_1, uint8_t addr_2, uint8_t reg)
+void swp(uint8_t reg, uint8_t addr_1, uint8_t addr_2)
 {
        uint16_t addr = (uint16_t)addr_1 << 8 | addr_2;
        uint16_t temp_storage = regs[reg];
@@ -162,4 +164,4 @@ void pfs(uint8_t dest_reg, uint8_t unused_1, uint8_t unused_2)
        return;
 }
 
-void (*opcodes[16]) (uint8_t, uint8_t, uint8_t) = {nop, inc, dec, lod, ldl, sav, swp, jmp, jez, hlt, pts, pfs};
+void (*opcodes[N_INSTRUCTIONS]) (uint8_t, uint8_t, uint8_t) = {nop, inc, dec, lod, ldl, sav, swp, jmp, jez, hlt, pts, pfs};