package z80em func (z *Z80Type) opcodeCB() { z.R = (z.R & 0x80) | (((z.R & 0x7f) + 1) & 0x7f) z.PC++ opcode := z.core.M1MemRead(z.PC) bitNumber := (opcode & 0x38) >> 3 regCode := opcode & 0x07 if opcode < 0x40 { // Shift/rotate instructions opArray := []OpShift{z.doRlc, z.doRrc, z.doRl, z.doRr, z.doSla, z.doSra, z.doSll, z.doSrl} switch regCode { case 0: z.B = opArray[bitNumber](z.B) case 1: z.C = opArray[bitNumber](z.C) case 2: z.D = opArray[bitNumber](z.D) case 3: z.E = opArray[bitNumber](z.E) case 4: z.H = opArray[bitNumber](z.H) case 5: z.L = opArray[bitNumber](z.L) case 6: z.core.MemWrite(z.hl(), opArray[bitNumber](z.core.MemRead(z.hl()))) default: z.A = opArray[bitNumber](z.A) } } else if opcode < 0x80 { // BIT instructions switch regCode { case 0: z.Flags.Z = z.B&(1<