4 void Initialize_ProgrammableInterruptController(void)
\r
7 IRR
\81F
\83C
\83\93\83^
\83\89\83v
\83g
\83\8a\83N
\83G
\83X
\83g
\83\8c\83W
\83X
\83^
\r
8 .IRQ
\83s
\83\93\82Ì
\8fó
\91Ô
\82ð
\95\
\82·
\81B
\83|
\81[
\83g
\82ð
\93Ç
\82ñ
\82¾
\82Æ
\82«
\82É
\81AIRR
\82É
\82È
\82é
\82©ISR
\82É
\82È
\82é
\82©
\82Í
\81AOCW3
\82Å
\91I
\91ð
\82·
\82é
\81B
\r
9 .1
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\83r
\83b
\83g
\82Í
\81A
\8c»
\8dÝ
\97v
\8b\81\82ª
\97\88\82Ä
\82¢
\82é
\81i
\82à
\82µ
\82
\82Í
\8f\88\97\9d\92\86\82Ì
\81j
\8a\84\82è
\8d\9e\82Ý
\81B
\r
10 ISR
\81F
\83C
\83\93\83T
\81[
\83r
\83X
\83\8c\83W
\83X
\83^
\r
11 .
\8c»
\8dÝ
\8f\88\97\9d\92\86\82Ì
\8a\84\82è
\8d\9e\82Ý
\82ª
\82Ç
\82ê
\82Å
\82 \82é
\82©
\82ð
\8e¦
\82·
\81B
\83|
\81[
\83g
\82ð
\93Ç
\82ñ
\82¾
\82Æ
\82«
\82É
\81AIRR
\82É
\82È
\82é
\82©ISR
\82É
\82È
\82é
\82©
\82Í
\81AOCW3
\82Å
\91I
\91ð
\82·
\82é
\81B
\r
12 .1
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\83r
\83b
\83g
\82Í
\81A
\8c»
\8dÝ
\8f\88\97\9d\92\86\82Ì
\8a\84\82è
\8d\9e\82Ý
\81B
\8f\88\97\9d\92\86\82Æ
\82¢
\82¤
\82Ì
\82Í
\81ACPU
\82É
\91Î
\82µ
\82ÄINT
\96½
\97ß
\82ð
\94
\8ds
\82µ
\82½
\82ª
\81AEOI
\81i
\8a\84\82è
\8d\9e\82Ý
\8fI
\97¹
\96½
\97ß
\81j
\82ð
\8eó
\82¯
\8eæ
\82Á
\82Ä
\82¢
\82È
\82¢
\8a\84\82è
\8d\9e\82Ý
\81B
\r
13 IMR
\81F
\83C
\83\93\83^
\83\89\83v
\83g
\83}
\83X
\83N
\83\8c\83W
\83X
\83^
\r
14 .
\82±
\82ê
\82ª1
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\8a\84\82è
\8d\9e\82Ý
\82Í
\81AIRR
\82ª1
\82É
\82È
\82Á
\82Ä
\82¢
\82Ä
\82à
\81A
\94½
\89\9e\82µ
\82È
\82¢
\81B
\r
17 IO_Out8(PIC0_IMR, 0xff); /*
\8a\84\82è
\8d\9e\82Ý
\91S
\95\94\96³
\8e\8b\81i
\83}
\83X
\83^
\81j*/
\r
18 IO_Out8(PIC1_IMR, 0xff); /*
\8a\84\82è
\8d\9e\82Ý
\91S
\95\94\96³
\8e\8b\81i
\83X
\83\8c\81[
\83u
\81j*/
\r
20 IO_Out8(PIC0_ICW1, 0x11); /*
\83G
\83b
\83W
\83g
\83\8a\83K
\83\82\81[
\83h
\82É
\90Ý
\92è
\81i
\83}
\83X
\83^
\81j*/
\r
21 IO_Out8(PIC0_ICW2, 0x20); /*
\8a\84\82è
\8d\9e\82Ý
\94Ô
\8d\86\82ð
\81A20~27
\82É
\90Ý
\92è
\81B
\81i
\83}
\83X
\83^
\81j*/
\r
22 IO_Out8(PIC0_ICW3, 1 << 2); /*00000100
\82Â
\82Ü
\82è
\81A
\83X
\83\8c\81[
\83u
\82ÍIRQ2
\82É
\82Â
\82È
\82ª
\82Á
\82Ä
\82Ü
\82·
\82æ
\82Æ
\82¢
\82¤
\82±
\82Æ
\81B*/
\r
23 IO_Out8(PIC0_ICW4, 0x01); /*
\83m
\83\93\83o
\83b
\83t
\83@
\83\82\81[
\83h
\81i
\83}
\83X
\83^
\81j*/
\r
25 IO_Out8(PIC1_ICW1, 0x11); /*
\83G
\83b
\83W
\83g
\83\8a\83K
\83\82\81[
\83h
\82É
\90Ý
\92è
\81i
\83X
\83\8c\81[
\83u
\81j*/
\r
26 IO_Out8(PIC1_ICW2, 0x28); /*
\8a\84\82è
\8d\9e\82Ý
\94Ô
\8d\86\82ð
\81A28~2f
\82É
\90Ý
\92è
\81B
\81i
\83X
\83\8c\81[
\83u
\81j*/
\r
27 IO_Out8(PIC1_ICW3, 2); /*
\8e©
\95ª
\82Í
\83}
\83X
\83^
\82ÌIRQ2
\94Ô
\82É
\82Â
\82È
\82ª
\82Á
\82Ä
\82Ü
\82·
\82Æ
\82¢
\82¤
\82±
\82Æ
\81B*/
\r
28 IO_Out8(PIC1_ICW4, 0x01); /*
\83m
\83\93\83o
\83b
\83t
\83@
\83\82\81[
\83h
\81i
\83X
\83\8c\81[
\83u
\81j*/
\r
30 IO_Out8(PIC0_IMR, 0xff); /*
\8a\84\82è
\8d\9e\82Ý
\91S
\95\94\96³
\8e\8b\81i
\83}
\83X
\83^
\81j*/
\r
31 IO_Out8(PIC1_IMR, 0xff); /*
\8a\84\82è
\8d\9e\82Ý
\91S
\95\94\96³
\8e\8b\81i
\83X
\83\8c\81[
\83u
\81j*/
\r
33 System_GateDescriptor_Set(0x27, (uint)asm_InterruptHandler27, 0x02, AR_INTGATE32); /*IRQ-07
\91Î
\8dô*/
\r
34 ProgrammableInterruptController_InterruptMask_Clear(0x07);
\r
39 void ProgrammableInterruptController_InterruptMask_Clear(uint irq)
\r
49 if(irq < 8){ /*For Master*/
\r
50 IO_Out8(PIC0_IMR, IO_In8(PIC0_IMR) & ~(mask << irq));
\r
51 } else{ /*For Slave*/
\r
53 IO_Out8(PIC1_IMR, IO_In8(PIC1_IMR) & ~(mask << irq));
\r
54 IO_Out8(PIC0_IMR, IO_In8(PIC0_IMR) & ~(mask << 2));
\r
60 void ProgrammableInterruptController_InterruptRequest_Complete(uint irq)
\r
66 if(irq < 8){ /*For Master*/
\r
67 IO_Out8(PIC0_OCW2, 0x60 + irq);
\r
68 } else{ /*For Slave (and Master IRQ2)*/
\r
70 IO_Out8(PIC1_OCW2, 0x60 + irq);
\r
71 IO_Out8(PIC0_OCW2, 0x60 + 0x02);
\r
76 void InterruptHandler27(uint *esp)
\r
78 ProgrammableInterruptController_InterruptRequest_Complete(0x07);
\r