aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/syscall
diff options
context:
space:
mode:
authorMarvin Borner2019-12-09 16:06:37 +0100
committerMarvin Borner2019-12-09 16:06:37 +0100
commit33bdf18dad2539aca21727e95e04bfedecd37a76 (patch)
tree26ca76090ef534ca192a2ee25dded3cf11fe08cc /src/kernel/syscall
parent79d2ca772615474f18f32e91cf7fa8d53d02e73d (diff)
Lars, your wish may come true if you fix this!
Diffstat (limited to 'src/kernel/syscall')
-rw-r--r--src/kernel/syscall/actions/sys_read.c5
-rw-r--r--src/kernel/syscall/actions/sys_write.c10
-rw-r--r--src/kernel/syscall/syscall.c4
-rw-r--r--src/kernel/syscall/syscall.h4
4 files changed, 22 insertions, 1 deletions
diff --git a/src/kernel/syscall/actions/sys_read.c b/src/kernel/syscall/actions/sys_read.c
index 673d2d9..f04f3ef 100644
--- a/src/kernel/syscall/actions/sys_read.c
+++ b/src/kernel/syscall/actions/sys_read.c
@@ -13,4 +13,9 @@ uint32_t sys_read(char *buf)
}
memcpy(buf, keyboard_buffer, strlen(keyboard_buffer));
return strlen(buf);
+}
+
+uint32_t sys_readc()
+{
+ return getch();
} \ No newline at end of file
diff --git a/src/kernel/syscall/actions/sys_write.c b/src/kernel/syscall/actions/sys_write.c
index f159335..554ac5f 100644
--- a/src/kernel/syscall/actions/sys_write.c
+++ b/src/kernel/syscall/actions/sys_write.c
@@ -7,4 +7,14 @@ uint32_t sys_write(char *buf)
{
printf(buf);
return strlen((const char *) buf);
+}
+
+uint32_t sys_writec(char ch)
+{
+ serial_write_hex(ch);
+ serial_write("\n");
+ serial_put(ch);
+ serial_write("\n\n");
+ writec(ch);
+ return 0;
} \ No newline at end of file
diff --git a/src/kernel/syscall/syscall.c b/src/kernel/syscall/syscall.c
index eb44c87..89b70eb 100644
--- a/src/kernel/syscall/syscall.c
+++ b/src/kernel/syscall/syscall.c
@@ -7,7 +7,9 @@ typedef uint32_t (*syscall_func)(unsigned int, ...);
uint32_t (*syscalls[])() = {
[1] = sys_write,
- [2] = sys_read
+ [2] = sys_read,
+ [3] = (uint32_t (*)()) sys_writec,
+ [4] = sys_readc
};
void syscall_handler(struct regs *r)
diff --git a/src/kernel/syscall/syscall.h b/src/kernel/syscall/syscall.h
index f441cf1..046d702 100644
--- a/src/kernel/syscall/syscall.h
+++ b/src/kernel/syscall/syscall.h
@@ -7,6 +7,10 @@ void syscalls_install();
uint32_t sys_write(char *buf);
+uint32_t sys_writec(char ch);
+
uint32_t sys_read(char *buf);
+uint32_t sys_readc();
+
#endif \ No newline at end of file