Feature added:Better regdump v1.00
This commit is contained in:
77
src/main.c
77
src/main.c
@@ -4,32 +4,70 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "tinyriscv.h"
|
#include "tinyriscv.h"
|
||||||
|
|
||||||
char lf(char c){
|
typedef enum{
|
||||||
if(c < 32) return 48;
|
RESET = 0, DEFAULT = 39,
|
||||||
if(c > 126) return 48;
|
BLACK = 30, BRIGHT_BLACK = 90,
|
||||||
return c;
|
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){
|
void regdump(const trv_cpu* cpu){
|
||||||
printf("pc = 0x%.8x\n\n", cpu->pc);
|
printf("\n ABI Reg Hex │ ABI Reg Hex\n");
|
||||||
|
printf("────────────────────┼───────────────────\n");
|
||||||
printf("\t\t\t\t\t\t reg 1Dec2Dec3Dec4Dec 1Hx2Hx3Hx4Hx C_h_a_r reg 1Dec2Dec3Dec4Dec 1Hx2Hx3Hx4Hx C_h_a_r\n");
|
|
||||||
for(unsigned int i = 0; i < 32; i++){
|
for(unsigned int i = 0; i < 32; i++){
|
||||||
printf("r%.2d = 0x%.8x\t", i, cpu->regs[i]);
|
printf(" ");
|
||||||
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("r%.2d ", i);
|
switch(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));
|
case 0: printf("zero "); break; case 1: printf("ra "); break;
|
||||||
printf(" %.2x %.2x %.2x %.2x ", *((char*)(cpu->regs + i)), *((char*)(cpu->regs + i) + 1), *((char*)(cpu->regs + i) + 2), *((char*)(cpu->regs + i) + 3));
|
case 2: printf("sp "); break; case 3: printf("gp "); break;
|
||||||
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)));
|
case 4: printf("tp "); break; case 5: printf("t0 "); break;
|
||||||
|
case 6: printf("t1 "); break; case 7: printf("t2 "); break;
|
||||||
printf("\n");
|
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){
|
void help(void){
|
||||||
@@ -91,7 +129,6 @@ int main(int argc, char** argv){
|
|||||||
while(cpu.pc < file_size + trv_MEM_OFFSET) trv_step(&cpu);
|
while(cpu.pc < file_size + trv_MEM_OFFSET) trv_step(&cpu);
|
||||||
|
|
||||||
//cleanup
|
//cleanup
|
||||||
cpu.regs[2] = 0x5c4a4b4c;
|
|
||||||
if(do_regdump) regdump(&cpu);
|
if(do_regdump) regdump(&cpu);
|
||||||
free(cpu.mem);
|
free(cpu.mem);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user