From 26685f5203bc38cfa082b96182a406f4f7e6435a Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Mon, 30 Dec 2019 14:36:31 +0100 Subject: implement getchar() and putchar() in terms of supervisor call --- interrupts.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'interrupts.c') diff --git a/interrupts.c b/interrupts.c index 7932d23..f47bc1d 100644 --- a/interrupts.c +++ b/interrupts.c @@ -1,4 +1,5 @@ #include "uart.h" +#include "svc_interface.h" void setup(void); @@ -24,9 +25,26 @@ void undefined_instruction_vector(void) } } -void supervisor_call_handler(void) +uint32_t supervisor_call_handler(enum svc_type request, uint32_t arg1, + uint32_t arg2, uint32_t arg3) { - uart_puts("something svc happened\n\r"); + (void) arg2; (void) arg3; // unused for now + + switch(request) { + case UART_PUTCHAR: + uart_putc(arg1); + break; + case UART_GETCHAR: + return uart_getc(); + case UART_WRITE: + uart_puts("UART_WRITE not implemented!!!!!\n\r"); + break; + default: + // perhaps we should kill the process now? + uart_puts("unknown supervisor call type!!!!!\n\r"); + } + + return 0; // a dummy value } void abort_handler(void) -- cgit v1.2.3