diff --git a/src/devices/sbi/sbi.c b/src/devices/sbi/sbi.c index 9382022..5c87ef1 100644 --- a/src/devices/sbi/sbi.c +++ b/src/devices/sbi/sbi.c @@ -6,22 +6,41 @@ void sbi_call(rv32_cpu_t* cpu, uint32_t extension_id, uint32_t func_id) { switch(extension_id) { + case SBI_EXTENSION_BASE: + { + switch(func_id) + { + case SBI_FUNCTION_GET_MVENDOR_ID: + cpu->regs.a0 = 0; + break; + case SBI_FUNCTION_GET_MARCH_ID: + cpu->regs.a0 = 0; + break; + case SBI_FUNCTION_GET_MIMPL_ID: + cpu->regs.a0 = 0; + break; + default: + fprintf(stderr, "sbi_call: unknown function id 0x%x for base extension\n", func_id); + break; + } + break; + } case SBI_EXTENSION_LEGACY_CONSOLE_PUTCHAR: { - printf("%c", cpu->regs.a0); - cpu->regs.a0 = 0; - break; + printf("%c", cpu->regs.a0); + cpu->regs.a0 = 0; + break; } - case SBI_EXTENSION_LEGACY_SHUTDOWN: - { + case SBI_EXTENSION_LEGACY_SHUTDOWN: + { printf("sbi_call: shutdown, goodbye !\n"); - cpu->sim_ticks_left = 1; - break; - } + cpu->sim_ticks_left = 1; + break; + } default: { fprintf(stderr, "sbi_call: unknown extension id 0x%x\n", extension_id); - break; + break; } } }