備忘録やめた

備忘録として使用していたけどやめた.このブログに載せてあるコードのライセンスは別途記載がない限りWTFPL OR NYSLです.

RamenOSのカーネル,IDT,GDTの移動

要約

RamenOSのカーネルIDT,GDTの場所を変更します.変更のためにはアセンブリファイルや*.rsファイル*1の各所で定義されている定数の値と,GDTのエントリを変更する必要があります.

はじめに

はりぼてOSを基にしているRamenOSにページングを実装するために,カーネルIDT,GDTの場所を変更します.

はりぼてOSでは,カーネル0x00280000IDT0x0026f800,GDTが0x00270000に配置されています.ページディレクトリ並びにページテーブルを0x00100000から配置する予定で*2,これらが4MB + 4KBを使用する予定なので,カーネル0x00501000IDT0x00581000,GDTを0x00581800に配置します*3

コードの変更箇所

GDTのエントリと,定数を変更する必要があります.

それぞれのファイル名ははりぼてOSのものであり,RamenOSのものではありません.

asmhead.nas

BOTPAKとGDTのエントリを変更します.

BOTPAK EQU 0x00501000
GDT0:
    TIMES 8 DB 0
    DW 0xffff,0x0000,0x9200,0x00cf ; 変更なし
    DW 0xffff,0x1000,0x9a50,0x0047 ; 変更する

GDTのエントリについては以下で確認してください.

tokuchan3515.hatenablog.com

bootpack.h

マクロの値を変更します.

#define ADR_IDT         0x00581000
#define ADR_GDT            0x00581800
#define ADR_BOTPAK     0x00501000

*1:はりぼてOSでは*.cファイル

*2:メモリの1MB未満の領域はVRAMやBIOS等が使用するため,ここから開始させると確実

*3:GDTはいずれ削除