All pastes #735725 Raw Edit

irq handling asm

public text v1 · immutable
·published 2007-10-13 21:54 UTC
rendered paste body
#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