diff --git a/lib/CPUs/MIPS/bsp/examples/libsys/syscalls.c b/lib/CPUs/MIPS/bsp/examples/libsys/syscalls.c index 407725c..040372b 100644 --- a/lib/CPUs/MIPS/bsp/examples/libsys/syscalls.c +++ b/lib/CPUs/MIPS/bsp/examples/libsys/syscalls.c @@ -1,3 +1,4 @@ +#include #include "libsys.h" #include "xcpt.h" @@ -39,7 +40,7 @@ char *itoa(int i) int syscalls_handler(struct xcptcontext * xcp) { int syscall_code; - char *pStr; + char *pStr, buf[33]; syscall_code = xcp->regs[2]; @@ -54,8 +55,22 @@ int syscalls_handler(struct xcptcontext * xcp) sputs(pStr); break; + case 5: // read integer + pStr = fgets(buf, sizeof(buf), stdin); + xcp->regs[2] = atoi(pStr); + break; + + case 8: // read string + pStr = (char*)xcp->regs[4]; + fgets(pStr, xcp->regs[5], stdin); + break; + + case 10: // exit + _exit(0); + break; + default: - sputs("Unknown syscall (");print_word(syscall_code);sputs(") at ");print_word(xcp->epc);sputs("\n"); + sputs("\nUnknown syscall (");print_word(syscall_code);sputs(") at ");print_word(xcp->epc);sputs("\n"); break; }