Just for documenting Sake:
We already solved the issue

The problem was that he was updating the program counter after the switch, this effectively ruined the program counter for Jump instructions as it was moving the program counter more than once per JUMP

Summary:



Dont do this
switch (opcode) {
case : 0x0
break;
.
.
.case n
break;

pc += 2; // this will mess your jump instructions and possibly others

}
//instead update the counter in their own body