From: Toni Wilen Date: Thu, 21 May 2020 18:12:33 +0000 (+0300) Subject: More 68010 bus error fixes. X-Git-Tag: 4400~30 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=e6e0a47d24a08a61d1839cf9be63bb1482a7d315;p=francis%2Fwinuae.git More 68010 bus error fixes. --- diff --git a/gencpu.cpp b/gencpu.cpp index dffa9fd1..ee5097a9 100644 --- a/gencpu.cpp +++ b/gencpu.cpp @@ -2308,10 +2308,20 @@ static void check_bus_error(const char *name, int offset, int write, int size, c out("m68k_areg(regs, dstreg) += 4;\n"); } } + if (!write) { + if (g_instr->dmode == Apdi || g_instr->dmode == absl) { + incpc("2"); + } else if (g_instr->dmode >= Ad16) { + incpc("4"); + } + } } else if (g_instr->mnemo == i_TAS) { if (!write) { out("regs.read_buffer = regs.irc & 0xff00;\n"); out("regs.read_buffer |= 0x80;\n"); + if (cpu_level == 1 && g_instr->smode >= Ad16) { + incpc("2"); + } } out("opcode |= 0x80000;\n"); } else if (g_instr->mnemo == i_CLR) { @@ -2326,6 +2336,12 @@ static void check_bus_error(const char *name, int offset, int write, int size, c out("m68k_areg(regs, srcreg) %c= %d;\n", g_instr->smode == Aipi ? '-' : '+', 1 << g_instr->size); } } + } else if (g_instr->mnemo == i_MOVE) { + if (write) { + if (g_instr->smode >= Aind && g_instr->smode < imm && g_instr->dmode == absl) { + out("regs.irc = dsta >> 16;\n"); + } + } } }