Begin task refactor

Store state using interrupt stack instead. Looks like `int 0x80` doesn't
work though, which is odd.
diff --git a/src/kernel/task.c b/src/kernel/task.c
index 4d740cf..53a31e6 100644
--- a/src/kernel/task.c
+++ b/src/kernel/task.c
@@ -3,14 +3,31 @@
 #include "io.h"
 #include "log.h"
 #include "paging.h"
+#include "pic.h"
 
 struct process processes[1024] = {0};
 struct ll_task_i *first_task = NULL, *last_task = NULL, *current_task = NULL;
 static uint next_task_id = 0;
 
+bool tasks_initialized = false;
+
+void _init_tasks(uint kernel_esp, uint kernel_ebp, uint kernel_eip);
+
+void init_tasks()
+{
+	add_interrupt_handler(INIT_TASKS_INTERRUPT, _sys_init_tasks_h);
+
+	asm("int $0x80");
+}
+
+void _sys_init_tasks_h(struct registers *regs)
+{
+	_init_tasks(regs->esp, regs->ebp, regs->eip);
+}
+
 void _init_tasks(uint kernel_esp, uint kernel_ebp, uint kernel_eip)
 {
-	kprintf("_init_tasks\n");
+	kpanic("_init_tasks\n");
 
 	processes[0] = (struct process){
 		.exists = true,
@@ -42,6 +59,8 @@
 	};
 
 	kprintf("Returning from _init_tasks\n");
+
+	tasks_initialized = true;
 }
 
 struct process *get_process(uint pid)