tags | ||
---|---|---|
|
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が表示できるようになった
それぞれについて,どんなことをやったかについて書く.
FAT12のフォーマットに沿ったバイナリを吐くように,アセンブリを書いた. FAT12では,最初の3byte分にブートストラップコードへのジャンプ命令を, その後,ファイルシステムのメタデータを置くようになっている.
ブートストラップコードでは,
- フロッピーからファイルを読み出し,メモリに載せる
- 起動後の処理を行う部分(
vidar.s
) にジャンプする ということを行っている.
なお,vidar.s
では,
- 32bitプロテクトモードへの切り替え
- フロッピーからファイルを読み出し,メモリに載せる
- Cのプログラムで必要になる情報(VRAMのアドレス,スクリーンのサイズ等)をメモリに載せる
bootpack.c
へジャンプ ということをやっているはずなのだが,この段階では説明がなく,全くと言っていいほど理解できていない.
bootpack.c
では,主にVRAMへデータを書き込み,GUIっぽいものを表示させる,ということをやっている.
なお,アセンブリでしか出来ない処理もあり,そういった処理は適宜アセンブリで書いている.
このタイミングで,文字の表示処理やデバッグ目的で,以下の関数を実装した.
- itoa
- strlen
- sprintf
- strcpy
Cの標準関数が使えない状況に慣れておらず(ほとんどの人はそうだと思う),なかなかしんどい部分でもあった.
常用しているから,という理由で ubuntu環境で開発し始めたのだが,なかなか詰まる部分が多い. 筆者独自のツールチェーンを回避したり,環境特有の現象に悩まされている手間がほとんどだと思う. (それについても,ちゃんとした原因が分かっていない部分がある)
また,メモリの配置や,FAT12の構造についての知識も不足している. この辺りは,他の資料なども併せて読むことで理解していきたい.
5日目でこの状態だと先が思いやられるなぁ....