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: ; \