From 5727356559c5efcc5bae1bfd3eec22b81e8eacfc Mon Sep 17 00:00:00 2001 From: vhaudiquet Date: Thu, 19 Oct 2023 16:18:05 +0200 Subject: [PATCH] Added SBI functions --- src/devices/sbi/sbi.c | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) 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; } } }