Advertisement
asteroidsteam

GDT

Mar 8th, 2022
686
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.89 KB | None | 0 0
  1. /*
  2. GDT managment
  3. Gets its own file because it needs to be compiled for 16-bit mode
  4. */
  5.  
  6. typedef unsigned short uint16_t;
  7. typedef unsigned char uint8_t;
  8.  
  9. struct FlagsLimit {
  10.     uint8_t limit : 4;
  11.     uint8_t flags : 4;
  12. };
  13.  
  14. struct GDTEntry32
  15. {
  16.     uint16_t limit;
  17.     uint16_t base_low;
  18.     uint8_t base_medium;
  19.     uint8_t access_byte;
  20.     FlagsLimit flags_limit;
  21.     uint8_t base_high;
  22. };
  23.  
  24. extern "C" void _setup_GDT( void )
  25. {
  26.     volatile GDTEntry32 *GDT_Table = (volatile GDTEntry32*) 0x5000;
  27.  
  28.     // Kernel Mode Code Segment
  29.     GDT_Table[1].limit = 0xFFFF;
  30.     GDT_Table[1].access_byte = 0x9A;
  31.     GDT_Table[1].flags_limit.flags = 0xC;
  32.     GDT_Table[1].flags_limit.limit = 0xF;
  33.  
  34.     // Kernel Mode Data Segment
  35.     GDT_Table[2].limit = 0xFFFF;
  36.     GDT_Table[2].access_byte = 0x92;
  37.     GDT_Table[2].flags_limit.flags = 0xC;
  38.     GDT_Table[2].flags_limit.limit = 0xF;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement