void kmain(unsigned int magic, BOOTINFO *info) { kcls(); if(magic != 0x2BADB002){ kprintf("Invalid Boot Loader Magic (0x%x)\n", magic); } kprintf("Hello My OS\n"); display_bootinfo(info); set_gdtr(); kprintf("Initialized GDT\n"); set_idtr(); kprintf("Initialized IDT\n"); initialize_PIC(); kprintf("Initialized PIC\n"); io_out8(PIC_MASTER_IMR, 0xF8); initialize_pysical_memory(); kprintf("Main Loop\n"); for(;;){ io_hlt(); } }
static void segmem_init() { gdt_reg_t gdtr; seg_desc_t *gdt; sys64_seg_desc_t *tss; gdt = info->vmm.cpu.sg->gdt; gdt[0].raw = null_desc; gdt[vmm_code_seg_idx].raw = code64_desc; gdt[vmm_data_seg_idx].raw = data32_desc; tss = (sys64_seg_desc_t*)&gdt[vmm_tss_seg_idx]; tss64_desc(tss, (offset_t)&info->vmm.cpu.sg->tss); gdtr.desc = gdt; gdtr.limit = sizeof(info->vmm.cpu.sg->gdt) - 1; set_gdtr(gdtr); set_tr(vmm_tss_sel); segmem_reload(vmm_code_sel, vmm_data_sel); }