🐈

UEFIブートで遊ぼっ!(3)

に公開

UEFI BOOT

せっかく専用のWindowが上がっているのに何も出力できないのは寂しいものです。
聞けばテキストRAMの解像度は640400だったかな?
Windowサイズが1280
800なので、そのまま使うと黒い大枠内の真ん中に字が出る
感じになります。なんかもったいないですよね。
画面全体を使いたいところです。

概略

画面全体を使おうとするとフレームバッファへの出力となります。
ところがフレームバッファを使うには仮想メモリでなければなりません。
UEFIサービスは最早存在しないので、自前でマッピングする必要があります。
かような流れでメモリのマッピングをします。
これによって最低限フレームバッファが使えるようになります。
とはいっても点を打つぐらいなんですが。

起動直後のメモリマップは以下のようになっているようです。
Memory map:
Usable: 0x2000 - 0xA0000 (0x9E pages)
Usable: 0x104000 - 0x800000 (0x6FC pages)
Usable: 0x808000 - 0x80B000 (0x3 pages)
Usable: 0x80C000 - 0x811000 (0x5 pages)
Usable: 0x1780000 - 0x3BB6C000 (0x3A3EC pages)
Usable: 0x3BB8C000 - 0x3E003000 (0x2477 pages)
Usable: 0x3E035000 - 0x3E041000 (0xC pages)
Usable: 0x3FE00000 - 0x3FE6F000 (0x6F pages)

Usable: 0x1780000 - 0x3BB6C000 (0x3A3EC pages)が最大の空き
Usable: 0x3BB8C000 - 0x3E003000 (0x2477 pages)次がこれ

最大の空きをメインのメモリとして使用することにしましょう。
2番目の空きをページマップ領域およびシステムで使う領域にしましょう。

所感

点を打つといってもバカにしたもんじゃありません。
ちゃんとねらって打てば文字だって表示できるのです。

公開場所

https://github.com/CbWB-Inc/software/tree/main/laboratory/lab01/03_UEFI_boot-3

GitHubで編集を提案

Discussion