aboutsummaryrefslogtreecommitdiff
path: root/PL0_test.c
blob: 2e008a2d697c258f5f5c78c946e589a58e61ceee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "uart.h"
#include "psr.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");

  uart_puts("calling supervisor\n\r");
  
  asm volatile("svc #0");

  uart_puts("back from supervisor call\n\r");
  
  // if we're indeed in 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) 0x0);
  first_kernel_byte[1] = '\0';

  uart_puts(first_kernel_byte);
    
  while (1)
    {
      char c = uart_getc();

      uart_putc(c);
      
      if (c == '\r')
	uart_putc('\n');
    }
}