#include "uart.h" #include "psr.h" void PL0_main(void) { uart_puts("hello PL0! Switching to user mode!\n\r"); asm("cps #0b10000\n\r" "isb" ::: "memory"); // 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'; uart_puts(first_kernel_byte); while (1) { char c; switch(c = uart_getc()) { case '\r': uart_putc('\n'); default: uart_putc(c); } } }