30日でできる! OS自作入門

30日でできる! OS自作入門

  • 作者: 川合秀実
  • 出版社/メーカー: マイナビ出版
  • 発売日: 2006/03/01
  • メディア: Kindle版
  • この商品を含むブログを見る

すでに3日目どころか42人日ぐらいかかってるので成果報告をしておきたい。

OS自作入門とは

Windows環境で、最終的にはフロッピーディスクから起動できるOSを再実装するまでの手順とソースコードが書かれた分厚い本

なぜアセンブラを再実装?

OS自作入門ではNASM/MASMベースの独自のアセンブラが使われており、これベースでOS作成が進められている。
しかしLinux環境ではどうにもビルドできず、古いコンパイラ(gcc-3.x)でしか使えないソースが中心だったので勉強と趣味を兼ねて再実装したら面白いと思いやり始めた。

進捗
  • 成果物: GitHub - Hiroyuki-Nagata/opennask: Re-implementation for nask


2016/06/08時点では、書籍の3日目までのアセンブラ(harib00bまで)はバイナリに変換できるようになった。
使用できるオペコード(部分的に実装しているものも含む)は以下の通り:

  • ADD
  • CMP
  • DB
  • DD
  • DW
  • HLT
  • INT
  • JAE
  • JBE
  • JC
  • JE
  • JMP
  • JNC
  • MOV
  • ORG
  • RESB
ソースコード上の工夫

std::function を積極的に使い、オペコードごとに関数オブジェクト的なものを作れるようにした
・Parasol - 実行時文法定義のできる構文解析ライブラリ - を使って構文解析してみた

今後の展望 - 2016/06/08
  • 早く4日目に到達したい(切実)
  • 普通に途中でやめるかも
  • C言語の連携はintel2gasを使ってやる予定
  • FAT12を一緒に出力する処理をfatlib, dosfstoolsを使ってやるかも
  • 唐突にリフレクションが使いたくなった時のためにreflcppというライブラリを一緒にビルドしているがまだ使われる気配はない*1
進捗 - 2016/08/15
  • 早く4日目に到達したい(進捗なし)
  • intel2gasは動いてる
  • reflcppはいらないので削除
  • アセンブラ中の数値計算処理でちょっと詰まっている
  • というか時間がない
進捗 - 2016/08/30
  • 早く4日目に到達したい(進捗わずか)
  • アセンブラ中の数値計算処理を実装完了 -> Tinyexprで文字列上の数値計算をする - なんとな~くしあわせ?の日記
  • またひたすら命令を実装する作業に戻る
進捗 - 2016/10/28
  • 早く4日目に到達したい(苦しい)
  • 3日目のすべてのオペコードをアセンブルすることに成功 -> harib00iの実装 · Issue #4 · Hiroyuki-Nagata/opennask · GitHub
  • ここを見ながらqemuでの動作を目指す Cyber Bird OS自作入門 onLinux 3日目

*1:C++はリフレクションがないのがやーねー