テキスト描画

base version : v0.1.0

 

画面に文字を表示する

カーネル実行時のログは多くの場合、画面から確認したい。(テキストに書いたり、ネットワークでどこかに飛ばしても良いけど)

というわけで、画面に文字を出力するドライバが必要になる。

文字を出力できれば良いので、GUIとかそんな事はやらない。グラフィカルなかっこ良いUIを動かすのはOSカーネルの仕事ではなく、ウィンドウマネージャの仕事である。

 

VBE

手っ取り早いのはVBE(VESA BIOS Extension)のtextモードを用いる事である。

メモリマップドI/Oに対して色コードとキャラクタコードを書くだけで文字が出る。

詳しい話はこちら

 

ドライバインターフェース

ドライバのインターフェース(Vgaクラス)としては、一文字書く事とスクロールする事しかサポートしていない。(→kernel/dev/vga.h

printfによる文字整形などはTtyクラス(→テキスト出力<執筆中>)で実装されている。デバドラの機能としては必要最小限があれば良くて、複雑な処理は上位のレイヤーに投げている、という話。

講釈を垂れてみたものの、v0.1.0時点ではVgaクラスがTtyクラスの継承子クラスになっており、完全に密結合してしまっているので、上に書いてある事は半分嘘。設計修正しなきゃない。上で書いたのは、そのうちそういう設計になる/しなきゃいけない/したいけど時間がない、というお話。

 

実装

textモードは単純すぎて、本当に実装するだけなのだが、解説してみる。

 

DMAアドレスは現状では固定値。本当はvbeインターフェースを叩けば取得できるはず。論理アドレスに変換するのだけ忘れずに。→kernel/dev/vga.h#L41

kernel/dev/vga.h#L55では実際にキャラクタコードの書き込み。

kernel/dev/vga.h#L48では一列にスペースを描いて改行している

スクロールは画面バッファをメモリコピーして、最終行をクリア→kernel/dev/vga.h#L65

 

 

 

 

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中