From: bylex Date: Wed, 2 Oct 2024 06:06:46 +0000 (+0200) Subject: Update interpreter and opcodes header X-Git-Url: https://git.bylex.cz/?a=commitdiff_plain;h=01b2730de3140bcc3af7b767b8122e58f9dd3415;p=maturita.git Update interpreter and opcodes header --- diff --git a/interpreter.c b/interpreter.c index e771ffa..a71abac 100644 --- a/interpreter.c +++ b/interpreter.c @@ -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; diff --git a/opcodes.h b/opcodes.h index 9b71fb8..49e08fb 100644 --- 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 #include +#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};