blob: f6c056aa5ed39bfdb801eb284df07ca9d3327380 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
global int_clock_handler
[extern task_switch_next]
[bits 32]
int_clock_handler:
pusha ;Push all standard registers
mov eax, esp ;save current stack pointer in esp
mov esp, 0x7000 ;now put the stack outside of virtual memory in kernel space!
push eax ;Push pointer to all the stuff we just pushed
call task_switch_next ;Call C code
mov esp, eax ;Replace the stack with what the C code gave us
mov al, 0x20 ;Port number AND command number to Acknowledge IRQ
out 0x20, al ;Acknowledge IRQ, so we keep getting interrupts
popa ;Put the standard registers back
iretd ;Interrupt-Return
|