extern void LoadTask(uint32_t * code_phys_addr, uint32_t * fn, unsigned int code_size);

struct process{
	unsigned int pid;

	struct {
		uint32_t eax, ecx, edx, ebx;
		uint32_t esp, ebp, esi, edi;
		uint32_t eip, eflags;
		uint32_t cs:16, ss:16, ds:16, es:16, fs:16, gs:16;
		uint32_t cr3;
	} regs __attribute__ ((packed));
} __attribute__ ((packed));

#ifdef __PLIST__
struct process p_list[32];
struct process *current = 0;
int n_proc = 0;
#else
extern struct process p_list[];
extern struct process *current;
extern int n_proc;
#endif

void load_task(uint32_t *, uint32_t *, unsigned int);