Skip to content

Latest commit

 

History

History
72 lines (51 loc) · 3.52 KB

started-making-home-made-os-vidar.mkd

File metadata and controls

72 lines (51 loc) · 3.52 KB
tags
プログラミング
vidar

自作OS "vidar" を作っている話

12月の中旬頃に,30日でできる! OS自作入門 という書籍を購入した. Twitterではよく話題になっているのを目にしていたので,以前から気になってはいたのだが.

この書籍は,自作OSを30日で作ろう,というもので,全体の作業内容が1日ごとに分割されている. 現段階で,5日目までの内容がほぼ完了している状態だ. キリが良い気がするので,ここで一旦今までの作業内容について軽くまとめておこうと思う.

なお,この書籍を読みながら書いたコードは全てGitHubに上げてある. https://github.com/musou1500/vidar

環境

ubuntu 18.04.1

今までにやったこと

  • アセンブリでIPLを書いた
  • 起動後の処理を行い,Cのプログラム(bootpack.c)に処理を渡すvidar.sを書いた
  • 簡単なGUIが表示できるようになった

それぞれについて,どんなことをやったかについて書く.

アセンブリでIPLを書いた

FAT12のフォーマットに沿ったバイナリを吐くように,アセンブリを書いた. FAT12では,最初の3byte分にブートストラップコードへのジャンプ命令を, その後,ファイルシステムのメタデータを置くようになっている.

ブートストラップコードでは,

  1. フロッピーからファイルを読み出し,メモリに載せる
  2. 起動後の処理を行う部分(vidar.s) にジャンプする ということを行っている.

なお,vidar.sでは,

  • 32bitプロテクトモードへの切り替え
  • フロッピーからファイルを読み出し,メモリに載せる
  • Cのプログラムで必要になる情報(VRAMのアドレス,スクリーンのサイズ等)をメモリに載せる
  • bootpack.cへジャンプ ということをやっているはずなのだが,この段階では説明がなく,全くと言っていいほど理解できていない.

簡単なGUIが表示できるようになった

bootpack.cでは,主にVRAMへデータを書き込み,GUIっぽいものを表示させる,ということをやっている. なお,アセンブリでしか出来ない処理もあり,そういった処理は適宜アセンブリで書いている.

このタイミングで,文字の表示処理やデバッグ目的で,以下の関数を実装した.

  • itoa
  • strlen
  • sprintf
  • strcpy

Cの標準関数が使えない状況に慣れておらず(ほとんどの人はそうだと思う),なかなかしんどい部分でもあった.

感想

常用しているから,という理由で ubuntu環境で開発し始めたのだが,なかなか詰まる部分が多い. 筆者独自のツールチェーンを回避したり,環境特有の現象に悩まされている手間がほとんどだと思う. (それについても,ちゃんとした原因が分かっていない部分がある)

また,メモリの配置や,FAT12の構造についての知識も不足している. この辺りは,他の資料なども併せて読むことで理解していきたい.

5日目でこの状態だと先が思いやられるなぁ....