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

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

目標を次のように設定。

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

 

・・・・・

いよいよC言語の導入に入るようです。C言語は、はるか昔に勉強したことがあるので、少しはとっつきやすいでしょうか。楽しみです。

しかも、C言語についての説明が入るので、復習に良さそうですね。

 

◆ harib00i(C言語での開発開始)

プログラムは次のようになっています。

  • ipl10.nas:ブートセクタ10シリンダまで
  • haribote.nas → asmhead.nas:C言語で書いた部分を呼び出すために100行ほど書き足し。
    説明はもっと話が進んでから。
  • bootpack.c:C言語部分を作成開始。

 

bootpack.cの中身

 1行目:これから関数を書きます。関数の名前はHariMainです。何もデータは必要としていません(void)、何もデータを返さない関数です(void)

{}で囲まれた範囲が関数の中身。

「goto命令」:アセンブラでいうJMPで、finにジャンプ。

/* と*/ではさまれた部分はコメント

 

bootpack.cを機械語にするには。

  1. cc1.exeを使って、bootpack.cからbootpack.gasを作る。
  2. gas2nask.exeを使って、bootpack.gasからbootpask.nasを作る。
  3. nask.exeを使って、bootpack.nasからbootpack.objを作る。
  4. obj2bim.exeを使って、bootpack.objからbootpack.bimを作る。
  5. bim2hrb.exeを使って、bootpack.bimからbootpack.hrbを作る。
  6. これで機械語になったので、copyコマンドでasmhead.binとbootpack.hrbを単純にくっつけて、haribote.sysとする。

うーん。すごいなぁ。

それぞれがなんだかよくわからないので、メモします。

cc1:Cコンパイラ。C言語のプログラムからアセンブラのソースプログラムを作ってくれる。このCコンパイラは、gas用のソースプログラムを出力するらしく、これはnaskで翻訳できない。

gas2nask:gasファイルをnaskファイルへ変換するプログラム

nask:naskを使ってobjファイルを作る。obj(オブジェクト)ファイルは、他のオブジェクトファイルとくっつけるための特別の機械語ファイル。単独では機械語としては未完。

obj2bim:未完のobjファイルに対して、必要なオブジェクトファイルを全部くっつけてあげる。bimファイル「binary image」

bim2hrb:実際に使うためには、それぞれのOSが必要とする形式に合わせて加工が必要。そのためのプログラム。

 

◆ harib00j(HLTするためにnaskfunc.nasを作成)。

naskfunc.nasの中身

出力フォーマットをWCOFFというモードに設定。本体のbootpack.objとくっつけるため。

naskのオブジェクトファイルモードでは、ソースファイル名の設定が必要。関数名の前には、” “をつけるとになっている。連携したい関数名は、GLOBAL命令で宣言。関数名は、io_hlt

 

bootpack.cの中身

 

「make run」してみると、どんどこfile(15個!)が作られますね。

画面は真っ黒ですが、これが、fileを変換した結果なんだな、後ろでこんなに頑張っているだなとわかって少し面白い。

 

ここまでで、『本書』では3日目が完了。

まだまだ先が長いな・・・。

 

以上。

スポンサーリンク