*
* 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
#include <stdint.h>
#include <stdbool.h>
+#include "common.h"
+
extern uint16_t regs[256];
extern uint16_t mem[65536];
-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;
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];
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];
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};