よもぎのメモ帳

備忘録的な感じで技術的なことをストックしていきます。

よもぎのOS自作入門 5日目/30日

はじめに

これは2020年夏休み企画「30日でOS自作してみよう!」5日目の記事です。

企画についてはこちら

y0m0g1.hatenablog.com

いい感じのサムネイル画像は明日以降作ろうと思いますもうそろそろ諦めてる。

昨日やったことを書いていきます

昨日の進捗

f:id:y0m0g1:20200822145807p:plain
マウスポインタ(動かない)

半角英数字の文字列を表示したりポインタになるものを表示したりできました。今後このポインタは動く予定です。

昨日やったこと

C言語における構造体の説明から始まりました、懐かしい。

//おなじってやつ
(*strct).item == strct->item

その後で文字表示です。8x16のビットマップフォントです。ちっちゃくて自由が効きにくいです。

本の筆者が配布してくれているhankaku.txtに8bit=256文字分の文字情報があって、それを読み込んで表示するみたいな感じなのですが、 セリフ体*1っぽくて嫌だったので英数字部分だけ色々変えました。 なんとなくでやったので不格好だったりするのですが、まあもともとのよりもいい感じになったと思ってます。 サンセリフ*2のほうが好き。あと数字のゼロの中に点を入れたりした、プログラマが好きなやつ。

f:id:y0m0g1:20200822164901p:plain
文字を表示

B,C,rあたりは少し気になるのでまたいじりたいね。

変数を含む文字列の表示のために、stdio.hからsprintf関数を読み込んで利用しました。sprintfって%s指定子がやばいんだっけ。忘れてしまった。

あとはマウスカーソルもほんのやつがダサくて気に入らなかったので自分流で作りました。 いま使っているPCではこれに近いかたちで、16x16という限られたサイズにも合うくらいにシンプルなのでいいかなと思いました。

今回の最後にはセグメントの設定を取り扱うGDT*3と割り込みの設定を扱うIDT*4の初期化設定をやりましたが、 内容的には次回の準備みたいな感じでなんで今回扱ったんだ?になってる。*5こはちょっと難しかった。セグメント違反がSegments fault!だったよね?違うっけ、みたいな感想。

今日も一日頑張るぞい!

*1:日本語フォントでいうところの明朝体。セリフというウロコのような飾りがついている。

*2:日本語で言うところのゴシック体。セリフがない。

*3:global segment descriptor table

*4:interrupt descriptor table

*5:多分分量のためってわかってるけど