Turing Complete FM #2 を聞いていて、もっとCPUやOSに詳しくなったら楽しいだろうなという気持ちになったけど何からすればいいか皆目検討がつかず調べたら、OS自作という観点では 30日でできる! OS自作入門 | 川合 秀実 が名著と名高い 、ということが分かったので購入して始めてみた。
書籍ではWindowsでの開発を対象とした方法が記載されており、Macではそのまま使えないためGitHub - sandai/30nichideosjisaku: 『30日でできる! OS自作入門』川合 秀実氏(著)のMacOSX開発環境を整えることができます を参考に環境を構築した。
ただ、GitHub - sandai/30nichideosjisaku: 『30日でできる! OS自作入門』川合 秀実氏(著)のMacOSX開発環境を整えることができますでは仮想化環境としてQ.appを使っているが、「30日でできる! OS自作入門」をMac向けに環境構築する - Qiita によればQ.appではそのうちエラーになるからhomebrewでqemuをインストールして使えと書いてあるで使おうとしたのだが、最初から動かない(追記: 以下 その後のqemu周り気付き
に実は動いていた旨記載しました)…困った困った、ではVirtualBoxでやるかということでVirtualBoxのコマンドラインを調べて動かしたら動いたのでそちらでやることにした。
以下のようなMakefileを用意して使っている。
{7:55}[2.1.7]~/HariboteOS/z_tools/virtualvox ➭ cat Makefile OSNAME:=dekoos IMGNAME:=img.img .PHONY: default default: VBoxManage createvm --name $(OSNAME) --ostype Other --register VBoxManage storagectl $(OSNAME) --name Floppy --add floppy VBoxManage storageattach $(OSNAME) --storagectl Floppy --device 0 --medium $(IMGNAME) VBoxManage startvm $(OSNAME) .PHONY: remove remove: VBoxManage unregistervm $(OSNAME) --delete
今のところかかった時間等
計5.5時間。以下の○日目というのは、書籍の章立ての名前であり、実際は以下を今日1日で終わらせている。
- 仮想化環境の試行錯誤 2時間
- 0日目30分
- 1日目 1時間半
- 2日目 1時間半
よくわからなかったところ
添付のアセンブラではMOV AH,0x0e
INT 0x10
でBIOSのビデオサービスの1文字書き込み機能をループ内で使うことで文字列を書き込んでいたが、 Tips BIOSサービス割り込み ビデオサービス 文字列書き込み で調べると、AHレジスタに 0x13
を書き込むと文字列書き込みができるっぽい?と思って以下のように書いて実行しようと思ったみたけど、naskがipl.nasからipl.binを生成するところでエラーになってしまった。
MOV SI,msg MOV AH,0x13 ; 文字列表示ファンクション MOV ES,msg INT 0x10 ; ビデオBIOS呼び出し
naskのエラーも特にメッセージ等もなく、そもそもnaskが何をやっているのかとかも含めてイマイチ詳しく分かっていないし、また後々分かってくることも多かろうということで今はスキップ。
Tips BIOSサービス割り込み ビデオサービス にも 文字列書き込み Phoenix BIOS4.0
とあるので、そもそもBIOSが対応していないとかなのかな?
追記: 3日目のところを読んでいたら、セグメントレジスタという概念が出てきた。確かに、上記文字列書き込みのところにも、先頭アドレスは ES:BP
というセグメントレジスタに書き込めという旨記載してある。なるほど、そこは完全に理解していなかった。少しずつ分かっていくぞ〜〜。
というわけで以下のように書いてみたら…naskは正常終了してOSの起動まではいったが、何も表示されず…うーん。なんだろ。まだまだ道は長い。
MOV SI,msg MOV ES:BP,[SI] ; msg指定 MOV AH,0x13 ; 文字列表示ファンクション INT 0x10 ; ビデオBIOS呼び出し
その後のqemu周り気付き
今このブログを書きながらもう一度qemuのコマンド打ったら、裏側でウインドウが出現していることに気付いた。朝に検証していた際は、そのウインドウに気づかず、"コマンド打ってどれだけ待っても何もおきない…"とか思ってたけど、実際は起動していたんだなぁ。まぁせっかくVirtualBoxで環境構築してみたのでそのまま行けるとこまで行ってみようと思いました。
意気込み
まぁ、ボチボチやっていこう。
後日追記
以下あるように、終わらせました。途中経過のエントリを書けてなかったのは残念 dekotech.dekokun.info