Linux/gccでtolsetを使わずに「OS自作入門」を試してみる件、ひとまず完了した。

haribote-fin

やらなかった項目は、

  • ビープ音&それを使ったMML:VirtualBoxは音は鳴らせるみたいだが、ビープ音は鳴らなかった。実機で起動させていないので試せていない。
  • 漢字表示:それほど本質的ではないし、シフトJISとかEUCとか扱いたくないため、飛ばした。
  • 圧縮・展開ルーチンの組込み

あたり。

本の感想としては、内容は間違いなく素晴らしい。実際に動かせるOSを0から作っていくので、頭でっかちになって「じゃあ実際どうするのよ」ということにならずに済む(終えるのに8年かかっちゃったけど…)。後半はいろいろなアプリを動かせるようにして見た目が派手になるので、とても充実感がある。x86とかブートシーケンスとかまったく知らなかった自分でもそれらしいものが作れて、非常に満足できた。

一方で、本の中で述べられている開発環境は著者の方の独自ツールで構成されていて、バイナリがどのようにして作られているか不明なことと、OSを改良しようと思った時に足かせになる。また、後半ソースがスパゲッティになって見通しが悪くなっている。OSのAPIがconsoleに入ってる、一部定数が埋め込まれている、システムで管理する変数をAPIで参照するために直アドレスにストアしている、TASKとCONSOLEとSHEETが絡まっている、など。しかし、このへんは紙面や説明の順番の都合もあるだろうことや、またそのツッコマレビリティが「自分のだったらもっとこうするのに」という感情を沸き起こして、逆に良い。

今後の改良としては、

  • アプリのエントリポイントをmainにする Done
  • RTC(時計) Done
  • アプリ側でマウスイベントを扱う
  • ハイカラー、フルカラー対応
  • フロッピーディスクの読み書き
  • ハードディスク読み書き
  • USB or CD起動できるようにして、実機で試す Done
  • 仮想アドレス、ページング
  • .rodataをコード領域に置く
  • 標準入出力
  • 各タスクの動作をイベントドリブンにする
  • 浮動小数点演算をサポート Done
  • アプリのソースにC++を使えるようにする Done
  • ネットワークサポート
  • マルチコア対応
  • シェル
  • POSIX準拠
  • はりぼてOS上で開発できるようにする(エディタ、コンパイラ、アセンブラ、リンカ)
  • ブラウザを動かす
  • OpenGL、GPU対応
  • 64bit対応

…遠いなぁ。