projects
/
ld45_start_nothing
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
a96b164b1e320484265cd13cdd62bf123e189c1d
[ld45_start_nothing]
/
intr.inc
1
; vi:filetype=nasm ts=8 sts=8 sw=8:
2
3
PIC1_CMD equ 020h
4
PIC1_DATA equ 021h
5
PIC2_CMD equ 0a0h
6
PIC2_DATA equ 0a1h
7
OCW2_EOI equ 020h
8
OCW3_ISR equ 00bh
9
IRQ_OFFSET equ 32
10
%define IRQ_TO_INTR(x) ((x) + IRQ_OFFSET)
11
%define INTR_TO_IRQ(x) ((x) - IRQ_OFFSET)
12
13
14
%macro set_irq_vector 2
15
push dword %2
16
push dword IRQ_TO_INTR(%1)
17
call set_intr
18
add esp, 8
19
%endmacro
20
21
%macro mask_irq 1
22
%if %1 < 8
23
in al, PIC1_DATA
24
or al, (1 << %1)
25
out PIC1_DATA, al
26
%else
27
in al, PIC2_DATA
28
or al, (1 << (%1 - 8))
29
out PIC2_DATA, al
30
%endif
31
%endmacro
32
33
%macro unmask_irq 1
34
%if %1 < 8
35
in al, PIC1_DATA
36
and al, ~(1 << %1)
37
out PIC1_DATA, al
38
%else
39
in al, PIC2_DATA
40
and al, ~(1 << (%1 - 8))
41
out PIC2_DATA, al
42
%endif
43
%endmacro
44
45
%macro end_of_irq 1
46
mov al, OCW2_EOI
47
%if %1 >= 8
48
out PIC2_CMD, al
49
%endif
50
out PIC1_CMD, al
51
%endmacro
52
53
extern idt
54
55
%ifndef INTR_ASM_
56
extern init_intr
57
extern set_intr
58
%endif