From 7338e10fce72338790ae505994cea4cec95f6ed2 Mon Sep 17 00:00:00 2001 From: hovara Date: Sun, 15 Oct 2023 16:43:48 +0300 Subject: [PATCH] Feature added:Better regdump v1.00 --- src/main.c | 77 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 57 insertions(+), 20 deletions(-) diff --git a/src/main.c b/src/main.c index 3c3b04d..f680a2c 100644 --- a/src/main.c +++ b/src/main.c @@ -4,32 +4,70 @@ #include #include "tinyriscv.h" -char lf(char c){ - if(c < 32) return 48; - if(c > 126) return 48; - return c; +typedef enum{ + RESET = 0, DEFAULT = 39, + BLACK = 30, BRIGHT_BLACK = 90, + RED = 31, BRIGHT_RED = 91, + GREEN = 32, BRIGHT_GREEN = 92, + YELLOW = 33, BRIGHT_YELLOW = 93, + BLUE = 34, BRIGHT_BLUE = 94, + MAGENTA = 35, BRIGHT_MAGENTA = 95, + CYAN = 36, BRIGHT_CYAN = 96, + WHITE = 37, BRIGHT_WHITE = 97 +}Color; + +static inline void set_color(const Color color){ + printf("\033[%dm", color); } void regdump(const trv_cpu* cpu){ - printf("pc = 0x%.8x\n\n", cpu->pc); - - printf("\t\t\t\t\t\t reg 1Dec2Dec3Dec4Dec 1Hx2Hx3Hx4Hx C_h_a_r reg 1Dec2Dec3Dec4Dec 1Hx2Hx3Hx4Hx C_h_a_r\n"); + printf("\n ABI Reg Hex │ ABI Reg Hex\n"); + printf("────────────────────┼───────────────────\n"); for(unsigned int i = 0; i < 32; i++){ - printf("r%.2d = 0x%.8x\t", i, cpu->regs[i]); - if(i % 2){ - printf(" r%.2d ", i-1); - printf(" %.3hhu %.3hhu %.3hhu %.3hhu ", *((char*)(cpu->regs + i-1)), *(((char*)(cpu->regs + i-1)) + 1), *((char*)(cpu->regs + i-1) + 2), *((char*)(cpu->regs + i-1) + 3)); - printf(" %.2x %.2x %.2x %.2x ", *((char*)(cpu->regs + i-1)) & 0xff, *((char*)(cpu->regs + i-1) + 1) & 0xff, *((char*)(cpu->regs + i-1) + 2) & 0xff, *((char*)(cpu->regs + i-1) + 3) & 0xff); - printf("%c %c %c %c ", lf(*((char*)(cpu->regs + i-1))), lf(*((char*)(cpu->regs + i-1) + 1)), lf(*((char*)(cpu->regs + i-1) + 2)), lf(*((char*)(cpu->regs + i-1) + 3))); + printf(" "); - printf("r%.2d ", i); - printf(" %.3hhu %.3hhu %.3hhu %.3hhu ", *((char*)(cpu->regs + i)), *((char*)(cpu->regs + i) + 1), *((char*)(cpu->regs + i) + 2), *((char*)(cpu->regs + i) + 3)); - printf(" %.2x %.2x %.2x %.2x ", *((char*)(cpu->regs + i)), *((char*)(cpu->regs + i) + 1), *((char*)(cpu->regs + i) + 2), *((char*)(cpu->regs + i) + 3)); - printf("%c %c %c %c ", lf(*((char*)(cpu->regs + i))), lf(*((char*)(cpu->regs + i) + 1)), lf(*((char*)(cpu->regs + i) + 2)), lf(*((char*)(cpu->regs + i) + 3))); - - printf("\n"); + switch(i){ + case 0: printf("zero "); break; case 1: printf("ra "); break; + case 2: printf("sp "); break; case 3: printf("gp "); break; + case 4: printf("tp "); break; case 5: printf("t0 "); break; + case 6: printf("t1 "); break; case 7: printf("t2 "); break; + case 8: printf("s0/fp"); break; case 9: printf("s1 "); break; + case 10: printf("a0 "); break; case 11: printf("a1 "); break; + case 12: printf("a2 "); break; case 13: printf("a3 "); break; + case 14: printf("a4 "); break; case 15: printf("a5 "); break; + case 16: printf("a6 "); break; case 17: printf("a7 "); break; + case 18: printf("s2 "); break; case 19: printf("s3 "); break; + case 20: printf("s4 "); break; case 21: printf("s5 "); break; + case 22: printf("s6 "); break; case 23: printf("s7 "); break; + case 24: printf("s8 "); break; case 25: printf("s9 "); break; + case 26: printf("s10 "); break; case 27: printf("s11 "); break; + case 28: printf("t3 "); break; case 29: printf("t4 "); break; + case 30: printf("t5 "); break; case 31: printf("t5 "); break; } + + printf(" "); + + set_color(BRIGHT_YELLOW); + i < 10 ? printf("x%d ", i) : printf("x%d", i); + set_color(RESET); + + printf(" "); + + if(cpu->regs[i]) set_color(BRIGHT_GREEN); + printf("%-8x", cpu->regs[i]); + set_color(RESET); + + i % 2 ? printf(" \n") : printf(" │"); } + + //pc/x32 = additional entry in reg_dump table + set_color(BRIGHT_YELLOW); + printf(" pc x32 "); + if(cpu->pc) set_color(BRIGHT_GREEN); + printf("%-8x", cpu->pc); + set_color(RESET); + + printf(" │\n\n"); } void help(void){ @@ -91,7 +129,6 @@ int main(int argc, char** argv){ while(cpu.pc < file_size + trv_MEM_OFFSET) trv_step(&cpu); //cleanup - cpu.regs[2] = 0x5c4a4b4c; if(do_regdump) regdump(&cpu); free(cpu.mem); } \ No newline at end of file