Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- GDT managment
- Gets its own file because it needs to be compiled for 16-bit mode
- */
- typedef unsigned short uint16_t;
- typedef unsigned char uint8_t;
- struct FlagsLimit {
- uint8_t limit : 4;
- uint8_t flags : 4;
- };
- struct GDTEntry32
- {
- uint16_t limit;
- uint16_t base_low;
- uint8_t base_medium;
- uint8_t access_byte;
- FlagsLimit flags_limit;
- uint8_t base_high;
- };
- extern "C" void _setup_GDT( void )
- {
- volatile GDTEntry32 *GDT_Table = (volatile GDTEntry32*) 0x5000;
- // Kernel Mode Code Segment
- GDT_Table[1].limit = 0xFFFF;
- GDT_Table[1].access_byte = 0x9A;
- GDT_Table[1].flags_limit.flags = 0xC;
- GDT_Table[1].flags_limit.limit = 0xF;
- // Kernel Mode Data Segment
- GDT_Table[2].limit = 0xFFFF;
- GDT_Table[2].access_byte = 0x92;
- GDT_Table[2].flags_limit.flags = 0xC;
- GDT_Table[2].flags_limit.limit = 0xF;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement