--- /dev/null
+\r
+#include "core.h"\r
+\r
+void Initialise_ProgrammableInterruptController(void)\r
+{\r
+ /*\r
+ IRR\81F\83C\83\93\83^\83\89\83v\83g\83\8a\83N\83G\83X\83g\83\8c\83W\83X\83^ \r
+ .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
+ .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
+ ISR\81F\83C\83\93\83T\81[\83r\83X\83\8c\83W\83X\83^ \r
+ .\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
+ .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
+ IMR\81F\83C\83\93\83^\83\89\83v\83g\83}\83X\83N\83\8c\83W\83X\83^ \r
+ .\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
+ */\r
+\r
+ IO_Out8(PIC0_IMR, 0xff); /*\8a\84\82è\8d\9e\82Ý\91S\95\94\96³\8e\8b\81i\83}\83X\83^\81j*/\r
+ 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
+\r
+ 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
+ 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
+ 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
+ IO_Out8(PIC0_ICW4, 0x01); /*\83m\83\93\83o\83b\83t\83@\83\82\81[\83h\81i\83}\83X\83^\81j*/\r
+\r
+ 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
+ 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
+ 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
+ IO_Out8(PIC1_ICW4, 0x01); /*\83m\83\93\83o\83b\83t\83@\83\82\81[\83h\81i\83X\83\8c\81[\83u\81j*/\r
+\r
+ IO_Out8(PIC0_IMR, 0xfb); /*11111011\82Â\82Ü\82è\81AIRQ2\94Ô\81i\83X\83\8c\81[\83u\81j\82¾\82¯\8b\96\89Â\81B\82 \82Æ\82Í\96³\8e\8b\81B\81i\83}\83X\83^\81j*/ \r
+ IO_Out8(PIC1_IMR, 0xff); /*11111111\82Â\82Ü\82è\81A\91S\82Ä\96³\8e\8b*/\r
+\r
+ System_GateDescriptor_Set(0x27, (uint)asm_InterruptHandler27, 0x02, AR_INTGATE32); /*IRQ-07\91Î\8dô*/\r
+\r
+ return;\r
+}\r
+\r
+void InterruptHandler27(int *esp)\r
+{\r
+ IO_Out8(PIC0_OCW2, 0x67); /* IRQ-07\8eó\95t\8a®\97¹\82ðPIC\82É\92Ê\92m \81B0x60+\94Ô\8d\86\81B*/\r
+ return;\r
+}\r