Bubble, bubble, toil and cuddle !!!

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~IRQ15 INT 0x20~INT 0x2f で受けるようにマッピングしています。
マウスはIRQ12(INT 0x2c)、キーボードはIRQ1(INT 0x21)

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

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



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

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








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

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


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Keyword Search

▼キーワード検索

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) この様な書込大変失礼致します。日本も当…

© Rakuten Group, Inc.
X
Design a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: