From: Toni Wilen Date: Sat, 21 Nov 2015 16:06:25 +0000 (+0200) Subject: BFFFO undocumented behavior. X-Git-Tag: 3220~27 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=f7885ad99f466593e1700d80c6b8e58e4335637e;p=francis%2Fwinuae.git BFFFO undocumented behavior. --- diff --git a/gencpu.cpp b/gencpu.cpp index e8a2aa6c..e52660e3 100644 --- a/gencpu.cpp +++ b/gencpu.cpp @@ -5007,14 +5007,17 @@ bccl_not68020: case i_BKPT: /* only needed for hardware emulators */ sync_m68k_pc (); printf ("\top_illg (opcode);\n"); + did_prefetch = -1; break; case i_CALLM: /* not present in 68030 */ sync_m68k_pc (); printf ("\top_illg (opcode);\n"); + did_prefetch = -1; break; case i_RTM: /* not present in 68030 */ sync_m68k_pc (); printf ("\top_illg (opcode);\n"); + did_prefetch = -1; break; case i_TRAPcc: if (curi->smode != am_unknown && curi->smode != am_illg) @@ -5065,6 +5068,8 @@ bccl_not68020: printf ("\tuae_u32 bdata[2];\n"); printf ("\tuae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f;\n"); printf ("\tint width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1;\n"); + if (curi->mnemo == i_BFFFO) + printf("\tuae_u32 offset2 = offset;\n"); if (curi->dmode == Dreg) { printf ("\tuae_u32 tmp = m68k_dreg(regs, dstreg);\n"); printf ("\toffset &= 0x1f;\n"); @@ -5096,8 +5101,8 @@ bccl_not68020: break; case i_BFFFO: printf ("\t{ uae_u32 mask = 1 << (width - 1);\n"); - printf ("\twhile (mask) { if (tmp & mask) break; mask >>= 1; offset++; }}\n"); - printf ("\tm68k_dreg (regs, (extra >> 12) & 7) = offset;\n"); + printf ("\twhile (mask) { if (tmp & mask) break; mask >>= 1; offset2++; }}\n"); + printf ("\tm68k_dreg (regs, (extra >> 12) & 7) = offset2;\n"); break; case i_BFSET: printf ("\ttmp = 0xffffffffu >> (32 - width);\n");