]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
More 68010 bus error fixes.
authorToni Wilen <twilen@winuae.net>
Thu, 21 May 2020 18:12:33 +0000 (21:12 +0300)
committerToni Wilen <twilen@winuae.net>
Thu, 21 May 2020 18:12:33 +0000 (21:12 +0300)
gencpu.cpp

index dffa9fd1554171acfd44821524e3de74617320cb..ee5097a9080a38c17717f3d1a7b5d18a4a7e6f7f 100644 (file)
@@ -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");
+                                       }
+                               }
                        }
                }