Exemple #1
0
            static void m68000_dbf()
            {
                UIntSubArray d_reg = new UIntSubArray(m68k_cpu.dr, (int)m68k_cpu.ir & 7);
                uint res = ((d_reg[0] - 1) & 0xffff);

                d_reg[0] = (uint)((d_reg[0]) & ~0xffff) | res;
                if (res != 0xffff)
                {
                    ; /* auto-disable (see m68kcpu.h) */
                    m68k_cpu.pc += (uint)MAKE_INT_16(m68ki_read_16(m68k_cpu.pc));
                    m68k_clks_left[0] -= (10);
                    return;
                }
                m68k_cpu.pc += 2;
                m68k_clks_left[0] -= (14);
            }
Exemple #2
0
            static void m68000_abcd_rr()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);
                uint src = (m68k_cpu.dr[m68k_cpu.ir & 7]);
                uint dst = d_dst[0];
                uint res = ((src) & 0x0f) + ((dst) & 0x0f) + ((m68k_cpu.x_flag != 0) ? 1u : 0u);

                if (res > 9)
                    res += 6;
                res += ((src) & 0xf0) + ((dst) & 0xf0);
                if ((m68k_cpu.x_flag = m68k_cpu.c_flag = (res > 0x99) ? 1u : 0) != 0)
                    res -= 0xa0;

                d_dst[0] = (uint)((d_dst[0]) & ~0xff) | ((res) & 0xff);

                m68k_cpu.n_flag = ((res) & 0x80); /* officially undefined */

                if (((res) & 0xff) != 0)
                    m68k_cpu.not_z_flag = 1;
                m68k_clks_left[0] -= (6);
            }
Exemple #3
0
            static void m68000_nbcd_d()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, m68k_cpu.ir & 7);
                uint dst = d_dst[0];
                uint res = ((0x9a - dst - (((m68k_cpu.x_flag != 0) ? 1u : 0u))) & 0xff);

                if (res != 0x9a)
                {
                    if ((res & 0x0f) == 0xa)
                        res = (res & 0xf0) + 0x10;

                    d_dst[0] = (uint)((d_dst[0]) & ~0xff) | res;

                    if (res != 0)
                        m68k_cpu.not_z_flag = 1;
                    m68k_cpu.c_flag = m68k_cpu.x_flag = 1;
                }
                else
                    m68k_cpu.c_flag = m68k_cpu.x_flag = 0;
                m68k_clks_left[0] -= (6);
            }
Exemple #4
0
            static void m68000_movep_er_16()
            {
                uint ea = (m68k_cpu.ar[m68k_cpu.ir & 7]) + (uint)MAKE_INT_16(((m68ki_read_imm_16()) & 0xffff));
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);

                d_dst[0] =(uint) ((d_dst[0]) & ~0xffff) | ((m68ki_read_8(ea) << 8) + m68ki_read_8(ea + 2));
                m68k_clks_left[0] -= (16);
            }
Exemple #5
0
            static void m68000_move_dd_i_32()
            {
                uint res = m68ki_read_imm_32();
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);

                d_dst[0] = res;

                m68k_cpu.n_flag = ((res) & 0x80000000);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (4 + 8);
            }
Exemple #6
0
            static void m68000_move_dd_di_32()
            {
                uint res = m68ki_read_32(((m68k_cpu.ar[m68k_cpu.ir & 7]) + (uint)MAKE_INT_16(m68ki_read_imm_16())));
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);

                d_dst[0] = res;

                m68k_cpu.n_flag = ((res) & 0x80000000);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (4 + 12);
            }
Exemple #7
0
            static void m68000_divs_i_16()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);
                int src = MAKE_INT_16(m68ki_read_imm_16());

                m68k_cpu.c_flag = 0;

                if (src != 0)
                {
                    int quotient = MAKE_INT_32(d_dst[0]) / src;
                    int remainder = MAKE_INT_32(d_dst[0]) % src;

                    if (quotient == MAKE_INT_16(quotient))
                    {
                        m68k_cpu.not_z_flag = (uint)quotient;
                        m68k_cpu.n_flag = (uint)((quotient) & 0x8000);
                        m68k_cpu.v_flag = 0;
                        d_dst[0] = (uint)(((quotient) & 0xffff) | (remainder << 16));
                        m68k_clks_left[0] -= (158 + 4);
                        return;
                    }
                    m68k_cpu.v_flag = 1;
                    m68k_clks_left[0] -= (158 + 4);
                    return;
                }
                m68ki_interrupt(5);
            }
Exemple #8
0
            static void m68000_move_dd_pi_16()
            {
                uint res = m68ki_read_16((((m68k_cpu.ar[m68k_cpu.ir & 7]) += 2) - 2));
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);

                d_dst[0] = (uint)((d_dst[0]) & ~0xffff) | res;

                m68k_cpu.n_flag = ((res) & 0x8000);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (4 + 4);
            }
Exemple #9
0
            static void m68000_lsl_r_32()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, m68k_cpu.ir & 7);
                uint shift = (m68k_cpu.dr[(m68k_cpu.ir >> 9) & 7]) & 0x3f;
                uint src = d_dst[0];
                uint res = (src << (int)shift);

                m68k_clks_left[0] -= (int)((shift << 1) + 8);
                if (shift != 0)
                {
                    if (shift < 32)
                    {
                        d_dst[0] = res;
                        m68k_cpu.x_flag = m68k_cpu.c_flag = (src >> (int)(32 - shift)) & 1;
                        m68k_cpu.n_flag = ((res) & 0x80000000);
                        m68k_cpu.not_z_flag = res;
                        m68k_cpu.v_flag = 0;
                        return;
                    }

                    d_dst[0] = 0;
                    m68k_cpu.x_flag = m68k_cpu.c_flag = (shift == 32 ? src & 1 : 0);
                    m68k_cpu.n_flag = 0;
                    m68k_cpu.not_z_flag = 0;
                    m68k_cpu.v_flag = 0;
                    return;
                }

                m68k_cpu.c_flag = 0;
                m68k_cpu.n_flag = ((res) & 0x80000000);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.v_flag = 0;
            }
Exemple #10
0
            static void m68000_mulu_i_16()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);
                uint res = m68ki_read_imm_16() * ((d_dst[0]) & 0xffff);

                d_dst[0] = res;

                m68k_cpu.not_z_flag = res;
                m68k_cpu.n_flag = ((res) & 0x80000000);
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (54 + 4);
            }
Exemple #11
0
            static void m68000_mulu_pcdi_16()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);
                uint old_pc = (m68k_cpu.pc += 2) - 2;
                uint ea = old_pc + (uint)MAKE_INT_16(m68ki_read_16(old_pc));
                uint res = m68ki_read_16(ea) * ((d_dst[0]) & 0xffff);

                d_dst[0] = res;

                m68k_cpu.not_z_flag = res;
                m68k_cpu.n_flag = ((res) & 0x80000000);
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (54 + 8);
            }
Exemple #12
0
            static void m68000_muls_pcix_16()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);
                uint res = (uint)MAKE_INT_16(m68ki_read_16(m68ki_get_ea_pcix())) * (uint)MAKE_INT_16(((d_dst[0]) & 0xffff));

                d_dst[0] = res;

                m68k_cpu.not_z_flag = res;
                m68k_cpu.n_flag = ((res) & 0x80000000);
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (54 + 10);
            }
Exemple #13
0
            static void m68020_cas2_32()
            {
                if ((m68k_cpu.mode & (4 | 8)) != 0)
                {
                    uint word2 = m68ki_read_imm_32();
                    UIntSubArray r_src1 = new UIntSubArray(m68k_cpu.dr,(int)(word2 >> 16) & 7);
                    uint ea1 = m68k_cpu_dar[word2 >> 31][(int)(word2 >> 28) & 7];
                    uint dst1 = m68ki_read_32(ea1);
                    uint res1 = (dst1 - r_src1[0]);
                    UIntSubArray r_src2 = new UIntSubArray(m68k_cpu.dr, (int)word2 & 7);
                    uint ea2 = m68k_cpu_dar[word2 >> 15][(int)(word2 >> 12) & 7];
                    uint dst2 = m68ki_read_32(ea2);
                    uint res2;

                    ; /* auto-disable (see m68kcpu.h) */
                    m68k_cpu.n_flag = ((res1) & 0x80000000);
                    m68k_cpu.not_z_flag = res1;
                    m68k_cpu.v_flag = (((~r_src1[0] & dst1 & ~res1) | (r_src1[0] & ~dst1 & res1)) & 0x80000000);
                    m68k_cpu.c_flag = (((r_src1[0] & ~dst1) | (res1 & ~dst1) | (r_src1[0] & res1)) & 0x80000000);

                    if (m68k_cpu.not_z_flag==0)
                    {
                        res2 = (dst2 - r_src2[0]);

                        m68k_cpu.n_flag = ((res2) & 0x80000000);
                        m68k_cpu.not_z_flag = res2;
                        m68k_cpu.v_flag = (((~r_src2[0] & dst2 & ~res2) | (r_src2[0] & ~dst2 & res2)) & 0x80000000);
                        m68k_cpu.c_flag = (((r_src2[0] & ~dst2) | (res2 & ~dst2) | (r_src2[0] & res2)) & 0x80000000);

                        if (m68k_cpu.not_z_flag==0)
                        {
                            m68ki_write_32(ea1, m68k_cpu.dr[(word2 >> 22) & 7]);
                            m68ki_write_32(ea2, m68k_cpu.dr[(word2 >> 6) & 7]);
                            m68k_clks_left[0] -= (22);
                            return;
                        }
                    }
                    r_src1[0] = dst1;
                    r_src2[0] = dst2;
                    m68k_clks_left[0] -= (25);
                    return;
                }
                m68000_illegal();
            }
Exemple #14
0
            static void m68020_cas_al_32()
            {
                if ((m68k_cpu.mode & (4 | 8)) != 0)
                {
                    uint word2 = m68ki_read_imm_16();
                    uint ea = m68ki_read_imm_32();
                    uint dst = m68ki_read_32(ea);
                    UIntSubArray d_src = new UIntSubArray(m68k_cpu.dr,(int)word2 & 7);
                    uint res = (dst - d_src[0]);

                    ; /* auto-disable (see m68kcpu.h) */
                    m68k_cpu.n_flag = ((res) & 0x80000000);
                    m68k_cpu.not_z_flag = res;
                    m68k_cpu.v_flag = (((~d_src[0] & dst & ~res) | (d_src[0] & ~dst & res)) & 0x80000000);
                    m68k_cpu.c_flag = (((d_src[0] & ~dst) | (res & ~dst) | (d_src[0] & res)) & 0x80000000);

                    if (m68k_cpu.not_z_flag!=0)
                        d_src[0] = dst;
                    else
                        m68ki_write_32(ea, m68k_cpu.dr[(word2 >> 6) & 7]);
                    m68k_clks_left[0] -= (15 + 16);
                    return;
                }
                m68000_illegal();
            }
Exemple #15
0
            static void m68000_add_er_i_32()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);
                uint src = m68ki_read_imm_32();
                uint dst = d_dst[0];
                uint res = d_dst[0] = (src + dst);

                m68k_cpu.n_flag = ((res) & 0x80000000);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.v_flag = (((src & dst & ~res) | (~src & ~dst & res)) & 0x80000000);
                m68k_cpu.x_flag = m68k_cpu.c_flag = (((src & dst) | (~res & dst) | (src & ~res)) & 0x80000000);
                m68k_clks_left[0] -= (6 + 10);
            }
Exemple #16
0
            static void m68000_lsl_s_32()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, m68k_cpu.ir & 7);
                uint shift = (((m68k_cpu.ir >> 9) - 1) & 7) + 1;
                uint src = d_dst[0];
                uint res = (src << (int)shift);

                d_dst[0] = res;

                m68k_cpu.n_flag = ((res) & 0x80000000);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.x_flag = m68k_cpu.c_flag = (src >> (int)(32 - shift)) & 1;
                m68k_cpu.v_flag = 0;
                m68k_clks_left[0] -= (int)((shift << 1) + 8);
            }
Exemple #17
0
            static void m68000_lsl_r_16()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, m68k_cpu.ir & 7);
                uint shift = (m68k_cpu.dr[(m68k_cpu.ir >> 9) & 7]) & 0x3f;
                uint src = ((d_dst[0]) & 0xffff);
                uint res = ((src << (int)shift) & 0xffff);

                m68k_clks_left[0] -= (int)((shift << 1) + 6);
                if (shift != 0)
                {
                    if (shift <= 16)
                    {
                        d_dst[0] = (uint)((d_dst[0]) & ~0xffff) | res;
                        m68k_cpu.x_flag = m68k_cpu.c_flag = (src >> (int)(16 - shift)) & 1;
                        m68k_cpu.n_flag = ((res) & 0x8000);
                        m68k_cpu.not_z_flag = res;
                        m68k_cpu.v_flag = 0;
                        return;
                    }

                    d_dst[0] &= 0xffff0000;
                    m68k_cpu.x_flag = m68k_cpu.c_flag = 0;
                    m68k_cpu.n_flag = 0;
                    m68k_cpu.not_z_flag = 0;
                    m68k_cpu.v_flag = 0;
                    return;
                }

                m68k_cpu.c_flag = 0;
                m68k_cpu.n_flag = ((res) & 0x8000);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.v_flag = 0;
            }
Exemple #18
0
            static void m68000_exg_da()
            {
                UIntSubArray reg_a = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);
                UIntSubArray reg_b = new UIntSubArray(m68k_cpu.ar, (int)m68k_cpu.ir & 7);
                uint tmp = reg_a[0];

                reg_a[0] = reg_b[0];
                reg_b[0] = tmp;

                m68k_clks_left[0] -= (6);
            }
Exemple #19
0
            static void m68000_move_dd_aw_8()
            {
                uint res = m68ki_read_8((uint)MAKE_INT_16(m68ki_read_imm_16()));
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);

                d_dst[0] = (uint)((d_dst[0]) & ~0xff) | res;

                m68k_cpu.n_flag = ((res) & 0x80);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (4 + 8);
            }
Exemple #20
0
            static void m68000_ext_32()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, m68k_cpu.ir & 7);

                d_dst[0] = ((d_dst[0]) & 0xffff) | (((d_dst[0]) & 0x8000) != 0 ? 0xffff0000 : 0);

                m68k_cpu.n_flag = ((d_dst[0]) & 0x80000000);
                m68k_cpu.not_z_flag = d_dst[0];
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (4);
            }
Exemple #21
0
            static void m68000_move_dd_pcix_16()
            {
                uint res = m68ki_read_16(m68ki_get_ea_pcix());
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);

                d_dst[0] = (uint)((d_dst[0]) & ~0xffff) | res;

                m68k_cpu.n_flag = ((res) & 0x8000);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (4 + 10);
            }
Exemple #22
0
            static void m68020_extb()
            {
                if ((m68k_cpu.mode & (4 | 8)) != 0)
                {
                    UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, m68k_cpu.ir & 7);

                    d_dst[0] = ((d_dst[0]) & 0xff) | (((d_dst[0]) & 0x80) != 0 ? 0xffffff00 : 0);

                    m68k_cpu.n_flag = ((d_dst[0]) & 0x80000000);
                    m68k_cpu.not_z_flag = d_dst[0];
                    m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                    m68k_clks_left[0] -= (4);
                    return;
                }
                m68000_illegal();
            }
Exemple #23
0
            static void m68000_move_dd_a_32()
            {
                uint res = ((m68k_cpu.ar[m68k_cpu.ir & 7]));
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);

                d_dst[0] = res;

                m68k_cpu.n_flag = ((res) & 0x80000000);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (4);
            }
Exemple #24
0
            static void m68000_link_16()
            {
                UIntSubArray a_dst = new UIntSubArray(m68k_cpu.ar, m68k_cpu.ir & 7);

                m68ki_write_32(m68k_cpu.ar[7] -= 4, a_dst[0]);
                a_dst[0] = m68k_cpu.ar[7];
                m68k_cpu.ar[7] = (m68k_cpu.ar[7] + (uint)MAKE_INT_16(m68ki_read_imm_16()));
                m68k_clks_left[0] -= (16);
            }
Exemple #25
0
            static void m68000_move_dd_pcdi_32()
            {
                uint old_pc = (m68k_cpu.pc += 2) - 2;
                uint ea = old_pc + (uint)MAKE_INT_16(m68ki_read_16(old_pc));
                uint res = m68ki_read_32(ea);
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);

                d_dst[0] = res;

                m68k_cpu.n_flag = ((res) & 0x80000000);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.v_flag = m68k_cpu.c_flag = 0;
                m68k_clks_left[0] -= (4 + 12);
            }
Exemple #26
0
            static void m68020_link_32()
            {
                if ((m68k_cpu.mode & (4 | 8)) != 0)
                {
                    UIntSubArray a_dst = new UIntSubArray(m68k_cpu.ar, m68k_cpu.ir & 7);

                    m68ki_write_32(m68k_cpu.ar[7] -= 4, a_dst[0]);
                    a_dst[0] = m68k_cpu.ar[7];
                    m68k_cpu.ar[7] = (m68k_cpu.ar[7] + m68ki_read_imm_32());
                    m68k_clks_left[0] -= (16);
                    return;
                }
                m68000_illegal();
            }
Exemple #27
0
            static void m68000_divu_pcdi_16()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);
                uint old_pc = (m68k_cpu.pc += 2) - 2;
                uint ea = old_pc + (uint)MAKE_INT_16(m68ki_read_16(old_pc));
                uint src = m68ki_read_16(ea);

                m68k_cpu.c_flag = 0;

                if (src != 0)
                {
                    uint quotient = d_dst[0] / src;
                    uint remainder = d_dst[0] % src;

                    if (quotient < 0x10000)
                    {
                        m68k_cpu.not_z_flag = quotient;
                        m68k_cpu.n_flag = ((quotient) & 0x8000);
                        m68k_cpu.v_flag = 0;
                        d_dst[0] = (((quotient) & 0xffff) | (remainder << 16));
                        m68k_clks_left[0] -= (140 + 8);
                        return;
                    }
                    m68k_cpu.v_flag = 1;
                    m68k_clks_left[0] -= (140 + 8);
                    return;
                }
                m68ki_interrupt(5);
            }
Exemple #28
0
            static void m68000_lsr_s_16()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, m68k_cpu.ir & 7);
                uint shift = (((m68k_cpu.ir >> 9) - 1) & 7) + 1;
                uint src = ((d_dst[0]) & 0xffff);
                uint res = src >> (int)shift;

                d_dst[0] = (uint)((d_dst[0]) & ~0xffff) | res;

                m68k_cpu.n_flag = 0;
                m68k_cpu.not_z_flag = res;
                m68k_cpu.x_flag = m68k_cpu.c_flag = (src >> (int)(shift - 1)) & 1;
                m68k_cpu.v_flag = 0;
                m68k_clks_left[0] -= (int)((shift << 1) + 6);
            }
Exemple #29
0
            static void m68000_divu_i_16()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, (int)(m68k_cpu.ir >> 9) & 7);
                uint src = m68ki_read_imm_16();

                m68k_cpu.c_flag = 0;

                if (src != 0)
                {
                    uint quotient = d_dst[0] / src;
                    uint remainder = d_dst[0] % src;

                    if (quotient < 0x10000)
                    {
                        m68k_cpu.not_z_flag = quotient;
                        m68k_cpu.n_flag = ((quotient) & 0x8000);
                        m68k_cpu.v_flag = 0;
                        d_dst[0] = (((quotient) & 0xffff) | (remainder << 16));
                        m68k_clks_left[0] -= (140 + 4);
                        return;
                    }
                    m68k_cpu.v_flag = 1;
                    m68k_clks_left[0] -= (140 + 4);
                    return;
                }
                m68ki_interrupt(5);
            }
Exemple #30
0
            static void m68000_lsl_s_8()
            {
                UIntSubArray d_dst = new UIntSubArray(m68k_cpu.dr, m68k_cpu.ir & 7);
                uint shift = (((m68k_cpu.ir >> 9) - 1) & 7) + 1;
                uint src = ((d_dst[0]) & 0xff);
                uint res = ((src << (int)shift) & 0xff);

                d_dst[0] = (uint)((d_dst[0]) & ~0xff) | res;

                m68k_cpu.n_flag = ((res) & 0x80);
                m68k_cpu.not_z_flag = res;
                m68k_cpu.x_flag = m68k_cpu.c_flag = shift > 8 ? 0 : (src >> (int)(8 - shift)) & 1;
                m68k_cpu.v_flag = 0;
                m68k_clks_left[0] -= (int)((shift << 1) + 6);
            }