www.pudn.com > LFYOS.zip > int.s


.global setup_idt,fatal_interruption_routine 
.global disable_interruption,restore_interruption 
disable_interruption: 
	pushfl 
	popl %eax 
	cli 
	ret 
restore_interruption: 
	movl 0x04(%esp),%eax 
	pushl %eax 
	popfl 
	ret 
idle_interruption_routine: 
	iret 
fatal_interruption_routine: 
	movl $(0x03),%eax 
	movl $(0x00),%ebx 
	int $(0x80) 
	iret 
 
setup_idt:			/*this function setup idt table */ 
	lea idt_table,%edi 
	xorl %ecx,%ecx 
1: 
	andl $3,(%edi) 
	shll $13,(%edi) 
	movl 4(%edi),%edx 
	movl $((0x10)<< 16),%eax 
	movw %dx,%ax		/* selector = 0x0010 = cs */ 
	andl $0xffff0000,%edx 
	orl  $0x00008E00,%edx	/* interrupt gate - dpl=0, present */ 
	orl  (%edi),%edx 
 
	movl %eax,(%edi) 
	movl %edx,4(%edi) 
	addl $8,%edi 
	incl %ecx 
 
	lea idt_table_end,%eax 
	cmpl %edi,%eax 
	jne 1b 
 
	lea idle_interruption_routine,%edx 
	movl $((0x10)<< 16),%eax 
	movw %dx,%ax		/* selector = 0x0010 = cs */ 
	andl $0xffff0000,%edx 
	orl  $0x00008E00,%edx	/* interrupt gate - dpl=0, present */ 
 
1: 
	cmpl $256,%ecx 
	je 2f 
	movl %eax,(%edi) 
	movl %edx,4(%edi) 
	addl $8,%edi 
	incl %ecx 
	jmp 1b 
2: 
 
	lidt idt_descr 
 
	ret 
.align 16 
	.word 0 
idt_descr: 
	.word 256*8-1 
	.long idt_table 
.align 16 
 
idt_table: 
/* 	first value is interruption gate dpl(only 0-3) 
	second value is interruption  process function   
	setup_idt function turn all items in this table  
	into interruption gates  
*/ 
	.long 0,fatal_interruption_routine	/*00:div*/ 
	.long 0,fatal_interruption_routine	/*01:debug*/ 
	.long 0,fatal_interruption_routine	/*02:reserved */ 
	.long 0,fatal_interruption_routine	/*03:break point*/ 
	.long 0,fatal_interruption_routine	/*04:overflow */ 
	.long 0,fatal_interruption_routine	/*05:bound*/ 
	.long 0,fatal_interruption_routine	/*06:invalid operand*/ 
	.long 0,fatal_interruption_routine	/*07:can not use coprocessor */ 
	.long 0,fatal_interruption_routine	/*08:exception occur again*/ 
	.long 0,fatal_interruption_routine	/*09:coprocessor segment error*/ 
	.long 0,fatal_interruption_routine	/*0a:invalid tss*/ 
	.long 0,fatal_interruption_routine	/*0b:segment do not exist*/ 
	.long 0,fatal_interruption_routine	/*0c:stack fault*/ 
	.long 0,fatal_interruption_routine	/*0d:general protection*/ 
	.long 0,page_fault_interruption		/*0e:page fault protection*/ 
	.long 0,fatal_interruption_routine	/*0f:reserved*/ 
 
	.long 0,fatal_interruption_routine	/*10:coprocessor exception*/ 
	.long 0,fatal_interruption_routine	/*11:align check */ 
	.long 0,fatal_interruption_routine	/*12:*/ 
	.long 0,fatal_interruption_routine	/*13:*/ 
	.long 0,fatal_interruption_routine	/*14:*/ 
	.long 0,fatal_interruption_routine	/*15:*/ 
	.long 0,fatal_interruption_routine	/*16:*/ 
	.long 0,fatal_interruption_routine	/*17:*/ 
	.long 0,fatal_interruption_routine	/*18:*/ 
	.long 0,fatal_interruption_routine	/*19:*/ 
	.long 0,fatal_interruption_routine	/*1a:*/ 
	.long 0,fatal_interruption_routine	/*1b:*/ 
	.long 0,fatal_interruption_routine	/*1c:*/ 
	.long 0,fatal_interruption_routine	/*1d:*/ 
	.long 0,fatal_interruption_routine	/*1e:*/ 
	.long 0,fatal_interruption_routine	/*1f:*/ 
 
	.long 0,timer_interruption_routine	/*20:*/ 
	.long 0,fatal_interruption_routine	/*21:*/ 
	.long 0,fatal_interruption_routine	/*22:*/ 
	.long 0,fatal_interruption_routine	/*23:*/ 
	.long 0,fatal_interruption_routine	/*24:*/ 
	.long 0,fatal_interruption_routine	/*25:*/ 
	.long 0,fatal_interruption_routine	/*26:*/ 
	.long 0, idle_interruption_routine	/*27:*/ 
	.long 0,fatal_interruption_routine	/*28:*/ 
	.long 0,fatal_interruption_routine	/*29:*/ 
	.long 0,fatal_interruption_routine	/*2a:*/ 
	.long 0,fatal_interruption_routine	/*2b:*/ 
	.long 0,fatal_interruption_routine	/*2c:*/ 
	.long 0,fatal_interruption_routine	/*2d:*/ 
	.long 0,fatal_interruption_routine	/*2e:*/ 
	.long 0,fatal_interruption_routine	/*2f:*/ 
 
	.long 0,fatal_interruption_routine	/*30:*/ 
	.long 0,fatal_interruption_routine	/*31:*/ 
	.long 0,fatal_interruption_routine	/*32:*/ 
	.long 0,fatal_interruption_routine	/*33:*/ 
	.long 0,fatal_interruption_routine	/*34:*/ 
	.long 0,fatal_interruption_routine	/*35:*/ 
	.long 0,fatal_interruption_routine	/*36:*/ 
	.long 0,fatal_interruption_routine	/*37:*/ 
	.long 0,fatal_interruption_routine	/*38:*/ 
	.long 0,fatal_interruption_routine	/*39:*/ 
	.long 0,fatal_interruption_routine	/*3a:*/ 
	.long 0,fatal_interruption_routine	/*3b:*/ 
	.long 0,fatal_interruption_routine	/*3c:*/ 
	.long 0,fatal_interruption_routine	/*3d:*/ 
	.long 0,fatal_interruption_routine	/*3e:*/ 
	.long 0,fatal_interruption_routine	/*3f:*/ 
 
	.long 0,fatal_interruption_routine	/*40:*/ 
	.long 0,fatal_interruption_routine	/*41:*/ 
	.long 0,fatal_interruption_routine	/*42:*/ 
	.long 0,fatal_interruption_routine	/*43:*/ 
	.long 0,fatal_interruption_routine	/*44:*/ 
	.long 0,fatal_interruption_routine	/*45:*/ 
	.long 0,fatal_interruption_routine	/*46:*/ 
	.long 0,fatal_interruption_routine	/*47:*/ 
	.long 0,fatal_interruption_routine	/*48:*/ 
	.long 0,fatal_interruption_routine	/*49:*/ 
	.long 0,fatal_interruption_routine	/*4a:*/ 
	.long 0,fatal_interruption_routine	/*4b:*/ 
	.long 0,fatal_interruption_routine	/*4c:*/ 
	.long 0,fatal_interruption_routine	/*4d:*/ 
	.long 0,fatal_interruption_routine	/*4e:*/ 
	.long 0,fatal_interruption_routine	/*4f:*/ 
 
	.long 0,fatal_interruption_routine	/*50:*/ 
	.long 0,fatal_interruption_routine	/*51:*/ 
	.long 0,fatal_interruption_routine	/*52:*/ 
	.long 0,fatal_interruption_routine	/*53:*/ 
	.long 0,fatal_interruption_routine	/*54:*/ 
	.long 0,fatal_interruption_routine	/*55:*/ 
	.long 0,fatal_interruption_routine	/*56:*/ 
	.long 0,fatal_interruption_routine	/*57:*/ 
	.long 0,fatal_interruption_routine	/*58:*/ 
	.long 0,fatal_interruption_routine	/*59:*/ 
	.long 0,fatal_interruption_routine	/*5a:*/ 
	.long 0,fatal_interruption_routine	/*5b:*/ 
	.long 0,fatal_interruption_routine	/*5c:*/ 
	.long 0,fatal_interruption_routine	/*5d:*/ 
	.long 0,fatal_interruption_routine	/*5e:*/ 
	.long 0,fatal_interruption_routine	/*5f:*/ 
 
	.long 0,fatal_interruption_routine	/*60:*/ 
	.long 0,fatal_interruption_routine	/*61:*/ 
	.long 0,fatal_interruption_routine	/*62:*/ 
	.long 0,fatal_interruption_routine	/*63:*/ 
	.long 0,fatal_interruption_routine	/*64:*/ 
	.long 0,fatal_interruption_routine	/*65:*/ 
	.long 0,fatal_interruption_routine	/*66:*/ 
	.long 0,fatal_interruption_routine	/*67:*/ 
	.long 0,fatal_interruption_routine	/*68:*/ 
	.long 0,fatal_interruption_routine	/*69:*/ 
	.long 0,fatal_interruption_routine	/*6a:*/ 
	.long 0,fatal_interruption_routine	/*6b:*/ 
	.long 0,fatal_interruption_routine	/*6c:*/ 
	.long 0,fatal_interruption_routine	/*6d:*/ 
	.long 0,fatal_interruption_routine	/*6e:*/ 
	.long 0,fatal_interruption_routine	/*6f:*/ 
 
	.long 0,fatal_interruption_routine	/*70:*/ 
	.long 0,fatal_interruption_routine	/*71:*/ 
	.long 0,fatal_interruption_routine	/*72:*/ 
	.long 0,fatal_interruption_routine	/*73:*/ 
	.long 0,fatal_interruption_routine	/*74:*/ 
	.long 0,fatal_interruption_routine	/*75:*/ 
	.long 0,fatal_interruption_routine	/*76:*/ 
	.long 0,fatal_interruption_routine	/*77:*/ 
	.long 0,fatal_interruption_routine	/*78:*/ 
	.long 0,fatal_interruption_routine	/*79:*/ 
	.long 0,fatal_interruption_routine	/*7a:*/ 
	.long 0,fatal_interruption_routine	/*7b:*/ 
	.long 0,fatal_interruption_routine	/*7c:*/ 
	.long 0,fatal_interruption_routine	/*7d:*/ 
	.long 0,fatal_interruption_routine	/*7e:*/ 
	.long 0,fatal_interruption_routine	/*7f:*/ 
 
	.long 3,system_call_interruption_routine	/*80: */ 
	.long 3,memory_call_interruption_routine	/*81: */ 
	.long 3,input_key_board_routine		/*82: */ 
	.long 3,input_current_time_routine	/*83: */ 
	.long 3,kernel_print_deal_routine	/*84: */ 
 
idt_table_end: 
	.org idt_table+256*8-1 
	.long 0