2 * PC/HW routine collection v1.3 for DOS/DJGPP
4 * Copyright (C) 2002 - Daniel Borca
5 * Email : dborca@yahoo.com
6 * Web : http://www.geocities.com/dborca
14 #define IRQ_STACK_SIZE 16384
16 #define IRQ_WRAPPER_LEN (__irq_wrapper_1-__irq_wrapper_0)
17 #define IRQ_OLD (__irq_old_0-__irq_wrapper_0)
18 #define IRQ_HOOK (__irq_hook_0-__irq_wrapper_0)
19 #define IRQ_STACK (__irq_stack_0-__irq_wrapper_0)
26 movl %ss:8(%ebp), %ebx
38 imull $IRQ_WRAPPER_LEN, %edi
39 addl $__irq_wrapper_0, %edi
50 .global _pc_install_irq
59 cmpl $0, IRQ_HOOK(%edi)
62 pushl $IRQ_WRAPPER_LEN
64 call __go32_dpmi_lock_code
75 movl %eax, IRQ_STACK(%edi)
77 movl ___djgpp_ds_alias, %eax
78 movl %eax, IRQ_STACK+4(%edi)
80 movl %ss:12(%ebp), %eax
81 movl %eax, IRQ_HOOK(%edi)
85 movl %edx, IRQ_OLD(%edi)
86 movw %cx, IRQ_OLD+4(%edi)
100 .global _pc_remove_irq
109 cmpl $0, IRQ_HOOK(%edi)
112 movl $0, IRQ_HOOK(%edi)
115 movl IRQ_OLD(%edi), %edx
116 movl IRQ_OLD+4(%edi), %ecx
119 movl IRQ_STACK(%edi), %eax
120 subl $IRQ_STACK_SIZE, %eax
127 #define WRAPPER(x) ; \
129 __irq_wrapper_##x: ; \
137 lss %cs:__irq_stack_##x, %esp ; \
142 movl ___djgpp_dos_sel, %fs ; \
145 call *__irq_hook_##x ; \
154 jz __irq_ignore_##x ; \
155 __irq_bypass_##x: ; \
156 ljmp *%cs:__irq_old_##x ; \
157 __irq_ignore_##x: ; \