「OSを作れる」「仕組みが学べる」という言葉に惹かれて、プログラミング軽くかじった程度の私が、OSを自作しようと思い立ちました。

2019年の目標の一つは『OS自作入門でOSを作る』です。

目標を次のように設定。

「2019年3月31日までに、完読してわからないなりにもOSを自作してみよう。」

そのための覚書です。

 

・・・・・

今日は、マウスを動かすための続きを頑張ります。

 

◆ harib03d (PIC初期化)

マウスを動かすためには、GDTとIDTの初期化だけではなく、PICというものの初期化も必要だそうです。

「PIC」:「programmable interrupt controller」設定可能な割り込みコントローラー。CPUは単独では一つしか割り込みを扱えないため、複数の割り込みをできるように取り付けられた補助チップ。8個の割り込み信号を1つの割り込み信号にまとめる。

PICが2つついていて、CPUに直接つながっている方が、「マスタ(master)PIC」でIRQの0~7番を担当。その下につながっているPICが「スレーブ(slave)PIC」でIRQの8~15番を担当。スレーブPICは、IRQの2番とつながっている。

 

PICのレジスタは8ビット。

「IMR」:「interrupt mask register」割り込み目隠しレジスタ。

「ICW」:「initial control word」初期化制御データ。ICWは1~4があって合計4バイト。ICW1, 4はPICが基板でどう配線されているか、割り込み信号の電気製品テキスト特性に関すること。ICW3は、マスタースレーブ接続に関する設定。
ICW2は、IRQをどの割り込み番号としてCPUに通知するかを決めるためのもの。
IQR0~15をINT 0x20~0x2fで受けたのは、INT 0x00~0x1fは使えないため。

 

新たに、ソースプログラムとしてint.cを追加。

⇒他のプログラムとの関係(書き方)を確認する。

 

◆ harib03e (割り込みハンドラ)

マウスがIRQ12、キーボードがIRQ1

メッセージを表示して、停止するための関数。

 

割り込み処理終了後に、return:(= RET命令)ではなく、IRETD命令が必要。C言語では書けないので、アセンブラで。

 

「バッファ(buffer)」の説明。永久に記憶する必要はないけれど、とりあえず何かを覚えさせておきたい。こういう目的のための記憶。

「バッファ」は記憶の整理の仕方によって、様々な種類がある。

「FIFO型」:「first in, first out」上からどんどん情報が入って溜め込んで、思い出すときは下から出ていく。
「LILO(last in, last out)」とも言うが同じもの。

「FILO型」:「first in, last out」一番最初に入ったデータが一番最後に出ていく。
「LIFO(last in, first out)」とも言うが同じもの。

 

FILO型のバッファをスタックと言い、

「PUSH」は、バッファの上にデータを載せること。

「POP」はバッファの上からデータを取ること。

 

この関数は、レジスタの値をスタックに保存して、その後にDSとESがSSに等しくなるように調整して、_inthandler21を呼び出して、帰ってきたら、レジスタを全部戻して、最後にIRETDしている。

割り込み処理をする際に、レジスタの値がおかしくならないように。

「CALL」:関数を呼び出す命令。”naskfunc.nas” に書かれていない関数を呼び出さなくてはならないので、最初に「EXTERN」命令を使っている。

 

この関数をIDTに登録。

idtの0x21番目に、asm_inthandler21を登録。割り込みが発生したら、CPUがasm_inthandler21を自動的に呼び出してくれるようになる。

2 * 8 は、asm_inthandler21がどこのセグメントに属しているか。セグメント2番。8倍の理由は、セグメント番号の下位3ビットは別の意味があり、ここで0にしておかねばならない。

AR_INTGATE32は、IDTに対する属性で0x008eのこと。割り込み処理用の有効な設定というマーク。

 

 

「io_sti();」:STI命令を実行するとIF(割り込み許可フラグ)が1となって、CPUは外部装置からの割り込みをうけつけるようになる。

 

 

「make run」して、Aを押してみましたが、何かメッセージがでて固まってしまいました。

どうやら、設定不足だそうです。

 

・・・・・

ようやく、『本書』でいうところの6日目が終わり次回が7日目。重いところがひと段落つきそうなので、「OS自作入門」で理解できないところも一緒に学んでいきたいなと考えています。

 

以上

スポンサーリンク