diff options
| author | Miguel <m.i@gmx.at> | 2018-09-01 12:10:13 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-09-01 12:10:13 +0200 |
| commit | 51ab94a29f64de42e3dec3a3ef0ec6a94cda28a6 (patch) | |
| tree | c2cf5f0b31c2f80ac815dc366ece52a42983219f /kernel/interrupts.c | |
| parent | d52c3d119dbbbf2a9573e7698a878cf74afdd08c (diff) | |
working on new syscalls
Diffstat (limited to 'kernel/interrupts.c')
| -rw-r--r-- | kernel/interrupts.c | 24 |
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; } |
