4614728 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

Bubble, bubble, toil and cuddle !!!

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
April 26, 2006
XML
カテゴリ:作りモノ
だいぶ間があいて忘れそうなのでOS自作本第6日目の残りを読んだ。

残ってる部分は割込コントローラの設定(第5節)と割込ハンドラの作成(第6節)です。

割込コントローラ(PIC:Programable Interrupt Controllerについてのメモ書きをしておきます。
PICではないのね。:-)

・マスタPICのIRQ2はスレーブPICにつながっている→マスタ/スレーブ併せて15個の割込(IRQ2以外のIRQ0~IRQ15)が扱える。
・PIC内には下記の8ビットレジスタがある。
 - IMR(Interrupt Mask Register):割込をマスクするためのレジスタ(1の立ってるビットに対応する割込は禁止される)
 - ICW(Initial Control Word):初期化ワード(ICW1~ICW4)
・マスタPICのICW3中、スレーブPICの接続されているビット位置に1を立てる(2進数で00000100 = 1 << 2 )。
・スレーブPICのICW3にはマスタPICのIRQ番号(2)を入れる。

と、ここまでは決めごとで、自由度があるのは ICW2 の設定だけだそうな。ICW2 には割込番号のマッピング(IRQ0~IRQ15をINT??~INT??で受けるか?)を設定します。hariboteOS ではIRQ0~IRQ15INT 0x20~INT 0x2fで受けるようにマッピングしています。
マウスはIRQ12(INT 0x2c)、キーボードはIRQ1(INT 0x21)

で、設定が終わると割込ハンドラの作成をしています。割込からの復帰には IRETD命令を使う必要があるそうな。割込ハンドラのアセンブラ部分では全レジスタをPUSHしてからCのハンドラを呼んで、その後、全レジスタをPOPしてからIRETD、っちゅう流れです。この部分で仕入れた新ネタに、

Cで書いた関数を呼ぶ(CALL)ときにはDSとESとSSは同じセグメントを指示しなければならない(p.134)

っちゅうことがあります。また、pp.132-133でFIFOとスタックの説明が分かりやすくされてます。

あと、GDTとIDTの初期化(init_gdtidt())に割込ハンドラを割込テーブル(IDT)に登録する部分(set_gatedesc())を追加してます。

っちゅうことで、ソースをちょこちょこ修正して make run してみると確かにキーボード割込ハンドラは動作したけど、マウス割込は受け付けてない(ハンドラが動作してない?)わん。何でかは第7日目で明らかになるようやけど、今日はここまで。(^^;
--- 26;00 ---








お気に入りの記事を「いいね!」で応援しよう

Last updated  December 10, 2011 12:26:49 AM
コメント(0) | コメントを書く
[作りモノ] カテゴリの最新記事


PR

Keyword Search

▼キーワード検索

Free Space

Category

Favorite Blog

まだ登録されていません

Comments

wiskij@ Re:CH341AでVersaPro VX-UのBIOSチップ内容を読み取った(08/04) こんばんは。NECのGL245UFAS半ジャンクを…
sorriman@ Re:HP ProDesk 400 G4 DM をセットアップした(01/13) 情報ありがとうございます。 また自宅を2…
Wi-Fiアンテナは多分入ってると思います。@ Re:HP ProDesk 400 G4 DM をセットアップした(01/13) 始めまして。 この機種はまだお使いでしょ…
通りすがりの者です@ Re:LIFEBOOK U939/B に WANカードを載せた(01/21) 私のLIFEBOOKではnanoSIMを装着後に再起動…
aki@ Re:秋葉原に寄った(01/14) この様な書込大変失礼致します。日本も当…

Freepage List


© Rakuten Group, Inc.
X