マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

GDT設定用クラス

GDT設定用クラスを作ってみた。ヘッダファイルはこんな感じ

#ifndef _GDT_MANAGER_
#define _GDT_MANAGER_

#include "DataType.h"

typedef struct{
    uint16_t limit_low;
    uint16_t base_low;
    uint8_t base_mid;
    uint8_t access_right;
    uint8_t limit_high;
    uint8_t base_high;
} SegmentDescriptor;

///GDTを管理するクラス
class GDTManager{
public:
    /** \brief コンストラクタ
      * \param addr セグメントディスクリプタの先頭アドレス
      * \param count セグメントディスクリプタの数
      *
      * コンストラクタ
      */
    GDTManager(uint32_t addr, uint32_t count);

    ///GDTRを読み込む
    void loadGDTR();

    /** \brief GDTを設定する
      * \param index セグメントディスクリプタの位置 
      * \param addr メモリの先頭アドレス
      * \param limit メモリの制限
      * \param ar アクセスs権限
      *
      * GDTを設定する
      */
    void setGDT(uint32_t index, uint32_t addr, uint32_t limit, uint32_t ar);

private:
    ///セグメントディスクリプタの先頭
    SegmentDescriptor* base;
    ///セグメントディスクリプタの境界
    uint32_t limit;
};
#endif