Esempio n. 1
0
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();
	}
}
Esempio n. 2
0
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);
}