public void handler() {

            /* Opcode 0xf6 */
            int ModRM = FETCH();
            int tmp = GetRMByte(ModRM);
            int tmp2;
            switch (ModRM & 0x38) {
                case 0x00:  /* TEST Eb, data8 */

                case 0x08:  /* ??? */

                    tmp &= FETCH();
                    I.CarryVal = I.OverVal = I.AuxVal = 0;
                    SetSZPF_Byte(tmp);
                    nec_ICount[0] -= (ModRM >= 0xc0) ? 4 : 11;
                    if (neclog != null) {
                        fprintf(neclog, "i_f6pre 0x00 :PC:%d,I.ip:%d,AW:%d,CW:%d,DW:%d,BW:%d,SP:%d,BP:%d,IX:%d,IY:%d,b1:%d,b2:%d,b3:%d,b4:%d,s1:%d,s2:%d,s3:%d,s4:%d,A:%d,O:%d,S:%d,Z:%d,C:%d,P:%d,T:%d,I:%d,D:%d,M:%d,v:%d,irq:%d,ns:%d,is:%d,pb:%d,pre:%d,EA:%d\n", cpu_get_pc(), I.ip, I.regs.w[AW], I.regs.w[CW], I.regs.w[DW], I.regs.w[BW], I.regs.w[SP], I.regs.w[BP], I.regs.w[IX], I.regs.w[IY], I.base[0], I.base[1], I.base[2], I.base[3], I.sregs[0], I.sregs[1], I.sregs[2], I.sregs[3], I.AuxVal, I.OverVal, I.SignVal, I.ZeroVal, I.CarryVal, I.ParityVal, I.TF, I.IF, I.DF, I.MF, I.int_vector, I.pending_irq, I.nmi_state, I.irq_state, I.prefix_base, I.seg_prefix, EA);
                    }
                    break;

                case 0x10:  /* NOT Eb */

                    PutbackRMByte(ModRM, (~tmp) & 0xFF);
                    nec_ICount[0] -= (ModRM >= 0xc0) ? 2 : 16;
                    if (neclog != null) {
                        fprintf(neclog, "i_f6pre 0x10 :PC:%d,I.ip:%d,AW:%d,CW:%d,DW:%d,BW:%d,SP:%d,BP:%d,IX:%d,IY:%d,b1:%d,b2:%d,b3:%d,b4:%d,s1:%d,s2:%d,s3:%d,s4:%d,A:%d,O:%d,S:%d,Z:%d,C:%d,P:%d,T:%d,I:%d,D:%d,M:%d,v:%d,irq:%d,ns:%d,is:%d,pb:%d,pre:%d,EA:%d\n", cpu_get_pc(), I.ip, I.regs.w[AW], I.regs.w[CW], I.regs.w[DW], I.regs.w[BW], I.regs.w[SP], I.regs.w[BP], I.regs.w[IX], I.regs.w[IY], I.base[0], I.base[1], I.base[2], I.base[3], I.sregs[0], I.sregs[1], I.sregs[2], I.sregs[3], I.AuxVal, I.OverVal, I.SignVal, I.ZeroVal, I.CarryVal, I.ParityVal, I.TF, I.IF, I.DF, I.MF, I.int_vector, I.pending_irq, I.nmi_state, I.irq_state, I.prefix_base, I.seg_prefix, EA);
                    }
                    break;
                case 0x18:  /* NEG Eb */

                    tmp2 = 0;
                    //SUBB(tmp2,tmp);
                    int res = tmp2 - tmp;
                    SetCFB(res);
                    SetOFB_Sub(res, tmp, tmp2);
                    SetAF(res, tmp, tmp2);
                    SetSZPF_Byte(res);
                    tmp2 = res & 0xFF;
                    PutbackRMByte(ModRM, tmp2);
                    nec_ICount[0] -= (ModRM >= 0xc0) ? 2 : 16;
                    if (neclog != null) {
                        fprintf(neclog, "i_f6pre 0x18 :PC:%d,I.ip:%d,AW:%d,CW:%d,DW:%d,BW:%d,SP:%d,BP:%d,IX:%d,IY:%d,b1:%d,b2:%d,b3:%d,b4:%d,s1:%d,s2:%d,s3:%d,s4:%d,A:%d,O:%d,S:%d,Z:%d,C:%d,P:%d,T:%d,I:%d,D:%d,M:%d,v:%d,irq:%d,ns:%d,is:%d,pb:%d,pre:%d,EA:%d\n", cpu_get_pc(), I.ip, I.regs.w[AW], I.regs.w[CW], I.regs.w[DW], I.regs.w[BW], I.regs.w[SP], I.regs.w[BP], I.regs.w[IX], I.regs.w[IY], I.base[0], I.base[1], I.base[2], I.base[3], I.sregs[0], I.sregs[1], I.sregs[2], I.sregs[3], I.AuxVal, I.OverVal, I.SignVal, I.ZeroVal, I.CarryVal, I.ParityVal, I.TF, I.IF, I.DF, I.MF, I.int_vector, I.pending_irq, I.nmi_state, I.irq_state, I.prefix_base, I.seg_prefix, EA);
                    }
                    break;
                case 0x20: /* MUL AL, Eb */ {
                    /*UINT16*/
                    int result;
                    tmp2 = I.regs.b[AL];

                    SetSF((byte) tmp2);
                    SetPF(tmp2);

                    result = (tmp2 & 0xFFFF) * tmp;
                    I.regs.SetW(AW, result & 0xFFFF);

                    SetZF(I.regs.w[AW]);
                    I.CarryVal = I.OverVal = BOOL(I.regs.b[AH] != 0);
                }
                nec_ICount[0] -= (ModRM >= 0xc0) ? 30 : 36;
                if (neclog != null) {
                    fprintf(neclog, "i_f6pre 0x20 :PC:%d,I.ip:%d,AW:%d,CW:%d,DW:%d,BW:%d,SP:%d,BP:%d,IX:%d,IY:%d,b1:%d,b2:%d,b3:%d,b4:%d,s1:%d,s2:%d,s3:%d,s4:%d,A:%d,O:%d,S:%d,Z:%d,C:%d,P:%d,T:%d,I:%d,D:%d,M:%d,v:%d,irq:%d,ns:%d,is:%d,pb:%d,pre:%d,EA:%d\n", cpu_get_pc(), I.ip, I.regs.w[AW], I.regs.w[CW], I.regs.w[DW], I.regs.w[BW], I.regs.w[SP], I.regs.w[BP], I.regs.w[IX], I.regs.w[IY], I.base[0], I.base[1], I.base[2], I.base[3], I.sregs[0], I.sregs[1], I.sregs[2], I.sregs[3], I.AuxVal, I.OverVal, I.SignVal, I.ZeroVal, I.CarryVal, I.ParityVal, I.TF, I.IF, I.DF, I.MF, I.int_vector, I.pending_irq, I.nmi_state, I.irq_state, I.prefix_base, I.seg_prefix, EA);
                }
                break;
                /*TODO*///    case 0x28:  /* IMUL AL, Eb */
    /*TODO*///		{
    /*TODO*///			INT16 result;
    /*TODO*///
    /*TODO*///			tmp2 = (unsigned)I.regs.b[AL];
    /*TODO*///
    /*TODO*///			SetSF((INT8)tmp2);
    /*TODO*///			SetPF(tmp2);
    /*TODO*///
    /*TODO*///			result = (INT16)((INT8)tmp2)*(INT16)((INT8)tmp);
    /*TODO*///			I.regs.w[AW]=(WORD)result;
    /*TODO*///
    /*TODO*///			SetZF(I.regs.w[AW]);
    /*TODO*///
    /*TODO*///			I.CarryVal = I.OverVal = (result >> 7 != 0) && (result >> 7 != -1);
    /*TODO*///		}
    /*TODO*///		nec_ICount-=(ModRM >=0xc0 )?30:39;
    /*TODO*///		break;
                case 0x30: /* IYV AL, Ew */ {
                    /*UINT16*/
                    int result;

                    result = I.regs.w[AW];

                    if (tmp != 0) {
                        tmp2 = result % tmp;

                        if ((result /= tmp) > 0xff) {
                            nec_interrupt(0, 0);
                            break;
                        } else {
                            I.regs.SetB(AL, result & 0xFF);
                            I.regs.SetB(AH, tmp2 & 0xFF);
                        }
                    } else {
                        nec_interrupt(0, 0);
                        break;
                    }
                }
                nec_ICount[0] -= (ModRM >= 0xc0) ? 25 : 35;
                if (neclog != null) {
                    fprintf(neclog, "i_f6pre 0x30 :PC:%d,I.ip:%d,AW:%d,CW:%d,DW:%d,BW:%d,SP:%d,BP:%d,IX:%d,IY:%d,b1:%d,b2:%d,b3:%d,b4:%d,s1:%d,s2:%d,s3:%d,s4:%d,A:%d,O:%d,S:%d,Z:%d,C:%d,P:%d,T:%d,I:%d,D:%d,M:%d,v:%d,irq:%d,ns:%d,is:%d,pb:%d,pre:%d,EA:%d\n", cpu_get_pc(), I.ip, I.regs.w[AW], I.regs.w[CW], I.regs.w[DW], I.regs.w[BW], I.regs.w[SP], I.regs.w[BP], I.regs.w[IX], I.regs.w[IY], I.base[0], I.base[1], I.base[2], I.base[3], I.sregs[0], I.sregs[1], I.sregs[2], I.sregs[3], I.AuxVal, I.OverVal, I.SignVal, I.ZeroVal, I.CarryVal, I.ParityVal, I.TF, I.IF, I.DF, I.MF, I.int_vector, I.pending_irq, I.nmi_state, I.irq_state, I.prefix_base, I.seg_prefix, EA);
                }
                break;
                /*TODO*///    case 0x38:  /* IIYV AL, Ew */
    /*TODO*///		{
    /*TODO*///
    /*TODO*///			INT16 result;
    /*TODO*///
    /*TODO*///			result = (INT16)I.regs.w[AW];
    /*TODO*///
    /*TODO*///			if (tmp)
    /*TODO*///			{
    /*TODO*///				tmp2 = result % (INT16)((INT8)tmp);
    /*TODO*///
    /*TODO*///				if ((result /= (INT16)((INT8)tmp)) > 0xff)
    /*TODO*///				{
    /*TODO*///					nec_interrupt(0,0);
    /*TODO*///					break;
    /*TODO*///				}
    /*TODO*///				else
    /*TODO*///				{
    /*TODO*///					I.regs.b[AL] = result;
    /*TODO*///					I.regs.b[AH] = tmp2;
    /*TODO*///				}
    /*TODO*///			}
    /*TODO*///			else
    /*TODO*///			{
    /*TODO*///				nec_interrupt(0,0);
    /*TODO*///				break;
    /*TODO*///			}
    /*TODO*///		}
    /*TODO*///		nec_ICount-=(ModRM >=0xc0 )?43:53;
    /*TODO*///		break;
                default:
                    System.out.println("i_f6pre 0x" + Integer.toHexString(ModRM & 0x38));
                    break;
            }
        }