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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
.extern isr_handler
isr_stub:
pusha
push %ds
push %es
push %fs
push %gs
mov $0x10, %ax # Load the Kernel Data Segment descriptor!
mov %ax, %ds
mov %ax, %es
mov %ax, %fs
mov %ax, %gs
mov %esp, %eax # Push us the stack
push %eax
call isr_handler
pop %eax
pop %gs
pop %fs
pop %es
pop %ds
popa
add $8, %esp
iret
# stub ISR's:
.global _isr0
.global _isr1
.global _isr2
.global _isr3
.global _isr4
.global _isr5
.global _isr6
.global _isr7
.global _isr8
.global _isr9
.global _isr10
.global _isr11
.global _isr12
.global _isr13
.global _isr14
.global _isr15
.global _isr16
.global _isr17
.global _isr18
.global _isr19
.global _isr20
.global _isr21
.global _isr22
.global _isr23
.global _isr24
.global _isr25
.global _isr26
.global _isr27
.global _isr28
.global _isr29
.global _isr30
.global _isr31
# Interrupts 8, 10, 11, 12, 13, and 14 push error codes onto the stack
_isr0:
cli
pushl $0
pushl $0
jmp isr_stub
_isr1:
cli
pushl $0
pushl $1
jmp isr_stub
_isr2:
cli
pushl $0
pushl $2
jmp isr_stub
_isr3:
cli
pushl $0
pushl $3
jmp isr_stub
_isr4:
cli
pushl $0
pushl $4
jmp isr_stub
_isr5:
cli
pushl $0
pushl $5
jmp isr_stub
_isr6:
cli
pushl $0
pushl $6
jmp isr_stub
_isr7:
cli
pushl $0
pushl $7
jmp isr_stub
_isr8:
cli
pushl $8
jmp isr_stub
_isr9:
cli
pushl $0
pushl $9
jmp isr_stub
_isr10:
cli
pushl $10
jmp isr_stub
_isr11:
cli
pushl $11
jmp isr_stub
_isr12:
cli
pushl $12
jmp isr_stub
_isr13:
cli
pushl $13
jmp isr_stub
_isr14:
cli
pushl $14
jmp isr_stub
_isr15:
cli
pushl $0
pushl $15
jmp isr_stub
_isr16:
cli
pushl $0
pushl $16
jmp isr_stub
_isr17:
cli
pushl $0
pushl $17
jmp isr_stub
_isr18:
cli
pushl $0
pushl $18
jmp isr_stub
_isr19:
cli
pushl $0
pushl $19
jmp isr_stub
_isr20:
cli
pushl $0
pushl $20
jmp isr_stub
_isr21:
cli
pushl $0
pushl $21
jmp isr_stub
_isr22:
cli
pushl $0
pushl $22
jmp isr_stub
_isr23:
cli
pushl $0
pushl $23
jmp isr_stub
_isr24:
cli
pushl $0
pushl $24
jmp isr_stub
_isr25:
cli
pushl $0
pushl $25
jmp isr_stub
_isr26:
cli
pushl $0
pushl $26
jmp isr_stub
_isr27:
cli
pushl $0
pushl $27
jmp isr_stub
_isr28:
cli
pushl $0
pushl $28
jmp isr_stub
_isr29:
cli
pushl $0
pushl $29
jmp isr_stub
_isr30:
cli
pushl $0
pushl $30
jmp isr_stub
_isr31:
cli
pushl $0
pushl $31
jmp isr_stub
|