割り込み

2ch OS板より

irq と割り込みベクタ(int)の番号は別。
irq と割り込みベクタの対応は、割り込みコントローラに設定する。

Mona だと pic.cpp で設定していて irq0 を int 0x60 へ irq8 を int 0x28 へマップする。
irq0 を int 0x60 へマップすると順に irq1 は int 0x61 へ、irq 7 は int 0x67 へ。
irq8 を int 0x28 へマップすると順に irq9 は int 0x29 へ、irq f は int 0x2f へ。
int 0x00 〜 int 0x1f まではインテル予約なんで使っちゃ駄目。

/* master */
outp8(0x20, 0x11); /* ICW1 */
outp8(0x21, 0x60); /* ICW2 */ /* IRQ 0h = int 60h */
outp8(0x21, 0x04); /* ICW3 */
outp8(0x21, 0x01); /* ICW4 */

/* slave */
outp8(0xa0, 0x11); /* ICW1 */
outp8(0xa1, 0x28); /* ICW2 */ /* IRQ 8h = int 28h */
outp8(0xa1, 0x02); /* ICW3 */
outp8(0xa1, 0x01); /* ICW4 */