instruction set:

all instructions are <0x74

get from table of flags
0x01 = byte 2 of INSN should be checked*
0x02 = byte 3 of INSN should be checked*
0x04 = byte 4 of INSN should be checked*
0x08 = next dword is relative jump
0x10 = byte 4 is displacement/4		
0x20 = next dword is code offset (CheckCodeBounds before accepting)
0x40 = next dword comes from pool (if value is negative, calculate*2/2

*check = non-negative, = 0 mod 4

instructions:
0x0D - NOT (b[1]=rd, b[2]=rs)
0x0E - NEG (b[1]=rd, b[2]=rs)
0x0F - EXSB (b[1]=rd, b[2]=rs)
0x10 - EXSH (b[1]=rd, b[2]=rs)
0x11 - MOV (b[1]=rd, b[2]=rs)
0x1F - ADDQ (b[1]=rd, b[2]=rs, b[3]=immq)
0x40 - LDQ (b[1]=rd, w[1]=imm16)
0x43 - STORE (b[1]=rd,b[2]=rs)
0x5A - LDI (b[1]=rd,d[1]=imm32)
0x5B - JMP (d[1]=addr)
0x5C - CALL (d[1]=addr) //(if the pool variable is a mophun API call, the processing translates this instruction to 0x67+num_args%4)

--extended--
0x67 - SYSCALL4
0x68 - SYSCALL0
0x69 - SYSCALL1
0x6A - SYSCALL2
0x6B - SYSCALL3




pool_items:
8 bytes
XY AA AA AA BB BB BB BB

Sections:
1 = Code
2 = Data
4 = ?Bss? Seems to be just nulls initially


pool_instantization:
Y=1,3 pointer to section X offset B
   * if the string section contains ~C or ~D on the offset A, store the pointer to esi+20h or esi+24h
   * emulator changes B to the pointer itself

Y=2 resolve syscall from strings section on offset A (b = 0)
   * emulator changes X to (num_of_args+1)%5 leaves A and fills B with pointer to func pointer if resolved d

Y=4 
   * if X=2 set section X + offset B to pointer to section A (first byte) offset (section X + offset B)
   ** a.k.a add section A pointer to section X + offset B

Y=0
   * end

Y=8
   * emulator steals pointer from pool[A] and adds B to it

code_instantization
Y != 2
   * dereference pointer
