diff --git a/src/kernel/arch/i386/boot.s b/src/kernel/arch/i386/boot.s index 17432e4..2de2f8d 100644 --- a/src/kernel/arch/i386/boot.s +++ b/src/kernel/arch/i386/boot.s @@ -273,116 +273,140 @@ irs31: irq0: cli push $0 - push $32 - jmp irs_common + push $0 + jmp irq_common .globl irq1 irq1: cli push $0 - push $33 - jmp irs_common + push $1 + jmp irq_common .globl irq2 irq2: cli push $0 - push $34 - jmp irs_common + push $2 + jmp irq_common .globl irq3 irq3: cli push $0 - push $35 - jmp irs_common + push $3 + jmp irq_common .globl irq4 irq4: cli push $0 - push $36 - jmp irs_common + push $4 + jmp irq_common .globl irq5 irq5: cli push $0 - push $37 - jmp irs_common + push $5 + jmp irq_common .globl irq6 irq6: cli push $0 - push $38 - jmp irs_common + push $6 + jmp irq_common .globl irq7 irq7: cli push $0 - push $39 - jmp irs_common + push $7 + jmp irq_common .globl irq8 irq8: cli push $0 - push $40 - jmp irs_common + push $8 + jmp irq_common .globl irq9 irq9: cli push $0 - push $41 - jmp irs_common + push $9 + jmp irq_common .globl irq10 irq10: cli push $0 - push $42 - jmp irs_common + push $10 + jmp irq_common .globl irq11 irq11: cli push $0 - push $43 - jmp irs_common + push $11 + jmp irq_common .globl irq12 irq12: cli push $0 - push $44 - jmp irs_common + push $12 + jmp irq_common .globl irq13 irq13: cli push $0 - push $45 - jmp irs_common + push $13 + jmp irq_common .globl irq14 irq14: cli push $0 - push $46 - jmp irs_common + push $14 + jmp irq_common .globl irq15 irq15: cli push $0 - push $47 - jmp irs_common + push $15 + jmp irq_common +irq_common: + pusha + mov %ds, %ax + push %eax + + mov $0x10, %ax + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + + call irq_handler + + pop %eax + + mov %ax, %ds + mov %ax, %es + mov %ax, %fs + mov %ax, %gs + + popa + add $8, %esp # cleans push error and irs code + sti + iret # pops 5 things at once: CS, EIP, EFLAGS, SS, and ESP irs_common: