⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pc_irq.s

📁 mesa-6.5-minigui源码
💻 S
字号:
/* * PC/HW routine collection v1.3 for DOS/DJGPP * *  Copyright (C) 2002 - Daniel Borca *  Email : dborca@yahoo.com *  Web   : http://www.geocities.com/dborca */		.file	"pc_irq.S"		.text#define	IRQ_STACK_SIZE	16384#define	IRQ_WRAPPER_LEN	(__irq_wrapper_1-__irq_wrapper_0)#define	IRQ_OLD		(__irq_old_0-__irq_wrapper_0)#define	IRQ_HOOK	(__irq_hook_0-__irq_wrapper_0)#define	IRQ_STACK	(__irq_stack_0-__irq_wrapper_0)		.balign	4common:		movw	$0x0400, %ax		int	$0x31		movl	%ss:8(%ebp), %ebx		cmpl	$15, %ebx		jbe	0f	fail:		orl	$-1, %eax		popl	%edi		popl	%ebx		leave		ret	0:		movl	%ebx, %edi		imull	$IRQ_WRAPPER_LEN, %edi		addl	$__irq_wrapper_0, %edi		cmpb	$7, %bl		jbe	1f		movb	%dl, %dh		subb	$8, %dh	1:		addb	%dh, %bl		ret		.balign	4		.global	_pc_install_irq_pc_install_irq:		pushl	%ebp		movl	%esp, %ebp		pushl	%ebx		pushl	%edi		call	common		cmpl	$0, IRQ_HOOK(%edi)		jne	fail		pushl	$IRQ_WRAPPER_LEN		pushl	%edi		call	__go32_dpmi_lock_code		addl	$8, %esp		testl	%eax, %eax		jnz	fail		pushl	$IRQ_STACK_SIZE		call	_pc_malloc		popl	%edx		testl	%eax, %eax		jz	fail		addl	%edx, %eax		movl	%eax, IRQ_STACK(%edi)		movl	___djgpp_ds_alias, %eax		movl	%eax, IRQ_STACK+4(%edi)		movl	%ss:12(%ebp), %eax		movl	%eax, IRQ_HOOK(%edi)		movw	$0x0204, %ax		int	$0x31		movl	%edx, IRQ_OLD(%edi)		movw	%cx, IRQ_OLD+4(%edi)		movw	$0x0205, %ax		movl	%edi, %edx		movl	%cs, %ecx		int	$0x31	done:		xorl	%eax, %eax		popl	%edi		popl	%ebx		leave		ret		.balign	4		.global	_pc_remove_irq_pc_remove_irq:		pushl	%ebp		movl	%esp, %ebp		pushl	%ebx		pushl	%edi		call	common		cmpl	$0, IRQ_HOOK(%edi)		je	fail		movl	$0, IRQ_HOOK(%edi)		movw	$0x0205, %ax		movl	IRQ_OLD(%edi), %edx		movl	IRQ_OLD+4(%edi), %ecx		int	$0x31		movl	IRQ_STACK(%edi), %eax		subl	$IRQ_STACK_SIZE, %eax		pushl	%eax		call	_free		popl	%eax		jmp	done#define	WRAPPER(x)							   ; \		.balign	4						   ; \__irq_wrapper_##x:							   ; \		pushal							   ; \		pushl	%ds						   ; \		pushl	%es						   ; \		pushl	%fs						   ; \		pushl	%gs						   ; \		movl	%ss, %ebx					   ; \		movl	%esp, %esi					   ; \		lss	%cs:__irq_stack_##x, %esp			   ; \		pushl	%ss						   ; \		pushl	%ss						   ; \		popl	%es						   ; \		popl	%ds						   ; \		movl	___djgpp_dos_sel, %fs				   ; \		pushl	%fs						   ; \		popl	%gs						   ; \		call	*__irq_hook_##x					   ; \		movl	%ebx, %ss					   ; \		movl	%esi, %esp					   ; \		testl	%eax, %eax					   ; \		popl	%gs						   ; \		popl	%fs						   ; \		popl	%es						   ; \		popl	%ds						   ; \		popal							   ; \		jz	__irq_ignore_##x				   ; \__irq_bypass_##x:							   ; \		ljmp	*%cs:__irq_old_##x				   ; \__irq_ignore_##x:							   ; \		iret							   ; \		.balign	4						   ; \__irq_old_##x:								   ; \		.long	0, 0						   ; \__irq_hook_##x:								   ; \		.long	0						   ; \__irq_stack_##x:							   ; \		.long	0, 0		WRAPPER(0);		WRAPPER(1);		WRAPPER(2);		WRAPPER(3);		WRAPPER(4);		WRAPPER(5);		WRAPPER(6);		WRAPPER(7);		WRAPPER(8);		WRAPPER(9);		WRAPPER(10);		WRAPPER(11);		WRAPPER(12);		WRAPPER(13);		WRAPPER(14);		WRAPPER(15);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -