2日目「アセンブラは別に入門書が必要 Makefileは最高!」

 2日目はいきなりテキストエディタの話から始まる。テキストエディタなんて、まったくもってOSとは関係ないのだが、やはりプログラマたるものテキストエディタにもこだわりがないとダメなのだろう。それで著者の川合氏(どうやらネット上ではK氏と呼ばれているらしい)のこだわりはTeraPadだという。ああーTeraPadね、うんうん、TeraPadTeraPad…って、俺もそれ愛用してるよ、このやろ〜
 なんだよ。あんたもTeraPad信者なのか(信者って…)。そうなのか。うんうん。いや分かるよ。いいよな、あのテキストエディタ。一見シンプルであるにも関わらず、必要な機能は確実に揃っているという充実感。そしてあの分かりやすく、かつ、直感的なインターフェース。そうか、そうか、よく分かった。俺たちは今日から仲間だ。これから30日間よろしくな。よっしゃー、やる気でてきたぞ〜(いつになくテンション高だな…)。
 さて、テキストエディタへの秘めたる想いを一通り語りつくしたら、早速昨日書いたプログラムの解説。それで、本書を読み進めていると、いきなり2日目のフォルダに入っているhelloos3のソースコードを開くが、それを開いた瞬間これ、昨日書いたのと違うじゃんという疑問が…。というのも、昨日書いたhelloos.nasではマシン語で書かれてあったところが、2日目のサンプルソースではすべてアセンブリ言語で記述されている。そもそもマシン語アセンブラ命令が1対1で対応しているという事実さえ良く分かってない読者に対して、いきなりこの仕打ちはないんじゃないと正直思った。せめて、一文「前回のプログラムのマシン語をすべてアセンブリ言語に変換したのが今日のソースコードです」くらいは入れてほしかった。
 そして、このあとに最低限のアセンブラの解説が続くことになる。本書の解説は確かに分かりやすい。というか、自分もすごい理解できた。でも最近アセンブラ関連の本が多く出てるので、ちゃんとアセンブラを学ぶにはそっちを買った方はよいだろう。どうしてもOSを作るためにはコアなアセンブラの知識が必要なようで、しかも本書ではそれに割り当てるページ数が限られており絶対的に少ないので、ここは本書とは別にアセンブラ関連の本を一冊買って勉強しておく方がよいだろう。もちろん並列で習得してもよいだろう。俺はちょっと前にアセンブリ言語の教科書というやつを読んで100ページくらいで挫折した経験があるので、この辺りのアセンブラの知識は問題ないのだ(って挫折してんじゃん!)。
 そして、今回のポイントのひとつとなりそうなのが、BIOSを利用する方法。文字列を表示するには以下のようにするっぽい。http://community.osdev.info/?%28AT%29BIOSから引用だ!

一文字表示
  AH = 0x0e;
  AL = キャラクターコード;
  BH = 0;
  BL = カラーコード;
  戻り値:なし
  註:ビープ、バックスペース、CR、LFは制御コードとして認識される

 ふむふむ、なるほど。このようにレジスタを設定することでBIOSを呼び出すことができるらしい。そして、そのBIOSを利用して1文字表示を行っているというわけか。ほーほー、これはなかなか分かりやすい。つまり文字の表示はBIOSというものの力を借りて行うわけだな。
 アセンブラBIOSというものの呼び出し方が分かれば、あとは簡単にプログラムを理解することができた。というわけで、改めて文字列を表示するプログラムを書いた。ちなみに昨日書いたプログラムが表示している英文は間違っているので、それを修正して「I will make the hariboteOS after 30 days.」を表示するプログラムとした(ええっ? 昨日のあの英文間違ってたの? カッコわる)。うっさいわ! 英語なんて分かるか、このやろ〜。
 さらに今日はMakefileのすばらしさを教わった。というのも、実は俺は前々からMakefileが何なのかずっと疑問に思っていた。だから一度会社の先輩に聞いてみたことがあるのだ。「あの、たまにプログラムのソースコードについてくるMakefileってやつのことなんですけど、先輩あれって何のファイルか分かりますか?」うーん、いま思えば俺も若かった。若造だったよ。そんな簡単なことを先輩に聞いてしまうなんて…。そして、先輩は何も気にすることなく普通にこう答えたよ。
先輩「いや、よく知らんけど、なんか負けた時に作るものなんじゃね?」
俺 「えっ、負けた時ですか?」
先輩「そそ、だってMake(負け)file(ファイル)だろ?
 いくらなんでも、そりゃねーだろ…
 それ以後、俺はMakefileが何なのかずっと気になっていた。しかし、ちゃんと説明されれば分かるもんなんだな。要するにバッチファイルのパワーアップ版。つまり、やってることはバッチファイルとほとんど同じ。
 そして、これまではバッチファイルしか使えなかったからフロッピーイメージデータをすべてhelloos.nasから生成していたけど、これからはMakefileが使えるから別にフロッピーイメージデータすべてをhelloos.nasファイルで生成する必要がなくなったと。こうして、helloos.nasはブート部分だけを記述したipl.nasへと生まれ変わったというわけだ。だから、とりあえずブート部分のバイナリだけを作っておいて、フロッピーイメージを作る時はMakefileを利用して簡単に作れるから後々のことを考えたらこっちの方がいいよということか。うーん。なるほどね。了解!
 今回の動作状況やソースコードhttp://www.geocities.jp/hariboteos/#l2にある。今日も結構ちゃんと理解できた。これはなかなかいけるかもしれない(まだ実質2日だけど)。しかし、本当にこの調子でだいじょぶなのか。OSなんて作れるのか(笑)。まぁとりあえず2日無事に終わったからよしとするか。
 このままの調子で行けるのか? 乞うご期待!