ゼロからのOS自作入門 | day05_1

少し空いてしまいましたが続きをやっていきます。

実は面白い本を見つけました。「解析魔法少女美咲ちゃん マジカル・オープン!」という本です。

「あなたの名前を入力してね」みたいなページがあるのだが、本に出てくる”お兄ちゃん”になれるのだ。しかし、そのお兄ちゃんの設定が”典型的なダメ兄で負け犬人生”ということで、なんとも複雑な感情になれる。

本の内容はバイナリエディタを使って悪いこと自分のソフトを守ろうという内容。(まだあまり読んでない)アセンブラ初心者も楽しく勉強できそう??

文字を書く

「頑張ると文字の形をした絵を描くこともできるはずです」文字の表示とはそういうことらしいです。

振り返り

ちょっとピクセルを描く処理についておさらいしておきます。

まず描画に必要な情報を取得するにはGOP(Graphics Output Protocol)という機能を使います。

必要な情報は以下です

  • フレームバッファの先頭アドレス
  • フレームバッファの表示と非表示領域
  • 1ピクセルのデータ形式。1ピクセルが何バイトか

箇条書きですがざっくり振り返りを進めます

  • 定義したOpenGOPメソッドを介して変数gopにGOPを設定します。(詳細は省略されてます)
  • このgopからgop->Mode->FrameBufferBaseのようにフレームバッファの情報を取得します。
  • gop->Mode->FrameBufferBaseで取得したUINT8* frame_bufferの[n]に対して色を指定(例えば255)することでフレームバッファに描画を行います。
  • 白で塗りつぶすならばgop->Mode->FrameBufferSizeだけループさせる
  • そしてカーネル側で、このframe_buffer_baseを引数で受け取り描画を行います。
  • reinterpret_castを利用して整数をポインタに変換します。uinit64_tをreinterpret_cast<uint8_t*>とする

第四章を振り返る

第四章ではクラスを分けて便利に描画できるようにしました。

また箇条書きで描いていきます

  • PixelWriterという抽象クラスを用意しました。こいつはフレームバッファーを受取ります。また、Writeメソッドを仮想関数として用意
  • PixelAtメソッドでフレームバッファに描画する箇所を取得します
  • オーバーライドするWritePixel関数でPixelAtで取得した箇所に1ピクセルを描画します
  • 1ピクセルは32ビット=4バイトなのでフレームバッファの先頭からバイト位置を計算するにはpixel_positionに4をかける

改めて文字を書く

都度都度振り返りを挟んで処理を理解しないといけないです。

文字列を描画するには塗るか塗らないかという情報を用意しておいて、PixelWriterのWriteメソッドを呼び出します。

このメソッドをWriteAsciiメソッドとしてコンポジションでWriteメソッドを呼び出します。→ピクセルの描画方法と切り離して変更に強い実装にする。

ヘッダーファイルの作成

C++では関数やクラスという単位でファイルに分割できる。今回はcppファイルを分割して、ヘッダファイルを宣言してincludeする

#include "frame_buffer_config.hpp"
#include "graphics.hpp"
#include "font.hpp"

またMakefileに修正が入っているのでgitを確認する

フォントを増やす

hankaku.txtはgitからダウンロードしました。そしてそれをバイナリファイル→オブジェクトファイルに変換する
※toolsもgitからダウンロードしておきました

権限がバグってたので全部付与しました。
→ chmod 777 makefont.py

まずbinを作成して

オブジェクトファイルを作成する

オプション引数が -0に見えたが -O オーが正解です。

そしてエラー

こいつまじなんなの?

しかも前回と同じことしても全くダメ

仕方ないのでgitのブランチを切り替えてみます。せっかく手打ちしてんおに!!!

結局変わらない^^^^^^^^;;;

時間がもったいないので一旦ここで手を止めます。。。。。

やったこと

  • evalをつける
  • evalをつけない
  • source $HOME/osbook/devenv/buildenv.sh
  • ブランチをday05cに変更

↑ぜーんぶだめ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする