opcode op_18 = new opcode() { public void handler()/* JR   o 		  */
    { 
 //TODO complext check it once more sometime (shadow)
        //JR();
    	int oldpc = Z80.PC.D -1; //_PCD-1;	
        byte arg = (byte)ARG();/* ARG() also increments _PC */
        Z80.PC.SetD((Z80.PC.D + arg) & 0xFFFF);/* so don't do _PC += ARG() */   
	change_pc16(Z80.PC.D);											
        /* speed up busy loop */                                    
	if( Z80.PC.D == oldpc ) 										
	{															
		if( after_EI==0 ) 										
			BURNODD( z80_ICount[0], 1, 12 );						
	}															
	else														
	{															
		int op = cpu_readop(Z80.PC.D) & 0xFF;							
		if( Z80.PC.D == oldpc-1 )									
		{														
			/* NOP - JR $-1 or EI - JR $-1 */					
			if ( op == 0x00 || op == 0xfb ) 					
			{													
				if( after_EI==0 ) 								
					BURNODD( z80_ICount[0]-4, 2, 4+12 );			
			}													
		}														
		else													
		/* LD SP,#xxxx - JR $-3 */								
		if( Z80.PC.D == oldpc-3 && op == 0x31 ) 					
		{														
			if( after_EI==0 ) 									
				BURNODD( z80_ICount[0]-12, 2, 10+12 ); 			
		}														
        }    
    }}