Implement Gdt constructor

This commit is contained in:
manzerbredes 2015-07-21 12:19:25 +04:00
parent d7e31e9b99
commit c6bdd600d7
2 changed files with 32 additions and 20 deletions

View file

@ -3,17 +3,29 @@
Gdt::Gdt(){ Gdt::Gdt(){
//Init desc 1 (0 conventional)
//Init desc 2 (code segment) //Init conventional segment
//Init desc 3 (data segment) this->initGdtDesc(0x0,0x0,0x0,0x0, &m_Descriptors[0]);
//Init desc 4 (stack segment)
//Init code segment
this->initGdtDesc(0x0,0xFFFFF,0x9A,0x0D, &m_Descriptors[1]);
//Init data segment
this->initGdtDesc(0x0,0xFFFFF,0x92,0x0D, &m_Descriptors[2]);
//Init stack segment
this->initGdtDesc(0x00B00000,0x00000500,0x96,0x0D, &m_Descriptors[3]);
//Init GDT Pointer
this->m_Pointer.size=4*sizeof(this->m_Descriptors);
this->m_Pointer.segment=0x00007E00;
} }
Gdt::~Gdt(){ Gdt::~Gdt(){
} }
void Gdt::initGdtDesc(u32 base, u32 limit, u8 access, u8 flags, gdtDescriptorStruct *Descriptor){ void Gdt::initGdtDesc(u32 base, u32 limit, u8 access, u8 flags, gdtDescriptorStruct *Descriptor){
@ -23,11 +35,11 @@ void Gdt::initGdtDesc(u32 base, u32 limit, u8 access, u8 flags, gdtDescriptorStr
Descriptor->access = access; Descriptor->access = access;
Descriptor->limit2 = (limit & 0xF0000 ) >> 16; Descriptor->limit2 = (limit & 0xF0000 ) >> 16;
Descriptor->flags = flags & 0xFF; Descriptor->flags = flags & 0xFF;
Descriptor->base3 = (base & 0xFF000000) >> 24; Descriptor->base3 = (base & 0xFF000000) >> 24;
} }
void Gdt::loadGdt(){ void Gdt::loadGdt(){
//Copy Gdt into memory //Copy Gdt into memory and init registers
} }

View file

@ -14,7 +14,7 @@ struct gdtDescriptorStruct{
u16 limit1; u16 limit1;
u16 base1; u16 base1;
u8 base2; u8 base2;
u8 access : 4; u8 access;
u8 limit2 : 4; u8 limit2 : 4;
u8 flags : 4; u8 flags : 4;
u8 base3; u8 base3;
@ -25,30 +25,30 @@ typedef struct gdtPointerStruct gdtPointerStruct;
typedef struct gdtDescriptorStruct gdtDescriptorStruct; typedef struct gdtDescriptorStruct gdtDescriptorStruct;
//Gdt class //Gdt class
class Gdt{ class Gdt{
private: private:
//Data members //Data members
gdtDescriptorStruct m_Descriptor[4]; gdtDescriptorStruct m_Descriptors[4];
gdtPointerStruct m_Pointer; gdtPointerStruct m_Pointer;
//Methods //Methods
void initGdtDesc(u32 base, u32 limit, u8 access, u8 flags, gdtDescriptorStruct *Descriptor); void initGdtDesc(u32 base, u32 limit, u8 access, u8 flags, gdtDescriptorStruct *Descriptor);
public: public:
//Constructor //Constructor
Gdt(); Gdt();
//Destructor //Destructor
~Gdt(); ~Gdt();
//Methods //Methods
void loadGdt(); void loadGdt();
}; };