global int_syscall_handler [extern syscall_write] [extern syscall_read] [extern syscall_readdir] [extern syscall_execve] [bits 32] int_syscall_handler: cli push ebx push ecx push edx cmp eax, 61 je call_write cmp eax, 62 je call_read cmp eax, 63 je call_readdir cmp eax, 64 je call_execve done: mov ebx,eax mov al, 0x20 ;Port number AND command number to Acknowledge IRQ out 0x20, al ;Acknowledge IRQ, so we keep getting interrupts mov eax,ebx nop done_blocking: pop ebx pop ecx pop edx mov ebx,eax sti iret ;Interrupt-Return call_write: call syscall_write jmp done call_readdir: call syscall_readdir jmp done call_read: mov al, 0x20 ;Port number AND command number to Acknowledge IRQ out 0x20, al ;Acknowledge IRQ, so we keep getting interrupts sti call syscall_read jmp done_blocking call_execve: mov al, 0x20 ;Port number AND command number to Acknowledge IRQ out 0x20, al ;Acknowledge IRQ, so we keep getting interrupts sti call syscall_execve jmp $ ; this should never return TODO: pop stack!?