Timer interrupt keeps on working well and I print every second "clock"
Here's my code... I wrote this according to what i found in the wiki about interrupt..
How i initiate IDT
Code: Select all
for (i = 0; i < IDTSIZE; i++)
create_idt_seg_desc(0x08, (u32) _asm_default_int, INTGATE, &IDT[i]);
create_idt_seg_desc(0x08, (u32) _asm_irq_0, INTGATE, &IDT[32]); /* timer*/
create_idt_seg_desc(0x08, (u32) _asm_irq_1, INTGATE, &IDT[33]); /* keyboard*/
How it's handle in asm
extern isr_default_int, isr_clock_int, isr_kbd_int
global _asm_default_int, _asm_irq_0, _asm_irq_1
Code: Select all
_asm_default_int:
call isr_default_int
mov al,0x20
out 0x20,al
iret
_asm_irq_0:
call isr_clock_int
mov al,0x20
out 0x20,al
iret
_asm_irq_1:
call isr_kbd_int
mov al,0x20
out 0x20,al
iret
and in C
Code: Select all
void isr_default_int(void)
{ print ("unknown interupt"); }
void isr_clock_int(void)
{ static int tic = 0;
tic++;
if (tic % 100 == 0) {
tic = 0;
rint("clock ");
}
}
void isr_kbd_int(void)
{ print("keyboard"); }
Could someone explain to me why the keyboard handler works only once ?
Thank you.