eax:
----------PROCESSES
0x0	Request new privilege level. The current privilege level can only be lowered, not raised.
		ebx - New privilege level;
			1 - Driver
			2 - Server
			3 - Application

0x2	Get my thread ID.
		ebx - Will equal the thread ID.

0x3	Get my process ID.
		ebx - Will equal the process ID.

0x4	Get a process ID from a process name.
		ebx - Address of a null terminated string (maximum of 512 characters).
		ecx - Will equal the process ID.
			If it equals 0, the process does not exist.

0x5	Set the current process's name.
		ebx - Address of a null terminated string (maximum of 512 characters).
			Automatically attached to the beginning of this string will be the privilege level of the processes. For example an application's name will become "a\[name]".
		ecx - Will equal 0 if successful, 1 if the name is already taken, or 2 if the name is invalid.

0x6	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.

0x7	Get how many threads a process has.
		ebx - Process ID.
		ecx - Will equal the number of threads a process has.

0x8	Get a process's threads' 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.

0x9	Get a threads status.
		ebx - Thread ID.
		ecx - Will equal the thread's status;
			0 - Does not exist
			1 - Awake
			2 - Waiting for event
			3 - Sleeping for timeout
			4 - Sleeping until pipe has been emptied
			5 - Sleeping until pipe has been filled

0xA	Terminate a process - drivers/servers only
		ebx - Process ID

0xB	Terminate the current process (myself).

0xC	Start a thread.
		ebx - Entry point for the new thread.
		ecx - Pointer to an unsigned int, will equal the new thread's ID.

0xD	Terminate a thread (only threads in same process, unless a driver/server).
		ebx - Thread's ID.

0xE	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
			4 - Does not exist

0xF	Start a new process
		ebx - Address of a null terminated string (maximum of 512 characters) containing the name of the process.
			Attached to the beginning of this string the privilege level of the new process should begin in, e.g. - "a\[name]". A process can only spawn another process or an equal or lower privilege level:
			d - Driver
			s - Server
			a - Application
		ecx - Number of bytes that make up the ELF executable.
		edx - Address of start of the ELF executable.
		eax - Will equal the process's ID, or 0 if failed.

0x10	Get the number of processes that exist.
		ebx - Address of a null terminated string the names must start with.
			e.g. "s\" will only count servers,
			"" wil; count every process.
		ecx - Will equal the number of processes.

0x11	Get the names of currently running processes.
		ebx - Address of a null terminated string the names must start with.
			e.g. "s\a" will only list servers starting with "a",
			"" 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.


0x12	Set a thread's status (only threads belonging to the current process, unless a driver/server).
		ebx - Thread's ID.
		ecx - The thread's status;
			0 - Awake
			1 - Waiting for event
			2 - Sleeping for timeout
			3 - Sleeping until told to be woken
		edx - The number of milliseconds to for.

0x13	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
0x14	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 - Will equal the address to the beginning of these pages.
			Will equal 0 if unable to allocate the request.

0x15	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.

0x16	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 - Will equal the virtual address to the beginning of these area.
			Will equal 0 if unable to allocate the request.

0x17	Get the amount of memory a process is using.
		ebx - Process ID.
		ecx - Will equal the number of bytes the process uses.
			Shared memory and physical memory will also be counted.

0x18	Get the amount of free memory on the system.
		ebx - Will equal the amount of memory free in bytes on the system.

0x19	Get the total amount of memory on the system.
		ebx - Will equal the total amount of memory in bytes on the system.

---------Drivers (devices/interrupts)
0x1A	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.

0x1B	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.

0x1C	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 - Will equal the ID of the device.
		edx - Will equal the process ID of the driver, or 0 if the device does not exist.

0x1D	Get the number of devices.
		ebx - Address of a null terminated string the names must start with.
			e.g. "disk\" will only list devices starting with "disk\",
			"" will list every device.
		ecx - Address of an unsigned int, will equal the number of devices.

0x1E	Get the names of devices.
		ebx - Address of a null terminated string the names must start with.
			e.g. "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.


0x1F	(outside a vm86 task) Turn the process into a vm86 task - driver only. Only the first 1MB of the process's memory will be avaliable.
		ebx - Address of where to start executing once entered vm86 mode.

0x1F	(inside a vm76 task) Turn the vm86 task back into a native process.
		bx - Low address of where to start executing once left vm86 mode.
		cx - High address of where to start executing once left vm86 mode.

0x20	Request permission to access an IO port.
		ebx - IO port.
		ecx - Will equal 0 if succesful, 1 if failed.

0x21	Revoke permission to access an IO port.
		ebx - IO port.

0x22	Request permission to listen for an IRQ.
		ebx - IRQ number.
		ecx - Will equal 0 if succesful, 1 if failed.

0x23	Revoke permission to listen for an IRQ.
		ebx - IRQ number.

---------IPC
0x24	Get next event.
		ebx - Event type
		ecx - Will contain parameter 1.
		edx - Will contain parameter 2.
		eax - Will contain parameter 3.

0x25	Sleep until the next event.
		ebx - Event type.
		ecx - Event type.
		edx - Event type.
		eax - Event type.

0x26	Get message.
		ebx - ID of the message to receive.
		ebx - Address of a buffer, will store the message in it.

0x27	Skip message.
		ebx - ID of the message to skip.

0x28	Clear all messages.

0x29	Sent message.
		ebx - The ID of the process to send to.
		ecx - The number of bytes in the message.
		edx - The address of the beginning of the message.

0x2A	Allocate pipe and join for writing.
		ebx - Will store the pipe's ID in.
		ecx - Will store the pipe's key.
		
0x2B	Allocate pipe and join for reading.
		ebx - Will store the pipe's ID in.
		ecx - Will store the pipe's key.

0x2C	Join pipe for writing.
		ebx - Pipe's ID to join.
		ecx - The pipe's key.
		edx - Will contain 0 if succesful, 1 if failed.

0x2D	Join pipe for reading.
		ebx - Pipe's ID to join.
		ecx - The pipe's key.
		ecx - Will contain 0 if succesful, 1 if failed.

0x2E	Leave pipe.
		ebx - Pipe's ID to leave.

0x2F	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.

0x30	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.

0x31	Create shared memory.
		eax - Will contain the key of the 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 - Will contain the ID of the shared memory.

0x32	Join shared memory.
		ebx - The ID of the shared memory to join.
		edx - The shared memory's key.
		ecx - Will contain the address the shared memory was allocated.
			Equals 1 if unsuccessful.

0x33	Leave shared memory.
		ebx - The ID of the shared memory to leave.