「OSを作れる」「仕組みが学べる」という言葉に惹かれて、プログラミング軽くかじった程度の私が、OSを自作しようと思い立ちました。

2019年の目標の一つは『OS自作入門でOSを作る』です。

目標を次のように設定。

「2019年3月31日までに、完読してわからないなりにもOSを自作してみよう。」

 

・・・・・

C言語での開発に入ってから、いかに私がプログラミングというものをわかっていない(忘れてしまった)かに気づかされる毎日です。

もう一度、昔勉強した本を引っ張り出して、勉強し直さないとなー。

 

◆ harib02e (フォントを増やす)

“hankaku.txt” というソースプラグラムを利用する。

このプログラムは、C言語でもアセンブラでもないので、専用のコンパイラが必要。

⇒ “makefont.exe”

テキストファイルを読み込んで、 16 x 256 = 4096 バイトを出力する。

次に、上記コンパイラでできた “hankaku.bin” を “bootpack.obj”とくっつけるため、”bin2obj.exeを使う。

これらのことは、”Makefile” に記載。

 

フォントデータをC言語から扱うためには、

extern char hankaku[4096];

を書いておく。

OSASKのフォントデータは、256文字。Aの文字コードは、0x41なので、Aのフォントデータは、hankaku + 0x41 * 16。C言語では、文字コードを’A’と表すことができるので、hankaku + ‘A’ * 16と書くこともできる。

 

自分でフォントデータを作りたい場合は、

  • テキストファイルでフォントを作って名前を作る。
  • 専用のコンパイラで”.bin”にして、”bootpack.obj”とくっつけるための命令を”Makefile”に書く。
  • “bootpack.c”にextern char ・・・・[4096]を書く。

という流れかな。

 

◆ harib02f (文字列を書く)

文字列を表示する関数。

C言語では、文字列は0x00で終わる。文字列は、文字コードを順番にメモリに並べて、最後に0x00をつけたもの。sがその先頭の番地で、*sで文字コードを読み取っている。

 

 

あ~、Haribote OSは影付きか・・・。

 

◆ harib02g (変数の値の表示)

OS開発には、変数表示は重要とのこと。

変数表示をどうやってやるか。sprintf という関数を使う。sprintfは指定された書式で「出力」するわけでなく、出力内容を文字列としてメモリの中に生成するだけだから。

C言語でsprintfを使いたい場合は、ソースプログラムの先頭に<stdio.h>とかく。

「sprintf」の使い方、sprintf(番地, 書式, 値, 値, 値,…)。

 

◆ harib02h (マウスカーソルを描く)

次は、マウスカーソル。大きさは、16 x 16だそうです。

「bc」はback-color 背景。

 

bufにあるデータをvramへコピーするための関数を書く。

vramと vxsize は、VRAMに関する情報。pxsize とpysize は、表示したい絵の大きさ。今回は、16 x 16なので、どちらも 16。px0とpy0は、絵を画面のどの位置に表示するか。bufとbxsizeは、絵が入っている番地と、1ラインがいくつの画素でできているか。

 

 

動かないマウスカーソルが書けました。

それにしても文字といいカーソルといい、いろいろな工夫で形作られているのが面白くもあり、大変でもあるのですね。

以上。

スポンサーリンク