                 self.V[registerX] = UInt8(Int(result) % 256)
             },
             
-            // SHL_V (Shift the first register left by one the flag will containt the MSB before the shift (last nibble is ignored in opcode))
+            // SHL_V (Shift the first register left by one the flag will containt the MSB before the shift
             0x800E: { arg in
-                let registerX = Int(arg & 0x10)
+                let registerX = Int(arg & 0x0100)
                 let valueX = self.V[registerX]
                 
                 // Set the flag

            
            // SNE_V_BYTE (skip next instruction if register does not equals value)
            0x4000: { arg in
                let registerX = Int(arg & 0x100)
                let value = UInt8(arg & 0x11)
                
                if(self.V[registerX] != value)
                {

            
            // LD_DT_V (Set the delayTimer to the value in register V)
            0xF015: { arg in
                let registerX = Int(arg & 0x0100)
                self.delayTimer = self.V[registerX]
            },
            
            // LD_ST_V (Set the soundTimer to the value in register V)
            0xF018: { arg in
                let registerX = Int(arg & 0x0100)
                self.soundTimer = self.V[registerX]
            },
            
            // ADD_I_V (I and the register are added and stored in I)
            0xF01E: { arg in
                let registerX = Int(arg & 0x0100)
                self.I = self.I + UInt16(self.V[registerX])
            },
            
            // LD_F_V (I is set to the address of the corresponding font block representing the value in register V)
            0xF029: { arg in
                let registerX = Int(arg & 0x0100)
                let valueX = self.V[registerX]
                
                // Get the memory offset for this hex number (a single font consists of 5 bytes)
