summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Maiolino <[email protected]>2025-10-07 08:16:03 +0200
committerCarlos Maiolino <[email protected]>2025-10-07 08:19:25 +0200
commitdae0a3cbf6dba6fc537f943362021f4d8ffcd859 (patch)
tree69b6d570edb201039f1071174bca88bdfe1ce13d
parent89dd9fbedf488866c240990b970a4285b5a44324 (diff)
mm: enable paging and add some test code
Enable paging in the CPU and add some testing code to check virtual addresses are being redirected. Signed-off-by: Carlos Maiolino <[email protected]>
-rw-r--r--src/kernel.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/kernel.c b/src/kernel.c
index 1605191..01de04f 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -6,6 +6,9 @@
#include <toxic/idt.h>
#include <toxic/io.h>
#include <mm/kernel_heap.h>
+#include <mm/paging.h>
+
+static struct page_directory *kernel_directory;
void start_kernel()
{
@@ -16,19 +19,33 @@ void start_kernel()
kernel_heap_init();
interrupts_init();
+ kernel_directory = paging_new_directory(PAGING_IS_WRITABLE |
+ PAGING_IS_PRESENT |
+ PAGING_USER_ACCESS);
+
+ paging_switch(kernel_directory);
+
+ char *ptr = kzalloc(4096);
+ char *ptr2;
+
+ paging_map_vaddr(kernel_directory, (void *)0x1000,
+ ptr,
+ (PAGING_USER_ACCESS |
+ PAGING_IS_PRESENT | PAGING_IS_WRITABLE));
+
+ enable_paging();
enable_interrupts();
+ ptr2 = (char *) 0x1000;
+ ptr[0] = 'A';
+ vprintl(ptr);
+ vprintl(ptr2);
- void *ptr = kmalloc(50);
- void *ptr2 = kmalloc(5000);
- void *ptr3 = kmalloc(5600);
+ ptr2[1] = 'B';
+ vprintl("new ptr\n");
+ vprintl(ptr);
+ vprintl(ptr2);
- *((int *)ptr) = 11;
kfree(ptr);
- void *ptr4 = kmalloc(50);
- *((int *)ptr2) = 22;
- *((int *)ptr3) = 33;
- *((int *)ptr4) = 44;
- if (ptr || ptr2 || ptr3 || ptr4) {}
}