Luna/kernel/src/main.cpp

82 lines
1.7 KiB
C++
Raw Normal View History

2022-11-13 10:25:15 +00:00
#include "Framebuffer.h"
2022-11-13 11:20:53 +00:00
#include "Init.h"
#include "MemoryManager.h"
2022-11-13 13:29:15 +00:00
#include "arch/MMU.h"
2022-11-13 09:30:10 +00:00
#include "arch/Serial.h"
2022-10-16 13:31:58 +00:00
2022-11-13 13:29:15 +00:00
extern u8 fb[1];
2022-11-13 15:51:21 +00:00
void hang()
{
for (;;)
;
}
2022-09-05 14:13:51 +00:00
extern "C" void _start()
{
2022-11-13 11:20:53 +00:00
Init::check_magic();
Init::early_init();
2022-11-13 09:30:10 +00:00
2022-11-13 11:20:53 +00:00
Serial::println("Hello, world!");
2022-11-13 10:25:15 +00:00
Framebuffer::rect(0, 0, 200, 200, 0xFF00FF00);
2022-11-13 13:29:15 +00:00
Serial::println(MMU::get_physical((u64)fb).has_error() ? "fb is not mapped" : "fb is mapped!!");
const u64 address = 0xfffffffff8000000;
u64 physical = MemoryManager::alloc_physical_page().release_value();
2022-11-13 15:31:32 +00:00
auto rc = MMU::map(address, physical, MMU::ReadWrite);
bool success = !rc.has_error();
int flags;
u8* ptr;
if (success) Serial::println("Mapped page :)");
else
2022-11-13 15:31:32 +00:00
{
Serial::println("Failed to map page");
2022-11-13 15:51:21 +00:00
hang();
2022-11-13 15:31:32 +00:00
}
if (MMU::get_physical(address).release_value() == physical) Serial::println("Mapping is active ;)");
else
2022-11-13 15:31:32 +00:00
{
Serial::println("Mapping is not active");
2022-11-13 15:51:21 +00:00
hang();
2022-11-13 15:31:32 +00:00
}
2022-11-13 15:31:32 +00:00
flags = MMU::get_flags(address).release_value();
if (flags & MMU::ReadWrite) Serial::println("Mapping is writable");
if (flags & MMU::NoExecute) Serial::println("Mapping is not executable");
2022-11-13 15:31:32 +00:00
ptr = (u8*)address;
*ptr = 8;
Serial::println("Can write to pointer");
2022-11-13 15:51:21 +00:00
auto urc = MMU::unmap(address);
if (urc.has_error())
{
Serial::println("Failed to unmap page");
hang();
}
if (urc.release_value() != physical)
{
Serial::println("unmap returned a different address than the one we mapped");
hang();
}
Serial::println("Unmapped memory, writing to it should crash");
*ptr = 16;
Serial::println("ERROR: we should have crashed by this point");
2022-11-13 15:31:32 +00:00
2022-11-13 09:09:09 +00:00
for (;;)
;
2022-09-05 14:13:51 +00:00
}