2026-06-14 00:34:11 -05:00
|
|
|
#include "multiboot.h"
|
2026-06-10 18:28:33 -05:00
|
|
|
#include <lib/print.h>
|
|
|
|
|
#include <lib/stream.h>
|
2026-06-09 23:16:25 -05:00
|
|
|
|
2026-06-11 23:23:39 -05:00
|
|
|
#include <idt.h>
|
|
|
|
|
|
2026-06-14 00:34:11 -05:00
|
|
|
#include <stddef.h>
|
2026-06-11 23:23:39 -05:00
|
|
|
#include <stdint.h>
|
|
|
|
|
|
2026-06-14 00:34:11 -05:00
|
|
|
#include "memory/mm.h"
|
|
|
|
|
|
2026-06-11 23:23:39 -05:00
|
|
|
extern void init_idt();
|
2026-06-12 23:03:00 -04:00
|
|
|
extern void init_gdt();
|
2026-06-13 13:27:39 -05:00
|
|
|
extern void init_pic();
|
|
|
|
|
extern void init_pit();
|
2026-06-13 19:53:57 -04:00
|
|
|
extern int init_ps2();
|
2026-06-13 13:27:39 -05:00
|
|
|
extern void enable_interrupts();
|
2026-06-11 23:23:39 -05:00
|
|
|
|
2026-06-14 00:34:11 -05:00
|
|
|
void* page = NULL;
|
2026-06-13 20:43:09 -04:00
|
|
|
|
2026-06-15 18:09:04 -04:00
|
|
|
extern char __kernel_start;
|
|
|
|
|
extern char __kernel_end;
|
|
|
|
|
|
2026-06-14 00:34:11 -05:00
|
|
|
void kmain(uint32_t magic, multiboot_info* mbi) {
|
2026-06-10 18:28:33 -05:00
|
|
|
extern print_stream_t vga_print_stream;
|
|
|
|
|
extern print_stream_t* kout;
|
|
|
|
|
kout = &vga_print_stream;
|
|
|
|
|
kout->trunc();
|
2026-06-09 23:16:25 -05:00
|
|
|
|
2026-06-14 00:34:11 -05:00
|
|
|
kprintf("RockOS booting...\n");
|
2026-06-12 23:03:00 -04:00
|
|
|
|
|
|
|
|
init_gdt();
|
2026-06-14 00:34:11 -05:00
|
|
|
kprintf("GDT set\n");
|
2026-06-11 23:23:39 -05:00
|
|
|
|
|
|
|
|
init_idt();
|
2026-06-14 00:34:11 -05:00
|
|
|
kprintf("IDT set\n");
|
2026-06-13 13:27:39 -05:00
|
|
|
|
|
|
|
|
init_pic();
|
2026-06-14 00:34:11 -05:00
|
|
|
kprintf("PIC initialized\n");
|
2026-06-13 13:27:39 -05:00
|
|
|
|
|
|
|
|
init_pit();
|
2026-06-14 00:34:11 -05:00
|
|
|
kprintf("PIT initialized\n");
|
2026-06-13 13:27:39 -05:00
|
|
|
|
2026-06-13 19:53:57 -04:00
|
|
|
int result = init_ps2();
|
|
|
|
|
if (result == -1) {
|
2026-06-14 00:34:11 -05:00
|
|
|
kprintf("PS2 init failed\n");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
kprintf("PS2 initialized\n");
|
|
|
|
|
|
|
|
|
|
if (!(mbi->flags & (1 << 6))) {
|
2026-06-13 19:53:57 -04:00
|
|
|
return;
|
|
|
|
|
}
|
2026-06-14 00:34:11 -05:00
|
|
|
|
2026-06-15 18:09:04 -04:00
|
|
|
init_pmm((void*)mbi->mmap_addr, mbi->mmap_length);
|
2026-06-14 00:34:11 -05:00
|
|
|
uint32_t mem_size = total_free_memory();
|
|
|
|
|
kprintf("Total available memory: %d MB\n", mem_size / 1024 / 1024);
|
2026-06-15 18:09:04 -04:00
|
|
|
|
|
|
|
|
kprintf("__kernel_start: 0x%x\n", &__kernel_start);
|
|
|
|
|
kprintf("__kernel_end: 0x%x\n", &__kernel_end);
|
|
|
|
|
extern uint32_t page_directory[1024];
|
|
|
|
|
kprintf("page directory: 0x%x\n", &page_directory);
|
|
|
|
|
uint32_t size = (&__kernel_end - &__kernel_start) / 1024;
|
|
|
|
|
kprintf("kernel size: %dKB\n", size);
|
|
|
|
|
|
|
|
|
|
init_page_tables();
|
|
|
|
|
kprintf("Page tables reloaded");
|
2026-06-13 13:27:39 -05:00
|
|
|
|
|
|
|
|
while(1);
|
2026-06-09 23:16:25 -05:00
|
|
|
}
|