This file lists the assembler instructions and their parameters;
note: although the whole file is basically in uppercase, the assembler actually requires everything to be lowercase~

OP
0x00 - invalid op

0x01 - invalid op (but it does show up apparently at the end of all the byte code);
even though it probably does the same thing as any other invalid op if it actually runs...
not going to support it 

0x02 - looks like this does a jump (same as 0x2b), but since there is a jump already not supporting it

0x03 - function begin
BEGINFUNCTION [function name] , [TYPE]
 - comments : type is not part of the actual op, but the tool uses it to store the return type information temporarily until the function is registered

0x04 - end function
ENDFUNCTION

0x05 - local declaration
LOCAL [TYPE] , [SCAN STRING : VARIABLE NAME]

0x06 - global declaration
GLOBAL [TYPE] , [SCAN STRING : VARIABLE NAME]

0x07 - constant declaration
CONSTANT [TYPE] , [SCAN STRING : CONSTANT NAME]

0x08 - copies value from stack (at index from top) to a newly created local with the given name
STACKWRITEVAR [TYPE] , [INDEX_REGISTER] , [SCAN STRING : VARIABLE NAME]

0x09 - pushes declared type (not sure if it actually touches the stack)
PUSHTYPE [SCAN STRING : TYPE]

0x0a - derives the previously pushed type (and pops, if there is a stack involved, not sure)
DERIVETYPE [SCAN STRING : NEW TYPE]

0x0b - pops N values from the stack
STACKPOPN [number]

0x0c - writes a literal of a certain type to the specified register
LOADLITERAL [TYPE] , [value] , [REGISTER]

0x0d - copies register into register
COPYREG [SOURCE REG] , [TARGET REG]

0x0e - copies variable value into register
LOADVAR [TYPE] , [SCAN STRING : VARIABLE NAME] , [REGISTER]

0x0f - loads a function address into register
LOADFUNC [TYPE] , [SCAN STRING : FUNCTION NAME] , [REGISTER]

0x10 - gets the value from an array variable
LOADARRAY [TYPE] , [SCAN STRING : VARIABLE NAME] , [INDEX_REGISTER] , [REGISTER]

0x11 - writes a register value to a variable
WRITEVAR [REGISTER] , [SCAN STRING : VARIABLE NAME]

0x12 - writes a register value to an array
WRITEARRAY [REGISTER] , [SCAN STRING : VARIABLE NAME] [INDEX_REGISTER]

0x13 - pushes a register value onto the stack ; increases stack size by one
STACKPUSH [REGISTER]

0x14 - pops a stack value into a register ; reduces stack size by one
STACKPOP [REGISTER]

0x15 - calls a native
CALLNATIVE [SCAN STRING : NATIVE NAME]

0x16 - calls a function
CALLFUNC [SCAN STRING : FUNCTION NAME]

0x17 - converts an integer to a real in place in a register
I2R [REGISTER]

0x18 - boolean and logic taking two values and returns 0 or 1 in the destination register
AND [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x19 - boolean or logic taking two values and returns 0 or 1 in the destination register
OR [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x1a - equality check ( == )
EQ [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x1b - not equal check ( != )
NEQ [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x1c - less than or equal to check ( <= )
LE [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x1d - greater than or equal to check ( >= )
GE [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x1e - less than check ( < )
LT [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x1f - greater than check ( > )
GT [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x20 - addition logic
ADD [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x21 - subtraction logic
SUB [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x22 - multiplication logic
MUL [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x23 - division logic
DIV [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x24 - modulo logic
MOD [LEFT OPERAND REGISTER] , [RIGHT OPERAND REGISTER] , [RESULT REGISTER]

0x25 - negates a register in place
NEG [REGISTER]

0x26 - nots a register in place
NOT [REGISTER]

0x27 - returns from a function (probably pops a stack value too)
RETURN

0x28 - specifies a location for jump ops to jump to (this is a label op)
LABEL [JUMP ID]

0x29 - jumps if the register is true
JT [REGISTER] , [JUMP ID]

0x2a - jumps if the register is false
JF [REGISTER] , [JUMP ID]

0x2b - jumps to the specified location unconditionally
JMP [JUMP ID]
