diff --git a/student-distrib/idt.c b/student-distrib/idt.c index 18ccd2152cd53436ee5b8e4f4e08673822dde204..a6de4c286747dfc61a9735fe1142ea9c5604d604 100644 --- a/student-distrib/idt.c +++ b/student-distrib/idt.c @@ -143,6 +143,9 @@ void initialize_IDT(void) SET_IDT_ENTRY(idt[18], MACHINE_CHECK); SET_IDT_ENTRY(idt[19], FLOATING_POINT); + // insert PIT handler into IDT table + SET_IDT_ENTRY(idt[PIT_INDEX], PIT_INTERRUPT); + // insert KB handler into IDT table SET_IDT_ENTRY(idt[KEYBOARD_INDEX], KB_INTERRUPT); diff --git a/student-distrib/idt.h b/student-distrib/idt.h index e582e5faea62fdfe4d5bb1d90199b66414903992..5f81855b77f48ebb77ac41db77055fcc5e44b85c 100644 --- a/student-distrib/idt.h +++ b/student-distrib/idt.h @@ -5,6 +5,7 @@ #include "lib.h" #include "syscall.h" +#define PIT_INDEX 0x20 #define KEYBOARD_INDEX 0x21 #define RTC_INDEX 0x28 #define SYS_CALL_INDEX 0x80 @@ -37,5 +38,6 @@ void MACHINE_CHECK(void); void FLOATING_POINT(void); void RTC_INTERRUPT(void); void KB_INTERRUPT(void); +void PIT_INTERRUPT(void); #endif diff --git a/student-distrib/idt_asm.S b/student-distrib/idt_asm.S index 08bf40d7fa6271b22abbfd5699a4e8e602aebf5b..3edc99756ce1d06ec139165ed0738b5cbd19cbee 100644 --- a/student-distrib/idt_asm.S +++ b/student-distrib/idt_asm.S @@ -28,6 +28,7 @@ .globl FLOATING_POINT .globl RTC_INTERRUPT .globl KB_INTERRUPT +.globl PIT_INTERRUPT # - Each function acts as a bridge sending # the interrupt value @@ -173,3 +174,15 @@ KB_INTERRUPT: STI IRET + +PIT_INTERRUPT: + + CLI + + PUSHAL + CALL pit_handler + POPAL + + STI + + IRET \ No newline at end of file diff --git a/student-distrib/kernel.c b/student-distrib/kernel.c index 20cec021c17ab39570eeb9acfab64193cf3dcdd1..61d88d57abb67a649770d1cc47486efa50400656 100644 --- a/student-distrib/kernel.c +++ b/student-distrib/kernel.c @@ -164,6 +164,10 @@ void entry(unsigned long magic, unsigned long addr) { rtc_init(); printf("RTC Initialized\n"); + printf("Initializing PIT\n"); + i8253_init(); + printf("PIT Initialized\n"); + printf("Initializing paging\n"); paging_initi(); printf("Paging Initialized\n"); diff --git a/student-distrib/pit.c b/student-distrib/pit.c index 7ac463ad795c32a0885f9db2fd31f1221a3be639..624a5d9b165385366e0262f981f1572380b4fc17 100644 --- a/student-distrib/pit.c +++ b/student-distrib/pit.c @@ -18,6 +18,7 @@ void i8253_init(void){ void pit_handler(){ + //printf("[PIT] Interrupt Test"); send_eoi(0); //todo diff --git a/student-distrib/rtc.c b/student-distrib/rtc.c index dcb4099f5ce317d29df8124c3cbdeb1c1286f002..e1082c48ceeed2c6110c9eb0534f4203acd04164 100644 --- a/student-distrib/rtc.c +++ b/student-distrib/rtc.c @@ -75,13 +75,7 @@ int32_t rtc_read(int32_t fd, void* buf, int32_t nbytes) /* Wait until interrupt handler clears flag */ while (interrupt_flag); - - /* Reset flag, necessary? */ - //interrupt_flag = 1; - - /* Testing */ - //printf("Fu"); - + return 0; }