From 2067cb5cdef27bef90b75a11398a26f043c32ee8 Mon Sep 17 00:00:00 2001 From: xamidev <121681048+xamidev@users.noreply.github.com> Date: Sat, 19 Oct 2024 19:40:56 +0200 Subject: [PATCH] mem dump coloring, + SUB --- .cpu.c.swo | Bin 0 -> 16384 bytes cpu.c | 79 ++++++++++++++++++++++++++++++++++++++++++++-------- program.asm | 11 ++------ 3 files changed, 69 insertions(+), 21 deletions(-) create mode 100644 .cpu.c.swo diff --git a/.cpu.c.swo b/.cpu.c.swo new file mode 100644 index 0000000000000000000000000000000000000000..6a1c3f380c1bb6e4052a86af5d89f92f1fd45639 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/cpu.c b/cpu.c index ef17042..3547927 100644 --- a/cpu.c +++ b/cpu.c @@ -23,17 +23,27 @@ typedef enum { - // TODO: Bitwise operations (OR, AND, XOR, NOT, ...) - NOP = 0, - MOV = 1, - ADD, - SUB, - LOAD, - STORE, - JMP, - JEQ, - CMP, - HLT = 0xFF + // 0x00 -> No operation + NOP = 0, + + // 0xA? -> Memory operations + MOV = 0xA0, + LOAD = 0xA1, + STORE = 0xA2, + + // 0xB? -> Arithmetic operations + ADD = 0xB0, + SUB = 0xB1, + + // 0xC? -> Bitwise operations + + // 0xE? -> Jump and comparisons + JMP = 0xE0, + JEQ = 0xE1, + CMP = 0xE2, + + // 0xF? -> Misc operations + HLT = 0xFF } instruction_set_t; /* @@ -100,6 +110,11 @@ void cpu_exec(uint8_t opcode) reg2 = cpu.memory[cpu.pc++]; cpu.reg[reg1] += cpu.reg[reg2]; break; + case SUB: + reg1 = cpu.memory[cpu.pc++]; + reg2 = cpu.memory[cpu.pc++]; + cpu.reg[reg1] -= cpu.reg[reg2]; + break; case HLT: cpu.halted = true; break; @@ -189,6 +204,11 @@ void assemble(const char* filename) cpu.memory[mem_index++] = CMP; cpu.memory[mem_index++] = reg1_n; cpu.memory[mem_index++] = reg2_n; + } else if (strncmp(instruction, "SUB", 3) == 0) + { + cpu.memory[mem_index++] = SUB; + cpu.memory[mem_index++] = reg1_n; + cpu.memory[mem_index++] = reg2_n; } } else if (sscanf(line, "%s %[^,], %d", instruction, reg1, &addr) == 2) { @@ -263,7 +283,42 @@ void mem_dump() { puts(""); } - printf("%02x ", cpu.memory[i]); + + switch (cpu.memory[i]) + { + // Instructions (colored background) + case 0xa0: + case 0xa1: + case 0xa2: + printf("\e[42m%02x\e[0m ", cpu.memory[i]); + break; + + case 0xb0: + case 0xb1: + printf("\e[43m%02x\e[0m ", cpu.memory[i]); + break; + + case 0xe0: + case 0xe1: + case 0xe2: + printf("\e[44m%02x\e[0m ", cpu.memory[i]); + break; + + case 0xff: + printf("\e[41m%02x\e[0m ", cpu.memory[i]); + break; + + // General purpose registers (colored foreground) + case 0x01: + case 0x02: + case 0x03: + case 0x04: + printf("\e[36m%02x\e[0m ", cpu.memory[i]); + break; + default: + printf("%02x ", cpu.memory[i]); + break; + } } puts(""); } diff --git a/program.asm b/program.asm index eded3df..85c3728 100644 --- a/program.asm +++ b/program.asm @@ -1,13 +1,6 @@ ;this is a comment -JMP 4 - -HLT -NOP -MOV R1, R2 ; hellooo? -;MOV R3, R2 ; should jump here, R1 should be untouched -CMP R1, R2 -JEQ R1, 2 ADD R1, R2 +SUB R1, R2 +SUB R1, R2 HLT -