69 lines
1.3 KiB
C
69 lines
1.3 KiB
C
#include "multiboot.h"
|
|
#include "interrupts.h"
|
|
#include "gdt.h"
|
|
#include "scheduler.h"
|
|
#include "common.h"
|
|
|
|
#include <lib/print.h>
|
|
#include <lib/stream.h>
|
|
#include <lib/memory.h>
|
|
|
|
#include <memory/mm.h>
|
|
|
|
#include <drivers/iso/iso.h>
|
|
#include <drivers/ide/ide.h>
|
|
#include <drivers/pic/pic.h>
|
|
#include <drivers/ps2/ps2.h>
|
|
#include <drivers/pit/pit.h>
|
|
#include <drivers/vga/vga.h>
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
extern char __kernel_start;
|
|
extern char __kernel_end;
|
|
|
|
void first_task() {
|
|
kprintf("task started\n");
|
|
int i = 5;
|
|
while (i--) {
|
|
sleep(1000);
|
|
kprintf("task awake [%d]\n", i);
|
|
}
|
|
kprintf("exiting\n");
|
|
exit();
|
|
}
|
|
|
|
void kmain(uint32_t magic, multiboot_info* mbi) {
|
|
disable_interrupts();
|
|
if (!(mbi->flags & (1 << 6))) {
|
|
return;
|
|
}
|
|
|
|
vga_init();
|
|
|
|
uint32_t mmap_virtual_addr = mbi->mmap_addr + 0xC0000000;
|
|
init_pmm((void*)mmap_virtual_addr, mbi->mmap_length);
|
|
kprintf("memory detection complete. total free memory: %dMB\n", total_free_memory() / 1024 / 1024);
|
|
|
|
init_gdt();
|
|
init_idt();
|
|
init_pic();
|
|
init_pit();
|
|
|
|
init_page_tables();
|
|
|
|
kprintf("basic initializations complete\n");
|
|
|
|
disable_interrupts(); // just paranoid... do it again
|
|
init_scheduler();
|
|
enable_interrupts();
|
|
|
|
create_task((uint32_t)first_task, fetch_cr3());
|
|
|
|
while(1) {
|
|
sleep(5000);
|
|
kprintf("kernel awake\n");
|
|
}
|
|
}
|