summaryrefslogtreecommitdiff
path: root/kernel/interrupts.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-01 12:10:13 +0200
committerMiguel <m.i@gmx.at>2018-09-01 12:10:13 +0200
commit51ab94a29f64de42e3dec3a3ef0ec6a94cda28a6 (patch)
treec2cf5f0b31c2f80ac815dc366ece52a42983219f /kernel/interrupts.c
parentd52c3d119dbbbf2a9573e7698a878cf74afdd08c (diff)
working on new syscalls
Diffstat (limited to 'kernel/interrupts.c')
-rw-r--r--kernel/interrupts.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c
index 6e7e2ff..0343ad3 100644
--- a/kernel/interrupts.c
+++ b/kernel/interrupts.c
@@ -27,9 +27,31 @@ static struct idt_desc
uint16_t baseHi;
} idtd;
-uint32_t interrupt_handler(uint32_t num, uint32_t esp)
+uint32_t interrupt_handler(uint32_t esp, uint32_t num)
{
if(num!=0)klog("int: %d %d",num,esp);
+
+ if(num==0)
+ {
+ pit_interrupt_handler();
+ esp=task_switch_next(esp);
+ }
+
+ if(num==1)asm_kb_handler();
+
+ if(num==12)asm_mouse_handler();
+
+ if(num==128){
+ uint32_t *stack=esp;
+ uint32_t eax=stack[11];
+ uint32_t ebx=stack[8];
+ uint32_t ecx=stack[10];
+ uint32_t edx=stack[9];
+ klog("syscall: %d (ebx=0x%08X,ecx=0x%08X,edx=0x%08X)",eax,ebx,ecx,edx);
+ task_wake_syscall_worker();
+ esp=task_syscall(eax,ebx,ecx,edx,esp);
+ }
+
return esp;
}