Files
RockOS/kernel/kmain.c

73 lines
1.6 KiB
C
Raw Normal View History

2026-06-14 00:34:11 -05:00
#include "multiboot.h"
#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();
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) {
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-15 23:35:01 -05:00
kprintf("kernel start: 0x%x\n", &__kernel_start);
kprintf("kernel end: 0x%x\n", &__kernel_end);
uint32_t size = (&__kernel_end - &__kernel_start) / 1024;
kprintf("kernel size: %dKB\n", size);
if (!(mbi->flags & (1 << 6))) {
return;
}
2026-06-12 23:03:00 -04:00
2026-06-15 23:35:01 -05:00
kprintf("multiboot virtual address: 0x%x\n", mbi);
uint32_t mmap_virtual_addr = mbi->mmap_addr + 0xC0000000;
kprintf("mmap virtual address: 0x%x\n", mmap_virtual_addr);
init_pmm((void*)mmap_virtual_addr, mbi->mmap_length);
uint32_t mem_size = total_free_memory();
kprintf("Total available memory: %d MB\n", mem_size / 1024 / 1024);
kprintf("RockOS booting...\n");
2026-06-12 23:03:00 -04:00
init_gdt();
2026-06-15 23:35:01 -05:00
extern uint64_t gdt[5];
kprintf("GDT set @ 0x%x\n", &gdt);
2026-06-11 23:23:39 -05:00
init_idt();
2026-06-15 23:35:01 -05:00
extern idt_entry idt[256];
kprintf("IDT set @ 0x%x\n", &idt);
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-15 23:35:01 -05:00
// int result = init_ps2();
// if (result == -1) {
// kprintf("PS2 init failed\n");
// return;
// }
// kprintf("PS2 initialized\n");
2026-06-15 18:09:04 -04:00
init_page_tables();
2026-06-15 23:35:01 -05:00
kprintf("Page tables initialized\n");
2026-06-13 13:27:39 -05:00
while(1);
2026-06-09 23:16:25 -05:00
}