Exemplo n.º 1
0
void installGDT() {
	gptr.limit = (sizeof(struct gdt_entry) * 3) - 1;
	gptr.base = (u32)&gdt;	
	
	gdtSetGate(0, 0, 0, 0, 0);	
	gdtSetGate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF);	
	gdtSetGate(2, 0, 0xFFFFFFFF, 0x92, 0xCF);
	
	gdtFlush();
}
Exemplo n.º 2
0
Arquivo: gdt.c Projeto: kfreezen/Fenyx
void GdtInit() {
	GdtDesc desc = AssembleGdtDesc(5, gdt);
	
	Real_GdtEntry null = {0,0,0,0,0,0};
	
	u8* vidmem = 0xb8000;
	vidmem[2] = 'c';
	
	gdt[0] = null;
	gdt[1] = AssembleReal_GdtEntry(AssembleGdtEntry(0x0, 0xFFFFFFFF, KERNEL, DATA, UP, READ, _4K, _32) );
	gdt[2] = AssembleReal_GdtEntry(AssembleGdtEntry(0x0, 0xFFFFFFFF, KERNEL, CODE, UP, READ_WRITE, _4K, _32) );
	gdt[3] = AssembleReal_GdtEntry(AssembleGdtEntry(0x0, 0xFFFFFFFF, USER, DATA, UP, READ_WRITE, _4K, _32) );
	gdt[4] = AssembleReal_GdtEntry(AssembleGdtEntry(0x0, 0xFFFFFFFF, USER, CODE, UP, READ, _4K, _32) );

	vidmem[4] = 'd';
	
	gdtFlush(&desc); // The triple-fault point
	
	vidmem[6] = 'e';
}