aboutsummaryrefslogtreecommitdiff
path: root/PL0_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'PL0_test.c')
-rw-r--r--PL0_test.c41
1 files changed, 24 insertions, 17 deletions
diff --git a/PL0_test.c b/PL0_test.c
index 32addf8..c6cbe18 100644
--- a/PL0_test.c
+++ b/PL0_test.c
@@ -1,27 +1,34 @@
-#include "uart.h"
-#include "psr.h"
+#include "PL0_utils.h"
+// entry point - must remain the only function in the file!
void PL0_main(void)
{
- // if all went correct, Success! gets printed
- uart_puts("Success!\n\r");
-
- // if we're indeed i PL0, we should crash now, when trying to access
- // memory we're not allowed to
- char first_kernel_byte[2];
-
- first_kernel_byte[0] = *(char*) ((uint32_t) 0x8000);
- first_kernel_byte[1] = '\0';
+ // If loading program to userspace and handling of svc are
+ // implemented correctly, this shall get printed
+ puts("Hello userspace! Type 'f' if you want me to try accessing "
+ "kernel memory!");
- uart_puts(first_kernel_byte);
-
while (1)
{
- char c = uart_getc();
-
- uart_putc(c);
+ char c = getchar();
if (c == '\r')
- uart_putc('\n');
+ putchar('\n');
+
+ putchar(c);
+
+ if (c == 'f')
+ {
+ // if we're indeed in PL0, we should trigger the abort
+ // handler now, when trying to access memory we're not
+ // allowed to
+ puts("Attempting to read kernel memory from userspace :d");
+ char first_kernel_byte[2];
+
+ first_kernel_byte[0] = *(char*) 0x0;
+ first_kernel_byte[1] = '\0';
+
+ puts(first_kernel_byte);
+ }
}
}