2 * PC/HW routine collection v1.0 for DOS/DJGPP
4 * Copyright (C) 2002 - Borca Daniel
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 %ss:12(%ebp), %eax
78 movl %eax, IRQ_HOOK(%edi)
82 movl %edx, IRQ_OLD(%edi)
83 movw %cx, IRQ_OLD+4(%edi)
97 .global _pc_remove_irq
106 cmpl $0, IRQ_HOOK(%edi)
109 movl $0, IRQ_HOOK(%edi)
112 movl IRQ_OLD(%edi), %edx
113 movl IRQ_OLD+4(%edi), %ecx
116 movl IRQ_STACK(%edi), %eax
117 subl $IRQ_STACK_SIZE, %eax
124 #define WRAPPER(x) ; \
126 __irq_wrapper_##x: ; \
134 movl %cs:___djgpp_ds_alias, %ss ; \
135 movl %cs:__irq_stack_##x, %esp ; \
140 movl ___djgpp_dos_sel, %fs ; \
143 call *__irq_hook_##x ; \
152 jz __irq_ignore_##x ; \
153 __irq_bypass_##x: ; \
154 ljmp *%cs:__irq_old_##x ; \
155 __irq_ignore_##x: ; \