#define ASM 1 /* You observent readers may notice that this is very similar to the ISR * code. That's because it is. :-) */ /* Export to C-land. I hate repetition. I hate repetition. */ .global irq0 .global irq1 .global irq2 .global irq3 .global irq4 .global irq5 .global irq6 .global irq7 .global irq8 .global irq9 .global irq10 .global irq11 .global irq12 .global irq13 .global irq14 .global irq15 /* Handlers. */ irq0: cli push $0 push $32 jmp i8259_common irq1: cli push $0 push $33 jmp i8259_common irq2: cli push $0 push $34 jmp i8259_common irq3: cli push $0 push $35 jmp i8259_common irq4: cli push $0 push $36 jmp i8259_common irq5: cli push $0 push $37 jmp i8259_common irq6: cli push $0 push $38 jmp i8259_common irq7: cli push $0 push $39 jmp i8259_common irq8: cli push $0 push $40 jmp i8259_common irq9: cli push $0 push $41 jmp i8259_common irq10: cli push $0 push $42 jmp i8259_common irq11: cli push $0 push $43 jmp i8259_common irq12: cli push $0 push $44 jmp i8259_common irq13: cli push $0 push $45 jmp i8259_common irq14: cli push $0 push $46 jmp i8259_common irq15: cli push $0 push $47 jmp i8259_common /* Common IRQ code. Calls the interrupt handler */ i8259_common: pusha push %gs push %fs push %ds push %es mov $0x10, %ax mov %ax, %gs mov %ax, %fs mov %ax, %ds mov %ax, %es .extern handle_irq push %esp call handle_irq pop %esp pop %es pop %ds pop %fs pop %gs popa add $8, %esp iret