blob: 7ac805b65f45c27eeb56a11667ce6c88988d6d99 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
; MIT License, Copyright (c) 2021 Marvin Borner
%macro INTERRUPT_REGISTER 1
dd int%1
%endmacro
%macro INTERRUPT_ERR 1
int%1:
push %1
jmp interrupt_common
%endmacro
%macro INTERRUPT_NOERR 1
int%1:
push 0
push %1
jmp interrupt_common
%endmacro
extern interrupt_handler
interrupt_common:
cld
pushad
push ds
push es
push fs
push gs
mov ax, 0x20
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
push esp
call interrupt_handler
mov esp, eax
pop gs
pop fs
pop es
pop ds
popad
add esp, 8
iret
INTERRUPT_NOERR 0
INTERRUPT_NOERR 1
INTERRUPT_NOERR 2
INTERRUPT_NOERR 3
INTERRUPT_NOERR 4
INTERRUPT_NOERR 5
INTERRUPT_NOERR 6
INTERRUPT_NOERR 7
INTERRUPT_ERR 8
INTERRUPT_NOERR 9
INTERRUPT_ERR 10
INTERRUPT_ERR 11
INTERRUPT_ERR 12
INTERRUPT_ERR 13
INTERRUPT_ERR 14
INTERRUPT_NOERR 15
INTERRUPT_NOERR 16
INTERRUPT_ERR 17
INTERRUPT_NOERR 18
INTERRUPT_NOERR 19
INTERRUPT_NOERR 20
INTERRUPT_NOERR 21
INTERRUPT_NOERR 22
INTERRUPT_NOERR 23
INTERRUPT_NOERR 24
INTERRUPT_NOERR 25
INTERRUPT_NOERR 26
INTERRUPT_NOERR 27
INTERRUPT_NOERR 28
INTERRUPT_NOERR 29
INTERRUPT_ERR 30
INTERRUPT_NOERR 31
INTERRUPT_NOERR 32
INTERRUPT_NOERR 33
INTERRUPT_NOERR 34
INTERRUPT_NOERR 35
INTERRUPT_NOERR 36
INTERRUPT_NOERR 37
INTERRUPT_NOERR 38
INTERRUPT_NOERR 39
INTERRUPT_NOERR 40
INTERRUPT_NOERR 41
INTERRUPT_NOERR 42
INTERRUPT_NOERR 43
INTERRUPT_NOERR 44
INTERRUPT_NOERR 45
INTERRUPT_NOERR 46
INTERRUPT_NOERR 47
global interrupt_table
interrupt_table:
INTERRUPT_REGISTER 0
INTERRUPT_REGISTER 1
INTERRUPT_REGISTER 2
INTERRUPT_REGISTER 3
INTERRUPT_REGISTER 4
INTERRUPT_REGISTER 5
INTERRUPT_REGISTER 6
INTERRUPT_REGISTER 7
INTERRUPT_REGISTER 8
INTERRUPT_REGISTER 9
INTERRUPT_REGISTER 10
INTERRUPT_REGISTER 11
INTERRUPT_REGISTER 12
INTERRUPT_REGISTER 13
INTERRUPT_REGISTER 14
INTERRUPT_REGISTER 15
INTERRUPT_REGISTER 16
INTERRUPT_REGISTER 17
INTERRUPT_REGISTER 18
INTERRUPT_REGISTER 19
INTERRUPT_REGISTER 20
INTERRUPT_REGISTER 21
INTERRUPT_REGISTER 22
INTERRUPT_REGISTER 23
INTERRUPT_REGISTER 24
INTERRUPT_REGISTER 25
INTERRUPT_REGISTER 26
INTERRUPT_REGISTER 27
INTERRUPT_REGISTER 28
INTERRUPT_REGISTER 29
INTERRUPT_REGISTER 30
INTERRUPT_REGISTER 31
INTERRUPT_REGISTER 32
INTERRUPT_REGISTER 33
INTERRUPT_REGISTER 34
INTERRUPT_REGISTER 35
INTERRUPT_REGISTER 36
INTERRUPT_REGISTER 37
INTERRUPT_REGISTER 38
INTERRUPT_REGISTER 39
INTERRUPT_REGISTER 40
INTERRUPT_REGISTER 41
INTERRUPT_REGISTER 42
INTERRUPT_REGISTER 43
INTERRUPT_REGISTER 44
INTERRUPT_REGISTER 45
INTERRUPT_REGISTER 46
INTERRUPT_REGISTER 47
|