asteroidsteam icon

GDT

asteroidsteam | PRO | 03/08/22 05:21:30 PM UTC | 0 ⭐ | 908 👁️ | Never ⏰ | []
C++ |

890 B

|

None

|

0 👍

/

0 👎

/*
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;
}

Comments