「30日でできる! OS自作入門」
C Assembly Makefile Other
Switch branches/tags
Nothing to show
Clone or download
Latest commit ff0c32a Apr 24, 2017
Permalink
Failed to load latest commit information.
misc Check img Dec 7, 2016
test Add strncmp Dec 28, 2016
.clang-format Add clang-format config Dec 8, 2016
Makefile Add bball app Jan 1, 2017
README.md Create README.md Apr 24, 2017
a.c Support general protected exception Dec 30, 2016
api.h Add chklang command Jan 1, 2017
api.ld Create API lib Jan 1, 2017
api.s Add chklang command Jan 1, 2017
bball.c Add bball app Jan 1, 2017
beepdown.c Create API lib Jan 1, 2017
bootpack.c Add language mode Jan 1, 2017
bootpack.h Support Shift_JIS Jan 1, 2017
bootpack.ld Draw fonts Dec 9, 2016
bug3.c Add a key command to force quit an app Dec 30, 2016
chklang.c Add chklang command Jan 1, 2017
color.c Create API lib Jan 1, 2017
color2.c Create API lib Jan 1, 2017
console.c Add bball app Jan 1, 2017
dsctbl.c Add stack exception Dec 30, 2016
euc.txt Support EUC-JP Jan 1, 2017
fifo.c Add task levels Dec 27, 2016
file.c Multiple consoles Dec 31, 2016
func.s Add a key command to force quit an app Dec 30, 2016
graphic.c Support EUC-JP Jan 1, 2017
hankaku.txt Add font Dec 9, 2016
head.ld Rename Dec 8, 2016
head.s Change the display resolution Dec 27, 2016
hello4.c Create API lib Jan 1, 2017
hrbhead.s Create API lib Jan 1, 2017
int.c Clean up Dec 16, 2016
ipl.ld Rename Dec 8, 2016
ipl.s Support Shift_JIS Jan 1, 2017
iroha.c Add language mode Jan 1, 2017
keyboard.c Improve fifo buf Dec 26, 2016
lib.c Add strncmp Dec 28, 2016
lines.c Add getkey API Dec 31, 2016
make_font.py Add font Dec 9, 2016
memory.c Add a memory manager Dec 25, 2016
mouse.c Improve fifo buf Dec 26, 2016
mtask.c Use LDT for protecting tasks Jan 1, 2017
nihongo.fnt Add nihongo.fnt Jan 1, 2017
noodle.c Create API lib Jan 1, 2017
sheet.c Improve window moving performance Dec 31, 2016
star1.c Create API lib Jan 1, 2017
timer.c Cancel timers Dec 31, 2016
type.c Support Shift_JIS Jan 1, 2017
typeint.c Add file API Jan 1, 2017
walk.c Create API lib Jan 1, 2017
window.c Add chklang command Jan 1, 2017
winhelo.c Add winhelo2 Dec 30, 2016
winhelo2.c Create API lib Jan 1, 2017
winhelo3.c Create API lib Jan 1, 2017

README.md

hariboteOS

このリポジトリは「30日でできる! OS自作入門」という本を進めたときのログです。 (1日ずつコードを少しずつ書いていきフルスクラッチでOSを開発しよう、という本です。)

この本ではWindowsで開発することを前提にかかれている(著者作のWindows用ツールが使われている)のですが、 付属のツールを使用せず、Ubuntu16.04の環境でほぼ最後まで進めることができました。 今後同じように進める人に少しは参考になる?と思ったので、コードをおいておきます。

本の付属CDのデータはサポートページでダウンロード可能です。

注意点(書籍と異なる点など)

  • アセンブラにはgas(GNU assembler)を使っています。
  • イメージファイルの作成にmformat、エミュレータとしてqemuを使っています。(Install: # apt install mtools qemu-system)
  • コードはほぼ付属CDの内容と同じにしていますが、都合により微妙に変えているところもあります。
  • 28日目の__alloca、29日目の"圧縮ツール"、30日目の"高度なアプリケーション"の内容はスキップしています。
  • qemuでの確認のみで、実機での確認はしていないので、beepやキーボードランプなどは動くかどうかわかりません。
  • hrbファイルのフォーマットが必要になる箇所は無理やりすすめていますが、リンカスクリプトでヘッダファイルを作れるはずなので本当はその方がスマートだと思います
  • 3日目のC言語導入のところで詰まった当時の私は理解の浅いまま無理やり進めてしまいましたが、[8日目 32ビットモードへの道] と [22日目 C言語で文字列表示(2)]のhrbヘッダの構造あたりを先に読んで理解してから進めたほうが良いと思います。
  • 終わった今、見直してみるとおかしいところもありますが...修正するほどでもないのでこのままにしておきます。

進める上で参考になった本、サイトなど

どれも大変お世話になりました。感謝。

おまけ 本の感想

レビューを見ると賛否両論あるようですが、OSのことを知りたいがどこから手をつければ良いかわからないという初心者の道しるべとしてはよいと思います。 本を終えたあとで次はあれを学ぼう、この機能はあのOSではどうやってるんだろう、という気持ちになります。

また、あえて著者作のツールを使わないことが理由でいろいろ詰まりましたが、むしろそれを解決していくことが勉強になったので、こういう進め方もおすすめです。