よもぎのメモ帳

備忘録的な感じで技術的なことをストックしていきます。

よもぎのOS自作入門 6日目/30日

はじめに

これは2020年夏休み企画「30日でOS自作してみよう!」6日目の記事です。

企画についてはこちら

y0m0g1.hatenablog.com

昨日やったことを書いていきます

昨日の進捗

f:id:y0m0g1:20200823145703p:plain
キー入力に反応

キーボードからのキー入力割り込みに反応して、左上に文字列を表示しています。まだ、マウス入力には対応していないという*1

見た目の変化は大きくない一日でした。

昨日やったこと

最初は、だんだん書いているCファイルが長くなってきたので、ファイルを分割したりヘッダを導入したりしていました。

GDTの初期化にミスが有ったのにそれに気づかず*2、今回の最後の方で急に動かなくなったときは焦りました。 for文、いままで終了条件では<の比較演算子使いがちだったのに*3、 OS入門では<=をつかうことが多くてミスが起きがち。

これを済ませたら割り込みをハンドルするPIC*4の設定です。

PICとはIntel 8259であって、Intel 8086ファミリの割り込みコントローラでいて、8本の割り込み端子がある。*5 PC/AT互換機にはこれが2つあって、CPUと繋がっているPICをPIC(master)、PIC(master)の3番目の割り込み端子であるIRQ2に繋がっているPICをPIC(slave)というみたいです。 もしかしたら、こういった名称も変わるかもしれないですね。

プログラム中ではPIC(master)をPIC0、PIC(slave)をPIC1としています。そしてPIC0にはIRQ0~7が、PIC1にはIRQ8~15が対応していて、IRQ1がキーボードの、IRQ12がマウスの担当になっています。 割り込みハンドラを作って、進捗にあげたようなのができあがりました。

見た目的な変化が少ない一日でした。

今日も一日頑張るぞい!

*1:8日目に反応するようになるらしい?

*2:main関数がサイレント修正されていたので

*3:実際suggest機能ではfor (size_t i=0; i < count; i++) { }で示される

*4:programmable interrupt controller

*5:wiki調べ