#include <stdint.h>
#include "gdt.h"
/* GDT with 5 entries and the GDT pointer */
struct gdt_entry_t gdt[5]; /* GDT */
struct gdt_ptr_t gdt_ptr; /* Pointer to the GDT */
void
kernel_main()
{
gdt_ptr.limit = (sizeof (struct gdt_entry_t) * 5) - 1;
gdt_ptr.base = (uint32_t) &gdt;
set_gdt_gate(&gdt[0], 0, 0, 0, 0); /* Null segment */
set_gdt_gate(&gdt[1], 0, 0xFFFFFFFF, 0x9A, 0xCF); /* Code segment */
set_gdt_gate(&gdt[2], 0, 0xFFFFFFFF, 0x92, 0xCF); /* Data segment */
set_gdt_gate(&gdt[3], 0, 0xFFFFFFFF, 0xFA, 0xCF); /* User mode code segment */
set_gdt_gate(&gdt[4], 0, 0xFFFFFFFF, 0xF2, 0xCF); /* User mode data segment */
flush_gdt((uint32_t) &gdt_ptr);
for(;;)
{
}
}