eax:
----------PROCESSES
0x00	Request new privilege level
		ebx - New privilege level;
			1 - Driver
			2 - Server
			3 - Application
		ecx - Address of an unsigned char, will equal the new privilege level.

0x01	Output a message to the kernel. - drivers/severs only
		ebx - Address to a null terminated string (maximum of 1024 characters).

0x02	Get my thread ID.
		ebx - Address of an unsigned int, will equal the thread ID.

0x03	Get my process ID.
		ebx - Address of an unsigned int, will equal the process ID.

0x04	Get a process ID from a process name.
		ebx - Address of a null terminated string (maximum of 512 characters).
		ecx - Address of an unsigned int, will equal the process ID.
			If it equals 0, the process does not exist.

0x05	Set the current process's name.
		ebx - Address of a null terminated string (maximum of 512 characters).
			If the process is an application, then the name must begin with "application\"
		ecx - Pointer to an unsigned char, will equal 1 if the name is already taken, or 2 if the name is invalid.

0x06	Get the name of a process from it's process ID.
		ebx - Process ID.
		ecx - Address of a 512 character array, will equal the process's name.

0x08	Get how many threads a process has.
		ebx - Process ID.
		ecx - Address of unsigned int, will equal the number of threads a process has.

0x09	Get a process's thread's ID.
		ebx - Process ID.
		ecx - How many unsigned ints the following array holds.
		edx - Address of an array of unsigned ints, will store the thread IDs.

0x0A	Get a threads status.
		ebx - Thread ID.
		ecx - Address of an unsigned char, will equal the thread's status;
			0 - Awake
			1 - Waiting for event
			2 - Sleeping for timeout
			3 - Sleeping until told to be woken
			4 - Sleeping until pipe fills up.
			5 - Sleeping until pipe empties.

0x0B	Terminate a process - drivers/servers only
		ebx - Process ID

0x0C	Terminate myself.

0x0D	Start a thread.
		ebx - Entry point for the new thread.
		ecx - Pointer to an unsigned int, will equal the new thread's ID.

0x0E	Terminate a thread (only threads in same process, unless a driver/server).
		ebx - Thread's ID.

0x0F	Check if a thread exists.
		ebx - Thread ID.
		ecx - Address of an unsigned char, will equal 1 if thread exists.

0x10	Check if a process or driver exists.
		ebx - Process ID.
		ecx - Address of an unsigned char, will equal 1 if the process exists.

0x11	Get the privilege level of a process or idenitify if it is a driver.
		ebx - Process ID.
		ecx - Address of an unsigned char, will equal the privilege level;
			0 - Kernel
			1 - Driver
			2 - Server
			3 - Application

0x12	Start a new process
		ebx - Address of a null terminated string of the path to load an ELF executable from.

0x13	Get the number of processes that exist.
		ebx - Address of a null terminated string the names must start with.
			"servers\" will only count processes starting with "servers\",
			"" wil; count every process.
		ecx - Address of an unsigned int, will equal the number of processes.

0x14	Get the names of currently running processes.
		ebx - Address of a null terminated string the names must start with.
			"servers\" will only list processes starting with "servers\",
			"" will list every process.
		ecx - Number of names (each one equalling 512 characters) the following array can hold.
		edx - Pointer to an array of characters, will store the names in.


0x15    Set a thread's status (only threads belonging to the current process, unless a driver/server).
		ebx - The thread's status;
			0 - Awake
			1 - Waiting for event
			2 - Sleeping for timeout
			3 - Sleeping until told to be woken
		ecx - The number of milliseconds to for.

0x16	Get the number of milliseconds since the system was turned on.
		ebx - Pointer to an unsigned int, will equal the number of milliseconds since the system was turned on.

---------Memory Management
0x17	Allocate pages to the current process's memory.
		ebx - The number of pages to allocate (4KB each - they will be next to each other).
		ecx - Address of an unsigned int, will equal the address to the beginning of these pages.
			Will equal 0 if unable to allocate the request.

0x18	Release pages from the current process's memory.
		ebx - The number of pages to free (4KB each).
		ecx - The address of the beginning of the first page.

0x19	Map an area of physical memory in to the current process's memory (drivers only).
		ebx - The number of pages to allocate (4KB each - they will be next to each other).
		ecx - Address of physical memory (must be 4kb aligned) to begin mapping from.
		edx - Address of an unsigned int, will equal the virtual address to the beginning of these area.
			Will equal 0 if unable to allocate the request.

0x1A	Get the amount of memory a process is using.
		ebx - Process ID.
		ecx - Address of an unsigned int, will equal the number of bytes the process uses.
			Shared memory and physical memory will also be counted.

0x1B	Get the amount of free memory on the system.
		ebx - Address of an unsigned int, will equal the amount of memory free in bytes on the system.

0x1C	Get the total amount of memory on the system.
		ebx - Address of an unsigned int, will equal the total amount of memory in bytes on the system.

---------Drivers (devices/interrupts)
0x1D	Create a device - drivers only
		ebx - Address of a null terminated string (maximum of 512 characters) that contains the name of the device.
		ecx - The device ID (driver specific).
		edx - Address of an unsigned char, will equal 1 if their is a conflict with the device's name.

0x1E	Destroy a device - drivers only
		ebx - Address of a null terminated string (maximum of 512 characters) that contains the name of the device to delete.

0x1F	Get a device's and the related driver's process ID.
		ebx - Address of a null terminated string containing the name of the device.
		ecx - Address of an unsigned int, will equal the ID of the device.
		edx - Address of an unsigned int, will equal the process ID of the driver, or 0 if the device does not exist.

0x20	Get the number of devices.
		ebx - Address of a null terminated string the names must start with.
			"disk\" will only list devices starting with "disk\",
			"" will list every device.
		ecx - Address of an unsigned int, will equal the number of devices.

0x21	Get the names of devices.
		ebx - Address of a null terminated string the names must start with.
			"disk\" will only list devices starting with "disk\",
			"" will list every device.
		ecx - Number of names (each one equalling 512 characters) the following array can hold.
		edx - Pointer to an array of characters, will store the names in.

0x22	Fire a vm86 interrupt - driver only
		ebx - Address of the vm86 interrupt structure.

---------IPC
0x22	Get next event.
		ebx - Address of the event structure, will contain the event that fired.

0x23	Trigger event - drivers/servers only
		ebx - Address of the event structure to fire.
		ecx - Process ID of the recipient.

0x24	Get message.
		ebx - ID of the message to receive.
		ebx - Address of a buffer, will store the event in it.

0x25	Skip message.
		ebx - ID of the message to skip.

0x26	Clear all messages.

0x27	Allocate pipe and join for writing.
		ebx - Address of an unsigned int, will store the pipe's ID in.
		
0x28	Allocate pipe and join for reading.
		ebx - Address of an unsigned int, will store the pipe's ID in.

0x29	Join pipe for writing.
		ebx - Pipe's ID to join.
		ecx - Address of an unsigned char, will contain 0 if the pipe does not exist, or will contain 1 if the pipe is full.

0x2A	Join pipe for reading.
		ebx - Pipe's ID to join.
		ecx - Address of an unsigned char, will contain 0 if the pipe does not exist, or will contain 1 if the pipe is full.

0x2B	Leave pipe.
		ebx - Pipe's ID to leave.

0x2C	Read from pipe.
		ebx - Pipe's ID to read from.
		ecx - The number of bytes (maximum of 4096) to read from the pipe.
		edx - Pointer to a buffer, will store the data read from the pipe.

0x2D	Write to pipe.
		ebx - Pipe's ID to read to.
		ecx - The number of bytes (maximum of 4096) to write to the pipe.
		edx - Pointer to a buffer containing the data to write to the pipe.

0x2E	Create shared memory.
		ebx - Address of the beginning of the memory to share (must be aligned to 4 kb).
		ecx - The amount of memory to share (must be aligned to 4kb).
		edx - Address of an unsigned int, will contain the ID of the shared memory.

0x2F	Join shared memory.
		ebx - The ID of the shared memory to join.
		ecx - Address of an unsigned int, will contain the address the shared memory was allocated.
			Equals 1 if the memory cannot be allocated.

0x30	Leave shared memory.
		ebx - The ID of the shared memory to leave.