From f1bb2f4019acc767b9621048d58d5db599e2af66 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 22 Mar 2024 20:26:49 +0200 Subject: [PATCH] Branch/jump instruction bus error fixes. --- cpuemu_0.cpp | 16 +++ cpuemu_11.cpp | 342 ++++++++++++++++++++++++++++---------------------- cpuemu_13.cpp | 342 ++++++++++++++++++++++++++++---------------------- cpuemu_20.cpp | 7 ++ cpuemu_21.cpp | 7 ++ cpuemu_22.cpp | 7 ++ cpuemu_23.cpp | 7 ++ cpuemu_24.cpp | 7 ++ cpuemu_31.cpp | 7 ++ cpuemu_32.cpp | 7 ++ cpuemu_33.cpp | 7 ++ cpuemu_34.cpp | 7 ++ cpuemu_35.cpp | 7 ++ cpuemu_40.cpp | 44 +++++++ cpuemu_50.cpp | 16 +++ gencpu.cpp | 32 +++-- 16 files changed, 555 insertions(+), 307 deletions(-) diff --git a/cpuemu_0.cpp b/cpuemu_0.cpp index ace50936..a1f821b7 100644 --- a/cpuemu_0.cpp +++ b/cpuemu_0.cpp @@ -19487,6 +19487,7 @@ uae_u32 REGPARAM2 op_4ed0_0_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -19506,6 +19507,7 @@ uae_u32 REGPARAM2 op_4ee8_0_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -19527,6 +19529,7 @@ uae_u32 REGPARAM2 op_4ef0_0_ff(uae_u32 opcode) uaecptr srca; m68k_incpc(2); srca = get_disp_ea_020(m68k_areg(regs, srcreg), 0); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -19545,6 +19548,7 @@ uae_u32 REGPARAM2 op_4ef8_0_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -19563,6 +19567,7 @@ uae_u32 REGPARAM2 op_4ef9_0_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = get_dilong(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -19581,6 +19586,7 @@ uae_u32 REGPARAM2 op_4efa_0_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpc() + 2; srca += (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -19601,6 +19607,7 @@ uae_u32 REGPARAM2 op_4efb_0_ff(uae_u32 opcode) m68k_incpc(2); uaecptr tmppc = m68k_getpc(); srca = get_disp_ea_020(tmppc, 0); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -51988,6 +51995,7 @@ uae_u32 REGPARAM2 op_4ef0_4_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = get_disp_ea_000(m68k_areg(regs, srcreg), get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -52006,6 +52014,7 @@ uae_u32 REGPARAM2 op_4efb_4_ff(uae_u32 opcode) uaecptr srca; uaecptr tmppc = m68k_getpc() + 2; srca = get_disp_ea_000(tmppc, get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -60572,6 +60581,7 @@ uae_u32 REGPARAM2 op_4ed0_5_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -60590,6 +60600,7 @@ uae_u32 REGPARAM2 op_4ee8_5_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -60609,6 +60620,7 @@ uae_u32 REGPARAM2 op_4ef0_5_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = get_disp_ea_000(m68k_areg(regs, srcreg), get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -60626,6 +60638,7 @@ uae_u32 REGPARAM2 op_4ef8_5_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -60643,6 +60656,7 @@ uae_u32 REGPARAM2 op_4ef9_5_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = get_dilong(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -60660,6 +60674,7 @@ uae_u32 REGPARAM2 op_4efa_5_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpc() + 2; srca += (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpc(2); @@ -60678,6 +60693,7 @@ uae_u32 REGPARAM2 op_4efb_5_ff(uae_u32 opcode) uaecptr srca; uaecptr tmppc = m68k_getpc() + 2; srca = get_disp_ea_000(tmppc, get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpc(2); diff --git a/cpuemu_11.cpp b/cpuemu_11.cpp index c4b4d97c..16519a2b 100644 --- a/cpuemu_11.cpp +++ b/cpuemu_11.cpp @@ -42423,10 +42423,11 @@ uae_u32 REGPARAM2 op_4e73_11_ff(uae_u32 opcode) #ifdef DEBUGGER branch_stack_pop_rte(oldpc); #endif + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 20 * CYCLE_UNIT / 2 + count_cycles; } @@ -42435,7 +42436,6 @@ uae_u32 REGPARAM2 op_4e73_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 24 * CYCLE_UNIT / 2 + count_cycles; } @@ -42535,10 +42535,11 @@ uae_u32 REGPARAM2 op_4e75_11_ff(uae_u32 opcode) exception3_read_prefetch_only(opcode, faultpc); return 8 * CYCLE_UNIT / 2 + count_cycles; } + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 12 * CYCLE_UNIT / 2 + count_cycles; } @@ -42547,7 +42548,6 @@ uae_u32 REGPARAM2 op_4e75_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 16 * CYCLE_UNIT / 2 + count_cycles; } @@ -42633,10 +42633,11 @@ uae_u32 REGPARAM2 op_4e77_11_ff(uae_u32 opcode) exception3_read_prefetch_only(opcode, faultpc); return 12 * CYCLE_UNIT / 2 + count_cycles; } + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 16 * CYCLE_UNIT / 2 + count_cycles; } @@ -42645,7 +42646,6 @@ uae_u32 REGPARAM2 op_4e77_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 20 * CYCLE_UNIT / 2 + count_cycles; } @@ -42743,6 +42743,7 @@ uae_u32 REGPARAM2 op_4e90_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 2; exception2_fetch_opcode(opcode, 0, pcoffset); return 4 * CYCLE_UNIT / 2 + count_cycles; } @@ -42776,7 +42777,7 @@ uae_u32 REGPARAM2 op_4e90_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(0, 2, 0); + exception2_fetch_opcode(opcode, 2, 0); return 16 * CYCLE_UNIT / 2 + count_cycles; } return 16 * CYCLE_UNIT / 2 + count_cycles; @@ -42804,6 +42805,7 @@ uae_u32 REGPARAM2 op_4ea8_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -42871,6 +42873,7 @@ uae_u32 REGPARAM2 op_4eb0_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -42930,6 +42933,7 @@ uae_u32 REGPARAM2 op_4eb8_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -42994,6 +42998,7 @@ uae_u32 REGPARAM2 op_4eb9_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 6; exception2_fetch_opcode(opcode, 0, pcoffset); return 8 * CYCLE_UNIT / 2 + count_cycles; } @@ -43054,6 +43059,7 @@ uae_u32 REGPARAM2 op_4eba_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -43120,6 +43126,7 @@ uae_u32 REGPARAM2 op_4ebb_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -43169,6 +43176,7 @@ uae_u32 REGPARAM2 op_4ed0_11_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -43178,7 +43186,8 @@ uae_u32 REGPARAM2 op_4ed0_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 4 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -43186,7 +43195,7 @@ uae_u32 REGPARAM2 op_4ed0_11_ff(uae_u32 opcode) opcode = regs.ir; if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(0, 2, 0); + exception2_fetch_opcode(opcode, 2, 0); return 8 * CYCLE_UNIT / 2 + count_cycles; } return 8 * CYCLE_UNIT / 2 + count_cycles; @@ -43202,6 +43211,7 @@ uae_u32 REGPARAM2 op_4ee8_11_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)regs.irc; + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -43212,7 +43222,8 @@ uae_u32 REGPARAM2 op_4ee8_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -43241,6 +43252,7 @@ uae_u32 REGPARAM2 op_4ef0_11_ff(uae_u32 opcode) exception2_fetch_opcode(opcode, 2, 0); return 4 * CYCLE_UNIT / 2 + count_cycles; } + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -43251,7 +43263,8 @@ uae_u32 REGPARAM2 op_4ef0_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -43273,6 +43286,7 @@ uae_u32 REGPARAM2 op_4ef8_11_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)regs.irc; + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -43283,7 +43297,8 @@ uae_u32 REGPARAM2 op_4ef8_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -43311,6 +43326,7 @@ uae_u32 REGPARAM2 op_4ef9_11_ff(uae_u32 opcode) exception2_fetch(opcode, 4, -2); return 4 * CYCLE_UNIT / 2 + count_cycles; } + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -43320,7 +43336,8 @@ uae_u32 REGPARAM2 op_4ef9_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 8 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -43343,6 +43360,7 @@ uae_u32 REGPARAM2 op_4efa_11_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)regs.irc; + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -43353,7 +43371,8 @@ uae_u32 REGPARAM2 op_4efa_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -43381,6 +43400,7 @@ uae_u32 REGPARAM2 op_4efb_11_ff(uae_u32 opcode) exception2_fetch_opcode(opcode, 2, 0); return 4 * CYCLE_UNIT / 2 + count_cycles; } + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -43391,7 +43411,8 @@ uae_u32 REGPARAM2 op_4efb_11_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -52609,10 +52630,11 @@ uae_u32 REGPARAM2 op_6000_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -52621,7 +52643,6 @@ uae_u32 REGPARAM2 op_6000_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -52669,10 +52690,11 @@ uae_u32 REGPARAM2 op_6001_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -52681,7 +52703,6 @@ uae_u32 REGPARAM2 op_6001_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -52914,10 +52935,11 @@ uae_u32 REGPARAM2 op_6200_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -52926,7 +52948,6 @@ uae_u32 REGPARAM2 op_6200_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -52974,10 +52995,11 @@ uae_u32 REGPARAM2 op_6201_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -52986,7 +53008,6 @@ uae_u32 REGPARAM2 op_6201_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53049,10 +53070,11 @@ uae_u32 REGPARAM2 op_6300_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53061,7 +53083,6 @@ uae_u32 REGPARAM2 op_6300_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53109,10 +53130,11 @@ uae_u32 REGPARAM2 op_6301_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53121,7 +53143,6 @@ uae_u32 REGPARAM2 op_6301_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53184,10 +53205,11 @@ uae_u32 REGPARAM2 op_6400_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53196,7 +53218,6 @@ uae_u32 REGPARAM2 op_6400_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53244,10 +53265,11 @@ uae_u32 REGPARAM2 op_6401_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53256,7 +53278,6 @@ uae_u32 REGPARAM2 op_6401_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53319,10 +53340,11 @@ uae_u32 REGPARAM2 op_6500_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53331,7 +53353,6 @@ uae_u32 REGPARAM2 op_6500_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53379,10 +53400,11 @@ uae_u32 REGPARAM2 op_6501_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53391,7 +53413,6 @@ uae_u32 REGPARAM2 op_6501_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53454,10 +53475,11 @@ uae_u32 REGPARAM2 op_6600_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53466,7 +53488,6 @@ uae_u32 REGPARAM2 op_6600_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53514,10 +53535,11 @@ uae_u32 REGPARAM2 op_6601_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53526,7 +53548,6 @@ uae_u32 REGPARAM2 op_6601_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53589,10 +53610,11 @@ uae_u32 REGPARAM2 op_6700_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53601,7 +53623,6 @@ uae_u32 REGPARAM2 op_6700_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53649,10 +53670,11 @@ uae_u32 REGPARAM2 op_6701_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53661,7 +53683,6 @@ uae_u32 REGPARAM2 op_6701_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53724,10 +53745,11 @@ uae_u32 REGPARAM2 op_6800_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53736,7 +53758,6 @@ uae_u32 REGPARAM2 op_6800_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53784,10 +53805,11 @@ uae_u32 REGPARAM2 op_6801_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53796,7 +53818,6 @@ uae_u32 REGPARAM2 op_6801_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53859,10 +53880,11 @@ uae_u32 REGPARAM2 op_6900_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53871,7 +53893,6 @@ uae_u32 REGPARAM2 op_6900_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53919,10 +53940,11 @@ uae_u32 REGPARAM2 op_6901_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -53931,7 +53953,6 @@ uae_u32 REGPARAM2 op_6901_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -53994,10 +54015,11 @@ uae_u32 REGPARAM2 op_6a00_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54006,7 +54028,6 @@ uae_u32 REGPARAM2 op_6a00_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54054,10 +54075,11 @@ uae_u32 REGPARAM2 op_6a01_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54066,7 +54088,6 @@ uae_u32 REGPARAM2 op_6a01_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54129,10 +54150,11 @@ uae_u32 REGPARAM2 op_6b00_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54141,7 +54163,6 @@ uae_u32 REGPARAM2 op_6b00_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54189,10 +54210,11 @@ uae_u32 REGPARAM2 op_6b01_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54201,7 +54223,6 @@ uae_u32 REGPARAM2 op_6b01_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54264,10 +54285,11 @@ uae_u32 REGPARAM2 op_6c00_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54276,7 +54298,6 @@ uae_u32 REGPARAM2 op_6c00_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54324,10 +54345,11 @@ uae_u32 REGPARAM2 op_6c01_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54336,7 +54358,6 @@ uae_u32 REGPARAM2 op_6c01_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54399,10 +54420,11 @@ uae_u32 REGPARAM2 op_6d00_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54411,7 +54433,6 @@ uae_u32 REGPARAM2 op_6d00_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54459,10 +54480,11 @@ uae_u32 REGPARAM2 op_6d01_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54471,7 +54493,6 @@ uae_u32 REGPARAM2 op_6d01_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54534,10 +54555,11 @@ uae_u32 REGPARAM2 op_6e00_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54546,7 +54568,6 @@ uae_u32 REGPARAM2 op_6e00_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54594,10 +54615,11 @@ uae_u32 REGPARAM2 op_6e01_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54606,7 +54628,6 @@ uae_u32 REGPARAM2 op_6e01_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54669,10 +54690,11 @@ uae_u32 REGPARAM2 op_6f00_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54681,7 +54703,6 @@ uae_u32 REGPARAM2 op_6f00_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -54729,10 +54750,11 @@ uae_u32 REGPARAM2 op_6f01_11_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -54741,7 +54763,6 @@ uae_u32 REGPARAM2 op_6f01_11_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -122105,10 +122126,11 @@ uae_u32 REGPARAM2 op_4e73_12_ff(uae_u32 opcode) #ifdef DEBUGGER branch_stack_pop_rte(oldpc); #endif + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 16 * CYCLE_UNIT / 2 + count_cycles; } @@ -122118,7 +122140,6 @@ uae_u32 REGPARAM2 op_4e73_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 20 * CYCLE_UNIT / 2 + count_cycles; } @@ -122162,10 +122183,11 @@ uae_u32 REGPARAM2 op_4e75_12_ff(uae_u32 opcode) exception3_read_prefetch_only(opcode, faultpc); return 8 * CYCLE_UNIT / 2 + count_cycles; } + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 12 * CYCLE_UNIT / 2 + count_cycles; } @@ -122175,7 +122197,6 @@ uae_u32 REGPARAM2 op_4e75_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 16 * CYCLE_UNIT / 2 + count_cycles; } @@ -122274,10 +122295,11 @@ uae_u32 REGPARAM2 op_4e77_12_ff(uae_u32 opcode) exception3_read_prefetch_only(opcode, faultpc); return 12 * CYCLE_UNIT / 2 + count_cycles; } + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 16 * CYCLE_UNIT / 2 + count_cycles; } @@ -122287,7 +122309,6 @@ uae_u32 REGPARAM2 op_4e77_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 20 * CYCLE_UNIT / 2 + count_cycles; } @@ -122315,6 +122336,7 @@ uae_u32 REGPARAM2 op_4e90_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 2; exception2_fetch_opcode(opcode, 0, pcoffset); return 4 * CYCLE_UNIT / 2 + count_cycles; } @@ -122348,7 +122370,7 @@ uae_u32 REGPARAM2 op_4e90_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(0, 2, 0); + exception2_fetch_opcode(opcode, 2, 0); return 16 * CYCLE_UNIT / 2 + count_cycles; } return 16 * CYCLE_UNIT / 2 + count_cycles; @@ -122376,6 +122398,7 @@ uae_u32 REGPARAM2 op_4ea8_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -122444,6 +122467,7 @@ uae_u32 REGPARAM2 op_4eb0_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -122504,6 +122528,7 @@ uae_u32 REGPARAM2 op_4eb8_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -122569,6 +122594,7 @@ uae_u32 REGPARAM2 op_4eb9_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 6; exception2_fetch_opcode(opcode, 0, pcoffset); return 8 * CYCLE_UNIT / 2 + count_cycles; } @@ -122630,6 +122656,7 @@ uae_u32 REGPARAM2 op_4eba_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -122697,6 +122724,7 @@ uae_u32 REGPARAM2 op_4ebb_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -122747,6 +122775,7 @@ uae_u32 REGPARAM2 op_4ed0_12_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -122756,7 +122785,8 @@ uae_u32 REGPARAM2 op_4ed0_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 4 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -122764,7 +122794,7 @@ uae_u32 REGPARAM2 op_4ed0_12_ff(uae_u32 opcode) opcode = regs.ir; if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(0, 2, 0); + exception2_fetch_opcode(opcode, 2, 0); return 8 * CYCLE_UNIT / 2 + count_cycles; } return 8 * CYCLE_UNIT / 2 + count_cycles; @@ -122780,6 +122810,7 @@ uae_u32 REGPARAM2 op_4ee8_12_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)regs.irc; + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -122790,7 +122821,8 @@ uae_u32 REGPARAM2 op_4ee8_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -122820,6 +122852,7 @@ uae_u32 REGPARAM2 op_4ef0_12_ff(uae_u32 opcode) exception2_fetch_opcode(opcode, 2, 0); return 4 * CYCLE_UNIT / 2 + count_cycles; } + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -122830,7 +122863,8 @@ uae_u32 REGPARAM2 op_4ef0_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -122853,6 +122887,7 @@ uae_u32 REGPARAM2 op_4ef8_12_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)regs.irc; + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -122863,7 +122898,8 @@ uae_u32 REGPARAM2 op_4ef8_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -122892,6 +122928,7 @@ uae_u32 REGPARAM2 op_4ef9_12_ff(uae_u32 opcode) exception2_fetch(opcode, 4, -2); return 4 * CYCLE_UNIT / 2 + count_cycles; } + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -122901,7 +122938,8 @@ uae_u32 REGPARAM2 op_4ef9_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 8 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -122925,6 +122963,7 @@ uae_u32 REGPARAM2 op_4efa_12_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)regs.irc; + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -122935,7 +122974,8 @@ uae_u32 REGPARAM2 op_4efa_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -122964,6 +123004,7 @@ uae_u32 REGPARAM2 op_4efb_12_ff(uae_u32 opcode) exception2_fetch_opcode(opcode, 2, 0); return 4 * CYCLE_UNIT / 2 + count_cycles; } + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -122974,7 +123015,8 @@ uae_u32 REGPARAM2 op_4efb_12_ff(uae_u32 opcode) get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } regs.ir = regs.irc; @@ -131916,10 +131958,11 @@ uae_u32 REGPARAM2 op_6000_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -131929,7 +131972,6 @@ uae_u32 REGPARAM2 op_6000_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -131971,10 +132013,11 @@ uae_u32 REGPARAM2 op_6001_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -131984,7 +132027,6 @@ uae_u32 REGPARAM2 op_6001_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132221,10 +132263,11 @@ uae_u32 REGPARAM2 op_6200_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132234,7 +132277,6 @@ uae_u32 REGPARAM2 op_6200_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132276,10 +132318,11 @@ uae_u32 REGPARAM2 op_6201_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132289,7 +132332,6 @@ uae_u32 REGPARAM2 op_6201_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132347,10 +132389,11 @@ uae_u32 REGPARAM2 op_6300_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132360,7 +132403,6 @@ uae_u32 REGPARAM2 op_6300_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132402,10 +132444,11 @@ uae_u32 REGPARAM2 op_6301_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132415,7 +132458,6 @@ uae_u32 REGPARAM2 op_6301_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132473,10 +132515,11 @@ uae_u32 REGPARAM2 op_6400_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132486,7 +132529,6 @@ uae_u32 REGPARAM2 op_6400_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132528,10 +132570,11 @@ uae_u32 REGPARAM2 op_6401_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132541,7 +132584,6 @@ uae_u32 REGPARAM2 op_6401_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132599,10 +132641,11 @@ uae_u32 REGPARAM2 op_6500_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132612,7 +132655,6 @@ uae_u32 REGPARAM2 op_6500_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132654,10 +132696,11 @@ uae_u32 REGPARAM2 op_6501_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132667,7 +132710,6 @@ uae_u32 REGPARAM2 op_6501_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132725,10 +132767,11 @@ uae_u32 REGPARAM2 op_6600_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132738,7 +132781,6 @@ uae_u32 REGPARAM2 op_6600_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132780,10 +132822,11 @@ uae_u32 REGPARAM2 op_6601_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132793,7 +132836,6 @@ uae_u32 REGPARAM2 op_6601_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132851,10 +132893,11 @@ uae_u32 REGPARAM2 op_6700_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132864,7 +132907,6 @@ uae_u32 REGPARAM2 op_6700_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132906,10 +132948,11 @@ uae_u32 REGPARAM2 op_6701_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132919,7 +132962,6 @@ uae_u32 REGPARAM2 op_6701_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -132977,10 +133019,11 @@ uae_u32 REGPARAM2 op_6800_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -132990,7 +133033,6 @@ uae_u32 REGPARAM2 op_6800_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133032,10 +133074,11 @@ uae_u32 REGPARAM2 op_6801_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133045,7 +133088,6 @@ uae_u32 REGPARAM2 op_6801_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133103,10 +133145,11 @@ uae_u32 REGPARAM2 op_6900_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133116,7 +133159,6 @@ uae_u32 REGPARAM2 op_6900_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133158,10 +133200,11 @@ uae_u32 REGPARAM2 op_6901_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133171,7 +133214,6 @@ uae_u32 REGPARAM2 op_6901_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133229,10 +133271,11 @@ uae_u32 REGPARAM2 op_6a00_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133242,7 +133285,6 @@ uae_u32 REGPARAM2 op_6a00_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133284,10 +133326,11 @@ uae_u32 REGPARAM2 op_6a01_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133297,7 +133340,6 @@ uae_u32 REGPARAM2 op_6a01_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133355,10 +133397,11 @@ uae_u32 REGPARAM2 op_6b00_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133368,7 +133411,6 @@ uae_u32 REGPARAM2 op_6b00_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133410,10 +133452,11 @@ uae_u32 REGPARAM2 op_6b01_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133423,7 +133466,6 @@ uae_u32 REGPARAM2 op_6b01_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133481,10 +133523,11 @@ uae_u32 REGPARAM2 op_6c00_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133494,7 +133537,6 @@ uae_u32 REGPARAM2 op_6c00_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133536,10 +133578,11 @@ uae_u32 REGPARAM2 op_6c01_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133549,7 +133592,6 @@ uae_u32 REGPARAM2 op_6c01_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133607,10 +133649,11 @@ uae_u32 REGPARAM2 op_6d00_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133620,7 +133663,6 @@ uae_u32 REGPARAM2 op_6d00_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133662,10 +133704,11 @@ uae_u32 REGPARAM2 op_6d01_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133675,7 +133718,6 @@ uae_u32 REGPARAM2 op_6d01_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133733,10 +133775,11 @@ uae_u32 REGPARAM2 op_6e00_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133746,7 +133789,6 @@ uae_u32 REGPARAM2 op_6e00_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133788,10 +133830,11 @@ uae_u32 REGPARAM2 op_6e01_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133801,7 +133844,6 @@ uae_u32 REGPARAM2 op_6e01_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133859,10 +133901,11 @@ uae_u32 REGPARAM2 op_6f00_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133872,7 +133915,6 @@ uae_u32 REGPARAM2 op_6f00_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } @@ -133914,10 +133956,11 @@ uae_u32 REGPARAM2 op_6f01_12_ff(uae_u32 opcode) return 2 * CYCLE_UNIT / 2 + count_cycles; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return 6 * CYCLE_UNIT / 2 + count_cycles; } @@ -133927,7 +133970,6 @@ uae_u32 REGPARAM2 op_6f01_12_ff(uae_u32 opcode) get_word_000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return 10 * CYCLE_UNIT / 2 + count_cycles; } diff --git a/cpuemu_13.cpp b/cpuemu_13.cpp index 7d9bb900..1d4e926c 100644 --- a/cpuemu_13.cpp +++ b/cpuemu_13.cpp @@ -42645,10 +42645,11 @@ void REGPARAM2 op_4e73_13_ff(uae_u32 opcode) #ifdef DEBUGGER branch_stack_pop_rte(oldpc); #endif + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -42658,7 +42659,6 @@ void REGPARAM2 op_4e73_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -42757,10 +42757,11 @@ void REGPARAM2 op_4e75_13_ff(uae_u32 opcode) exception3_read_prefetch_only(opcode, faultpc); return; } + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -42770,7 +42771,6 @@ void REGPARAM2 op_4e75_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -42856,10 +42856,11 @@ void REGPARAM2 op_4e77_13_ff(uae_u32 opcode) exception3_read_prefetch_only(opcode, faultpc); return; } + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -42869,7 +42870,6 @@ void REGPARAM2 op_4e77_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -42969,6 +42969,7 @@ void REGPARAM2 op_4e90_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 2; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -43002,7 +43003,7 @@ void REGPARAM2 op_4e90_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(0, 2, 0); + exception2_fetch_opcode(opcode, 2, 0); return; } return; @@ -43031,6 +43032,7 @@ void REGPARAM2 op_4ea8_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -43099,6 +43101,7 @@ void REGPARAM2 op_4eb0_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -43159,6 +43162,7 @@ void REGPARAM2 op_4eb8_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -43223,6 +43227,7 @@ void REGPARAM2 op_4eb9_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 6; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -43284,6 +43289,7 @@ void REGPARAM2 op_4eba_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -43351,6 +43357,7 @@ void REGPARAM2 op_4ebb_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -43400,6 +43407,7 @@ void REGPARAM2 op_4ed0_13_ff(uae_u32 opcode) uaecptr srca; srca = m68k_areg(regs, srcreg); ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -43409,7 +43417,8 @@ void REGPARAM2 op_4ed0_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -43417,7 +43426,7 @@ void REGPARAM2 op_4ed0_13_ff(uae_u32 opcode) opcode = regs.ir; if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(0, 2, 0); + exception2_fetch_opcode(opcode, 2, 0); return; } return; @@ -43433,6 +43442,7 @@ void REGPARAM2 op_4ee8_13_ff(uae_u32 opcode) uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)regs.irc; ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { do_cycles_ce000_internal(2); m68k_incpci(2); @@ -43444,7 +43454,8 @@ void REGPARAM2 op_4ee8_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -43473,6 +43484,7 @@ void REGPARAM2 op_4ef0_13_ff(uae_u32 opcode) return; } ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { do_cycles_ce000_internal(6); m68k_incpci(2); @@ -43484,7 +43496,8 @@ void REGPARAM2 op_4ef0_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -43506,6 +43519,7 @@ void REGPARAM2 op_4ef8_13_ff(uae_u32 opcode) uaecptr srca; srca = (uae_s32)(uae_s16)regs.irc; ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { do_cycles_ce000_internal(2); m68k_incpci(2); @@ -43517,7 +43531,8 @@ void REGPARAM2 op_4ef8_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -43545,6 +43560,7 @@ void REGPARAM2 op_4ef9_13_ff(uae_u32 opcode) return; } ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -43554,7 +43570,8 @@ void REGPARAM2 op_4ef9_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -43577,6 +43594,7 @@ void REGPARAM2 op_4efa_13_ff(uae_u32 opcode) srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)regs.irc; ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { do_cycles_ce000_internal(2); m68k_incpci(2); @@ -43588,7 +43606,8 @@ void REGPARAM2 op_4efa_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -43616,6 +43635,7 @@ void REGPARAM2 op_4efb_13_ff(uae_u32 opcode) return; } ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { do_cycles_ce000_internal(6); m68k_incpci(2); @@ -43627,7 +43647,8 @@ void REGPARAM2 op_4efb_13_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -52991,10 +53012,11 @@ void REGPARAM2 op_6000_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53004,7 +53026,6 @@ void REGPARAM2 op_6000_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53054,10 +53075,11 @@ void REGPARAM2 op_6001_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53067,7 +53089,6 @@ void REGPARAM2 op_6001_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53309,10 +53330,11 @@ void REGPARAM2 op_6200_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53322,7 +53344,6 @@ void REGPARAM2 op_6200_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53372,10 +53393,11 @@ void REGPARAM2 op_6201_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53385,7 +53407,6 @@ void REGPARAM2 op_6201_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53451,10 +53472,11 @@ void REGPARAM2 op_6300_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53464,7 +53486,6 @@ void REGPARAM2 op_6300_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53514,10 +53535,11 @@ void REGPARAM2 op_6301_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53527,7 +53549,6 @@ void REGPARAM2 op_6301_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53593,10 +53614,11 @@ void REGPARAM2 op_6400_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53606,7 +53628,6 @@ void REGPARAM2 op_6400_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53656,10 +53677,11 @@ void REGPARAM2 op_6401_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53669,7 +53691,6 @@ void REGPARAM2 op_6401_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53735,10 +53756,11 @@ void REGPARAM2 op_6500_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53748,7 +53770,6 @@ void REGPARAM2 op_6500_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53798,10 +53819,11 @@ void REGPARAM2 op_6501_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53811,7 +53833,6 @@ void REGPARAM2 op_6501_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53877,10 +53898,11 @@ void REGPARAM2 op_6600_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53890,7 +53912,6 @@ void REGPARAM2 op_6600_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -53940,10 +53961,11 @@ void REGPARAM2 op_6601_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -53953,7 +53975,6 @@ void REGPARAM2 op_6601_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54019,10 +54040,11 @@ void REGPARAM2 op_6700_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54032,7 +54054,6 @@ void REGPARAM2 op_6700_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54082,10 +54103,11 @@ void REGPARAM2 op_6701_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54095,7 +54117,6 @@ void REGPARAM2 op_6701_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54161,10 +54182,11 @@ void REGPARAM2 op_6800_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54174,7 +54196,6 @@ void REGPARAM2 op_6800_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54224,10 +54245,11 @@ void REGPARAM2 op_6801_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54237,7 +54259,6 @@ void REGPARAM2 op_6801_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54303,10 +54324,11 @@ void REGPARAM2 op_6900_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54316,7 +54338,6 @@ void REGPARAM2 op_6900_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54366,10 +54387,11 @@ void REGPARAM2 op_6901_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54379,7 +54401,6 @@ void REGPARAM2 op_6901_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54445,10 +54466,11 @@ void REGPARAM2 op_6a00_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54458,7 +54480,6 @@ void REGPARAM2 op_6a00_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54508,10 +54529,11 @@ void REGPARAM2 op_6a01_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54521,7 +54543,6 @@ void REGPARAM2 op_6a01_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54587,10 +54608,11 @@ void REGPARAM2 op_6b00_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54600,7 +54622,6 @@ void REGPARAM2 op_6b00_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54650,10 +54671,11 @@ void REGPARAM2 op_6b01_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54663,7 +54685,6 @@ void REGPARAM2 op_6b01_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54729,10 +54750,11 @@ void REGPARAM2 op_6c00_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54742,7 +54764,6 @@ void REGPARAM2 op_6c00_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54792,10 +54813,11 @@ void REGPARAM2 op_6c01_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54805,7 +54827,6 @@ void REGPARAM2 op_6c01_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54871,10 +54892,11 @@ void REGPARAM2 op_6d00_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54884,7 +54906,6 @@ void REGPARAM2 op_6d00_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -54934,10 +54955,11 @@ void REGPARAM2 op_6d01_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -54947,7 +54969,6 @@ void REGPARAM2 op_6d01_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -55013,10 +55034,11 @@ void REGPARAM2 op_6e00_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -55026,7 +55048,6 @@ void REGPARAM2 op_6e00_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -55076,10 +55097,11 @@ void REGPARAM2 op_6e01_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -55089,7 +55111,6 @@ void REGPARAM2 op_6e01_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -55155,10 +55176,11 @@ void REGPARAM2 op_6f00_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -55168,7 +55190,6 @@ void REGPARAM2 op_6f00_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -55218,10 +55239,11 @@ void REGPARAM2 op_6f01_13_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -55231,7 +55253,6 @@ void REGPARAM2 op_6f01_13_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -123306,10 +123327,11 @@ void REGPARAM2 op_4e73_14_ff(uae_u32 opcode) #ifdef DEBUGGER branch_stack_pop_rte(oldpc); #endif + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -123320,7 +123342,6 @@ void REGPARAM2 op_4e73_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -123363,10 +123384,11 @@ void REGPARAM2 op_4e75_14_ff(uae_u32 opcode) exception3_read_prefetch_only(opcode, faultpc); return; } + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -123377,7 +123399,6 @@ void REGPARAM2 op_4e75_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -123479,10 +123500,11 @@ void REGPARAM2 op_4e77_14_ff(uae_u32 opcode) exception3_read_prefetch_only(opcode, faultpc); return; } + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -123493,7 +123515,6 @@ void REGPARAM2 op_4e77_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -123521,6 +123542,7 @@ void REGPARAM2 op_4e90_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 2; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -123554,7 +123576,7 @@ void REGPARAM2 op_4e90_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(0, 2, 0); + exception2_fetch_opcode(opcode, 2, 0); return; } return; @@ -123583,6 +123605,7 @@ void REGPARAM2 op_4ea8_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -123652,6 +123675,7 @@ void REGPARAM2 op_4eb0_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -123713,6 +123737,7 @@ void REGPARAM2 op_4eb8_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -123778,6 +123803,7 @@ void REGPARAM2 op_4eb9_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 6; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -123840,6 +123866,7 @@ void REGPARAM2 op_4eba_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -123908,6 +123935,7 @@ void REGPARAM2 op_4ebb_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; + pcoffset = oldpc + 4; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -123958,6 +123986,7 @@ void REGPARAM2 op_4ed0_14_ff(uae_u32 opcode) uaecptr srca; srca = m68k_areg(regs, srcreg); ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -123967,7 +123996,8 @@ void REGPARAM2 op_4ed0_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -123975,7 +124005,7 @@ void REGPARAM2 op_4ed0_14_ff(uae_u32 opcode) opcode = regs.ir; if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(0, 2, 0); + exception2_fetch_opcode(opcode, 2, 0); return; } return; @@ -123991,6 +124021,7 @@ void REGPARAM2 op_4ee8_14_ff(uae_u32 opcode) uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)regs.irc; ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { do_cycles_ce000_internal(2); m68k_incpci(2); @@ -124002,7 +124033,8 @@ void REGPARAM2 op_4ee8_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -124032,6 +124064,7 @@ void REGPARAM2 op_4ef0_14_ff(uae_u32 opcode) return; } ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { do_cycles_ce000_internal(6); m68k_incpci(2); @@ -124043,7 +124076,8 @@ void REGPARAM2 op_4ef0_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -124066,6 +124100,7 @@ void REGPARAM2 op_4ef8_14_ff(uae_u32 opcode) uaecptr srca; srca = (uae_s32)(uae_s16)regs.irc; ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { do_cycles_ce000_internal(2); m68k_incpci(2); @@ -124077,7 +124112,8 @@ void REGPARAM2 op_4ef8_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -124106,6 +124142,7 @@ void REGPARAM2 op_4ef9_14_ff(uae_u32 opcode) return; } ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -124115,7 +124152,8 @@ void REGPARAM2 op_4ef9_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -124139,6 +124177,7 @@ void REGPARAM2 op_4efa_14_ff(uae_u32 opcode) srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)regs.irc; ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { do_cycles_ce000_internal(2); m68k_incpci(2); @@ -124150,7 +124189,8 @@ void REGPARAM2 op_4efa_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -124179,6 +124219,7 @@ void REGPARAM2 op_4efb_14_ff(uae_u32 opcode) return; } ipl_fetch_now(); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { do_cycles_ce000_internal(6); m68k_incpci(2); @@ -124190,7 +124231,8 @@ void REGPARAM2 op_4efb_14_ff(uae_u32 opcode) get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - exception2_fetch_opcode(opcode, 0, 0); + pcoffset = oldpc + 2; + exception2_fetch_opcode(opcode, 0, pcoffset); return; } regs.ir = regs.irc; @@ -133246,10 +133288,11 @@ void REGPARAM2 op_6000_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -133260,7 +133303,6 @@ void REGPARAM2 op_6000_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -133304,10 +133346,11 @@ void REGPARAM2 op_6001_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -133318,7 +133361,6 @@ void REGPARAM2 op_6001_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -133565,10 +133607,11 @@ void REGPARAM2 op_6200_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -133579,7 +133622,6 @@ void REGPARAM2 op_6200_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -133623,10 +133665,11 @@ void REGPARAM2 op_6201_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -133637,7 +133680,6 @@ void REGPARAM2 op_6201_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -133699,10 +133741,11 @@ void REGPARAM2 op_6300_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -133713,7 +133756,6 @@ void REGPARAM2 op_6300_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -133757,10 +133799,11 @@ void REGPARAM2 op_6301_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -133771,7 +133814,6 @@ void REGPARAM2 op_6301_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -133833,10 +133875,11 @@ void REGPARAM2 op_6400_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -133847,7 +133890,6 @@ void REGPARAM2 op_6400_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -133891,10 +133933,11 @@ void REGPARAM2 op_6401_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -133905,7 +133948,6 @@ void REGPARAM2 op_6401_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -133967,10 +134009,11 @@ void REGPARAM2 op_6500_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -133981,7 +134024,6 @@ void REGPARAM2 op_6500_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134025,10 +134067,11 @@ void REGPARAM2 op_6501_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134039,7 +134082,6 @@ void REGPARAM2 op_6501_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134101,10 +134143,11 @@ void REGPARAM2 op_6600_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134115,7 +134158,6 @@ void REGPARAM2 op_6600_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134159,10 +134201,11 @@ void REGPARAM2 op_6601_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134173,7 +134216,6 @@ void REGPARAM2 op_6601_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134235,10 +134277,11 @@ void REGPARAM2 op_6700_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134249,7 +134292,6 @@ void REGPARAM2 op_6700_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134293,10 +134335,11 @@ void REGPARAM2 op_6701_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134307,7 +134350,6 @@ void REGPARAM2 op_6701_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134369,10 +134411,11 @@ void REGPARAM2 op_6800_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134383,7 +134426,6 @@ void REGPARAM2 op_6800_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134427,10 +134469,11 @@ void REGPARAM2 op_6801_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134441,7 +134484,6 @@ void REGPARAM2 op_6801_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134503,10 +134545,11 @@ void REGPARAM2 op_6900_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134517,7 +134560,6 @@ void REGPARAM2 op_6900_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134561,10 +134603,11 @@ void REGPARAM2 op_6901_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134575,7 +134618,6 @@ void REGPARAM2 op_6901_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134637,10 +134679,11 @@ void REGPARAM2 op_6a00_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134651,7 +134694,6 @@ void REGPARAM2 op_6a00_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134695,10 +134737,11 @@ void REGPARAM2 op_6a01_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134709,7 +134752,6 @@ void REGPARAM2 op_6a01_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134771,10 +134813,11 @@ void REGPARAM2 op_6b00_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134785,7 +134828,6 @@ void REGPARAM2 op_6b00_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134829,10 +134871,11 @@ void REGPARAM2 op_6b01_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134843,7 +134886,6 @@ void REGPARAM2 op_6b01_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134905,10 +134947,11 @@ void REGPARAM2 op_6c00_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134919,7 +134962,6 @@ void REGPARAM2 op_6c00_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -134963,10 +135005,11 @@ void REGPARAM2 op_6c01_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -134977,7 +135020,6 @@ void REGPARAM2 op_6c01_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -135039,10 +135081,11 @@ void REGPARAM2 op_6d00_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -135053,7 +135096,6 @@ void REGPARAM2 op_6d00_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -135097,10 +135139,11 @@ void REGPARAM2 op_6d01_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -135111,7 +135154,6 @@ void REGPARAM2 op_6d01_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -135173,10 +135215,11 @@ void REGPARAM2 op_6e00_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -135187,7 +135230,6 @@ void REGPARAM2 op_6e00_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -135231,10 +135273,11 @@ void REGPARAM2 op_6e01_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -135245,7 +135288,6 @@ void REGPARAM2 op_6e01_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -135307,10 +135349,11 @@ void REGPARAM2 op_6f00_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -135321,7 +135364,6 @@ void REGPARAM2 op_6f00_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } @@ -135365,10 +135407,11 @@ void REGPARAM2 op_6f01_14_ff(uae_u32 opcode) return; } m68k_incpci((uae_s32)src + 2); + int pcadjust = oldpc - m68k_getpci() + 2; get_word_ce000_prefetch(0); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; + pcoffset += pcadjust; exception2_fetch_opcode(opcode, 0, pcoffset); return; } @@ -135379,7 +135422,6 @@ void REGPARAM2 op_6f01_14_ff(uae_u32 opcode) get_word_ce000_prefetch(2); if(hardware_bus_error) { int pcoffset = 0; - pcoffset = oldpc - m68k_getpci() + 2; exception2_fetch_opcode(opcode, 2, pcoffset); return; } diff --git a/cpuemu_20.cpp b/cpuemu_20.cpp index 32166d46..6e6aaa6d 100644 --- a/cpuemu_20.cpp +++ b/cpuemu_20.cpp @@ -20313,6 +20313,7 @@ uae_u32 REGPARAM2 op_4ed0_20_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -20332,6 +20333,7 @@ uae_u32 REGPARAM2 op_4ee8_20_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20353,6 +20355,7 @@ uae_u32 REGPARAM2 op_4ef0_20_ff(uae_u32 opcode) uaecptr srca; m68k_incpci(2); srca = x_get_disp_ea_020(m68k_areg(regs, srcreg), 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20371,6 +20374,7 @@ uae_u32 REGPARAM2 op_4ef8_20_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)get_word_020_prefetch(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20389,6 +20393,7 @@ uae_u32 REGPARAM2 op_4ef9_20_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = get_long_020_prefetch(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -20407,6 +20412,7 @@ uae_u32 REGPARAM2 op_4efa_20_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20427,6 +20433,7 @@ uae_u32 REGPARAM2 op_4efb_20_ff(uae_u32 opcode) m68k_incpci(2); uaecptr tmppc = m68k_getpci(); srca = x_get_disp_ea_020(tmppc, 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); diff --git a/cpuemu_21.cpp b/cpuemu_21.cpp index edca3cc8..ca97a670 100644 --- a/cpuemu_21.cpp +++ b/cpuemu_21.cpp @@ -22045,6 +22045,7 @@ void REGPARAM2 op_4ed0_21_ff(uae_u32 opcode) uaecptr srca; srca = m68k_areg(regs, srcreg); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -22066,6 +22067,7 @@ void REGPARAM2 op_4ee8_21_ff(uae_u32 opcode) uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22089,6 +22091,7 @@ void REGPARAM2 op_4ef0_21_ff(uae_u32 opcode) m68k_incpci(2); srca = x_get_disp_ea_ce020(m68k_areg(regs, srcreg), 0); /* op H:4,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22109,6 +22112,7 @@ void REGPARAM2 op_4ef8_21_ff(uae_u32 opcode) uaecptr srca; srca = (uae_s32)(uae_s16)get_word_ce020_prefetch(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22129,6 +22133,7 @@ void REGPARAM2 op_4ef9_21_ff(uae_u32 opcode) uaecptr srca; srca = get_long_ce020_prefetch(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -22149,6 +22154,7 @@ void REGPARAM2 op_4efa_21_ff(uae_u32 opcode) srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22171,6 +22177,7 @@ void REGPARAM2 op_4efb_21_ff(uae_u32 opcode) uaecptr tmppc = m68k_getpci(); srca = x_get_disp_ea_ce020(tmppc, 0); /* op H:4,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); diff --git a/cpuemu_22.cpp b/cpuemu_22.cpp index 5c6414f2..a5b3f117 100644 --- a/cpuemu_22.cpp +++ b/cpuemu_22.cpp @@ -20314,6 +20314,7 @@ uae_u32 REGPARAM2 op_4ed0_22_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -20333,6 +20334,7 @@ uae_u32 REGPARAM2 op_4ee8_22_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_030_prefetch(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20354,6 +20356,7 @@ uae_u32 REGPARAM2 op_4ef0_22_ff(uae_u32 opcode) uaecptr srca; m68k_incpci(2); srca = x_get_disp_ea_020(m68k_areg(regs, srcreg), 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20372,6 +20375,7 @@ uae_u32 REGPARAM2 op_4ef8_22_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)get_word_030_prefetch(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20390,6 +20394,7 @@ uae_u32 REGPARAM2 op_4ef9_22_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = get_long_030_prefetch(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -20408,6 +20413,7 @@ uae_u32 REGPARAM2 op_4efa_22_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)get_word_030_prefetch(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20428,6 +20434,7 @@ uae_u32 REGPARAM2 op_4efb_22_ff(uae_u32 opcode) m68k_incpci(2); uaecptr tmppc = m68k_getpci(); srca = x_get_disp_ea_020(tmppc, 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); diff --git a/cpuemu_23.cpp b/cpuemu_23.cpp index f6fbba2b..75fafb4d 100644 --- a/cpuemu_23.cpp +++ b/cpuemu_23.cpp @@ -22046,6 +22046,7 @@ void REGPARAM2 op_4ed0_23_ff(uae_u32 opcode) uaecptr srca; srca = m68k_areg(regs, srcreg); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -22067,6 +22068,7 @@ void REGPARAM2 op_4ee8_23_ff(uae_u32 opcode) uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_word_ce030_prefetch(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22090,6 +22092,7 @@ void REGPARAM2 op_4ef0_23_ff(uae_u32 opcode) m68k_incpci(2); srca = x_get_disp_ea_ce030(m68k_areg(regs, srcreg), 0); /* op H:4,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22110,6 +22113,7 @@ void REGPARAM2 op_4ef8_23_ff(uae_u32 opcode) uaecptr srca; srca = (uae_s32)(uae_s16)get_word_ce030_prefetch(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22130,6 +22134,7 @@ void REGPARAM2 op_4ef9_23_ff(uae_u32 opcode) uaecptr srca; srca = get_long_ce030_prefetch(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -22150,6 +22155,7 @@ void REGPARAM2 op_4efa_23_ff(uae_u32 opcode) srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)get_word_ce030_prefetch(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22172,6 +22178,7 @@ void REGPARAM2 op_4efb_23_ff(uae_u32 opcode) uaecptr tmppc = m68k_getpci(); srca = x_get_disp_ea_ce030(tmppc, 0); /* op H:4,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); diff --git a/cpuemu_24.cpp b/cpuemu_24.cpp index 456ef4ab..eb179dec 100644 --- a/cpuemu_24.cpp +++ b/cpuemu_24.cpp @@ -19423,6 +19423,7 @@ void REGPARAM2 op_4ed0_24_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -19441,6 +19442,7 @@ void REGPARAM2 op_4ee8_24_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword_cache_040(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -19461,6 +19463,7 @@ void REGPARAM2 op_4ef0_24_ff(uae_u32 opcode) uaecptr srca; m68k_incpci(2); srca = x_get_disp_ea_040(m68k_areg(regs, srcreg), 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -19478,6 +19481,7 @@ void REGPARAM2 op_4ef8_24_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)get_iword_cache_040(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -19495,6 +19499,7 @@ void REGPARAM2 op_4ef9_24_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = get_ilong_cache_040(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -19512,6 +19517,7 @@ void REGPARAM2 op_4efa_24_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)get_iword_cache_040(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -19531,6 +19537,7 @@ void REGPARAM2 op_4efb_24_ff(uae_u32 opcode) m68k_incpci(2); uaecptr tmppc = m68k_getpci(); srca = x_get_disp_ea_040(tmppc, 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); diff --git a/cpuemu_31.cpp b/cpuemu_31.cpp index b9954c8c..4256ff0d 100644 --- a/cpuemu_31.cpp +++ b/cpuemu_31.cpp @@ -21346,6 +21346,7 @@ uae_u32 REGPARAM2 op_4ed0_31_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -21365,6 +21366,7 @@ uae_u32 REGPARAM2 op_4ee8_31_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu040(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -21386,6 +21388,7 @@ uae_u32 REGPARAM2 op_4ef0_31_ff(uae_u32 opcode) uaecptr srca; m68k_incpci(2); srca = x_get_disp_ea_020(m68k_areg(regs, srcreg), 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -21404,6 +21407,7 @@ uae_u32 REGPARAM2 op_4ef8_31_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)get_iword_mmu040(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -21422,6 +21426,7 @@ uae_u32 REGPARAM2 op_4ef9_31_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = get_ilong_mmu040(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -21440,6 +21445,7 @@ uae_u32 REGPARAM2 op_4efa_31_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)get_iword_mmu040(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -21460,6 +21466,7 @@ uae_u32 REGPARAM2 op_4efb_31_ff(uae_u32 opcode) m68k_incpci(2); uaecptr tmppc = m68k_getpci(); srca = x_get_disp_ea_020(tmppc, 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); diff --git a/cpuemu_32.cpp b/cpuemu_32.cpp index 01ec7660..28d19a56 100644 --- a/cpuemu_32.cpp +++ b/cpuemu_32.cpp @@ -22007,6 +22007,7 @@ uae_u32 REGPARAM2 op_4ed0_32_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -22026,6 +22027,7 @@ uae_u32 REGPARAM2 op_4ee8_32_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu030_state(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22047,6 +22049,7 @@ uae_u32 REGPARAM2 op_4ef0_32_ff(uae_u32 opcode) uaecptr srca; m68k_incpci(2); srca = get_disp_ea_020_mmu030(m68k_areg(regs, srcreg), 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22065,6 +22068,7 @@ uae_u32 REGPARAM2 op_4ef8_32_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)get_iword_mmu030_state(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22083,6 +22087,7 @@ uae_u32 REGPARAM2 op_4ef9_32_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = get_ilong_mmu030_state(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -22101,6 +22106,7 @@ uae_u32 REGPARAM2 op_4efa_32_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)get_iword_mmu030_state(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22121,6 +22127,7 @@ uae_u32 REGPARAM2 op_4efb_32_ff(uae_u32 opcode) m68k_incpci(2); uaecptr tmppc = m68k_getpci(); srca = get_disp_ea_020_mmu030(tmppc, 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); diff --git a/cpuemu_33.cpp b/cpuemu_33.cpp index b7eb1a22..2d0a1663 100644 --- a/cpuemu_33.cpp +++ b/cpuemu_33.cpp @@ -20293,6 +20293,7 @@ uae_u32 REGPARAM2 op_4ed0_33_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -20312,6 +20313,7 @@ uae_u32 REGPARAM2 op_4ee8_33_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu060(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20333,6 +20335,7 @@ uae_u32 REGPARAM2 op_4ef0_33_ff(uae_u32 opcode) uaecptr srca; m68k_incpci(2); srca = x_get_disp_ea_020(m68k_areg(regs, srcreg), 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20351,6 +20354,7 @@ uae_u32 REGPARAM2 op_4ef8_33_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)get_iword_mmu060(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20369,6 +20373,7 @@ uae_u32 REGPARAM2 op_4ef9_33_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = get_ilong_mmu060(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -20387,6 +20392,7 @@ uae_u32 REGPARAM2 op_4efa_33_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)get_iword_mmu060(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -20407,6 +20413,7 @@ uae_u32 REGPARAM2 op_4efb_33_ff(uae_u32 opcode) m68k_incpci(2); uaecptr tmppc = m68k_getpci(); srca = x_get_disp_ea_020(tmppc, 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); diff --git a/cpuemu_34.cpp b/cpuemu_34.cpp index 901df441..bd48c322 100644 --- a/cpuemu_34.cpp +++ b/cpuemu_34.cpp @@ -22957,6 +22957,7 @@ uae_u32 REGPARAM2 op_4ed0_34_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -22976,6 +22977,7 @@ uae_u32 REGPARAM2 op_4ee8_34_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu030c_state(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -22997,6 +22999,7 @@ uae_u32 REGPARAM2 op_4ef0_34_ff(uae_u32 opcode) uaecptr srca; m68k_incpci(2); srca = get_disp_ea_020_mmu030c(m68k_areg(regs, srcreg), 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -23015,6 +23018,7 @@ uae_u32 REGPARAM2 op_4ef8_34_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = (uae_s32)(uae_s16)get_iword_mmu030c_state(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -23033,6 +23037,7 @@ uae_u32 REGPARAM2 op_4ef9_34_ff(uae_u32 opcode) int count_cycles = 0; uaecptr srca; srca = get_ilong_mmu030c_state(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -23051,6 +23056,7 @@ uae_u32 REGPARAM2 op_4efa_34_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)get_iword_mmu030c_state(2); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -23071,6 +23077,7 @@ uae_u32 REGPARAM2 op_4efb_34_ff(uae_u32 opcode) m68k_incpci(2); uaecptr tmppc = m68k_getpci(); srca = get_disp_ea_020_mmu030c(tmppc, 0); + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); diff --git a/cpuemu_35.cpp b/cpuemu_35.cpp index c7965617..f39c2d13 100644 --- a/cpuemu_35.cpp +++ b/cpuemu_35.cpp @@ -24687,6 +24687,7 @@ void REGPARAM2 op_4ed0_35_ff(uae_u32 opcode) uaecptr srca; srca = m68k_areg(regs, srcreg); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -24708,6 +24709,7 @@ void REGPARAM2 op_4ee8_35_ff(uae_u32 opcode) uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu030c_state(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -24731,6 +24733,7 @@ void REGPARAM2 op_4ef0_35_ff(uae_u32 opcode) m68k_incpci(2); srca = get_disp_ea_020_mmu030c(m68k_areg(regs, srcreg), 0); /* op H:4,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -24751,6 +24754,7 @@ void REGPARAM2 op_4ef8_35_ff(uae_u32 opcode) uaecptr srca; srca = (uae_s32)(uae_s16)get_iword_mmu030c_state(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -24771,6 +24775,7 @@ void REGPARAM2 op_4ef9_35_ff(uae_u32 opcode) uaecptr srca; srca = get_ilong_mmu030c_state(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { m68k_incpci(2); exception3_read_prefetch_only(opcode, srca); @@ -24791,6 +24796,7 @@ void REGPARAM2 op_4efa_35_ff(uae_u32 opcode) srca = m68k_getpci() + 2; srca += (uae_s32)(uae_s16)get_iword_mmu030c_state(2); /* op H:4-,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 2 * CYCLE_UNIT / 2; m68k_incpci(2); @@ -24813,6 +24819,7 @@ void REGPARAM2 op_4efb_35_ff(uae_u32 opcode) uaecptr tmppc = m68k_getpci(); srca = get_disp_ea_020_mmu030c(tmppc, 0); /* op H:4,T:0,C:-4 */ + uaecptr oldpc = m68k_getpci(); if (srca & 1) { count_cycles += 6 * CYCLE_UNIT / 2; m68k_incpci(2); diff --git a/cpuemu_40.cpp b/cpuemu_40.cpp index aebdfb31..f42c86a6 100644 --- a/cpuemu_40.cpp +++ b/cpuemu_40.cpp @@ -18569,6 +18569,7 @@ uae_u32 REGPARAM2 op_4ed0_40_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18587,6 +18588,7 @@ uae_u32 REGPARAM2 op_4ee8_40_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18606,6 +18608,7 @@ uae_u32 REGPARAM2 op_4ef0_40_ff(uae_u32 opcode) uaecptr srca; m68k_incpc(2); srca = get_disp_ea_020(m68k_areg(regs, srcreg), 0); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18622,6 +18625,7 @@ uae_u32 REGPARAM2 op_4ef8_40_ff(uae_u32 opcode) { uaecptr srca; srca = (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18638,6 +18642,7 @@ uae_u32 REGPARAM2 op_4ef9_40_ff(uae_u32 opcode) { uaecptr srca; srca = get_dilong(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18655,6 +18660,7 @@ uae_u32 REGPARAM2 op_4efa_40_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpc() + 2; srca += (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18673,6 +18679,7 @@ uae_u32 REGPARAM2 op_4efb_40_ff(uae_u32 opcode) m68k_incpc(2); uaecptr tmppc = m68k_getpc(); srca = get_disp_ea_020(tmppc, 0); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -49509,6 +49516,7 @@ uae_u32 REGPARAM2 op_4ef0_44_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = get_disp_ea_000(m68k_areg(regs, srcreg), get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -49525,6 +49533,7 @@ uae_u32 REGPARAM2 op_4efb_44_ff(uae_u32 opcode) uaecptr srca; uaecptr tmppc = m68k_getpc() + 2; srca = get_disp_ea_000(tmppc, get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57646,6 +57655,7 @@ uae_u32 REGPARAM2 op_4ed0_45_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57663,6 +57673,7 @@ uae_u32 REGPARAM2 op_4ee8_45_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57680,6 +57691,7 @@ uae_u32 REGPARAM2 op_4ef0_45_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = get_disp_ea_000(m68k_areg(regs, srcreg), get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57695,6 +57707,7 @@ uae_u32 REGPARAM2 op_4ef8_45_ff(uae_u32 opcode) { uaecptr srca; srca = (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57710,6 +57723,7 @@ uae_u32 REGPARAM2 op_4ef9_45_ff(uae_u32 opcode) { uaecptr srca; srca = get_dilong(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57726,6 +57740,7 @@ uae_u32 REGPARAM2 op_4efa_45_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpc() + 2; srca += (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57742,6 +57757,7 @@ uae_u32 REGPARAM2 op_4efb_45_ff(uae_u32 opcode) uaecptr srca; uaecptr tmppc = m68k_getpc() + 2; srca = get_disp_ea_000(tmppc, get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -63438,6 +63454,7 @@ uae_u32 REGPARAM2 op_4ed0_46_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -63455,6 +63472,7 @@ uae_u32 REGPARAM2 op_4ee8_46_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -63472,6 +63490,7 @@ uae_u32 REGPARAM2 op_4ef0_46_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = get_disp_ea_000(m68k_areg(regs, srcreg), get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -63487,6 +63506,7 @@ uae_u32 REGPARAM2 op_4ef8_46_ff(uae_u32 opcode) { uaecptr srca; srca = (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -63502,6 +63522,7 @@ uae_u32 REGPARAM2 op_4ef9_46_ff(uae_u32 opcode) { uaecptr srca; srca = get_dilong(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -63518,6 +63539,7 @@ uae_u32 REGPARAM2 op_4efa_46_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpc() + 2; srca += (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -63534,6 +63556,7 @@ uae_u32 REGPARAM2 op_4efb_46_ff(uae_u32 opcode) uaecptr srca; uaecptr tmppc = m68k_getpc() + 2; srca = get_disp_ea_000(tmppc, get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -69230,6 +69253,7 @@ uae_u32 REGPARAM2 op_4ed0_47_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -69247,6 +69271,7 @@ uae_u32 REGPARAM2 op_4ee8_47_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -69264,6 +69289,7 @@ uae_u32 REGPARAM2 op_4ef0_47_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = get_disp_ea_000(m68k_areg(regs, srcreg), get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -69279,6 +69305,7 @@ uae_u32 REGPARAM2 op_4ef8_47_ff(uae_u32 opcode) { uaecptr srca; srca = (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -69294,6 +69321,7 @@ uae_u32 REGPARAM2 op_4ef9_47_ff(uae_u32 opcode) { uaecptr srca; srca = get_dilong(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -69310,6 +69338,7 @@ uae_u32 REGPARAM2 op_4efa_47_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpc() + 2; srca += (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -69326,6 +69355,7 @@ uae_u32 REGPARAM2 op_4efb_47_ff(uae_u32 opcode) uaecptr srca; uaecptr tmppc = m68k_getpc() + 2; srca = get_disp_ea_000(tmppc, get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -75022,6 +75052,7 @@ uae_u32 REGPARAM2 op_4ed0_48_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -75039,6 +75070,7 @@ uae_u32 REGPARAM2 op_4ee8_48_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -75056,6 +75088,7 @@ uae_u32 REGPARAM2 op_4ef0_48_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = get_disp_ea_000(m68k_areg(regs, srcreg), get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -75071,6 +75104,7 @@ uae_u32 REGPARAM2 op_4ef8_48_ff(uae_u32 opcode) { uaecptr srca; srca = (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -75086,6 +75120,7 @@ uae_u32 REGPARAM2 op_4ef9_48_ff(uae_u32 opcode) { uaecptr srca; srca = get_dilong(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -75102,6 +75137,7 @@ uae_u32 REGPARAM2 op_4efa_48_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpc() + 2; srca += (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -75118,6 +75154,7 @@ uae_u32 REGPARAM2 op_4efb_48_ff(uae_u32 opcode) uaecptr srca; uaecptr tmppc = m68k_getpc() + 2; srca = get_disp_ea_000(tmppc, get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -80814,6 +80851,7 @@ uae_u32 REGPARAM2 op_4ed0_49_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -80831,6 +80869,7 @@ uae_u32 REGPARAM2 op_4ee8_49_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -80848,6 +80887,7 @@ uae_u32 REGPARAM2 op_4ef0_49_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = get_disp_ea_000(m68k_areg(regs, srcreg), get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -80863,6 +80903,7 @@ uae_u32 REGPARAM2 op_4ef8_49_ff(uae_u32 opcode) { uaecptr srca; srca = (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -80878,6 +80919,7 @@ uae_u32 REGPARAM2 op_4ef9_49_ff(uae_u32 opcode) { uaecptr srca; srca = get_dilong(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -80894,6 +80936,7 @@ uae_u32 REGPARAM2 op_4efa_49_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpc() + 2; srca += (uae_s32)(uae_s16)get_diword(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -80910,6 +80953,7 @@ uae_u32 REGPARAM2 op_4efb_49_ff(uae_u32 opcode) uaecptr srca; uaecptr tmppc = m68k_getpc() + 2; srca = get_disp_ea_000(tmppc, get_diword(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); diff --git a/cpuemu_50.cpp b/cpuemu_50.cpp index 5143e275..895b10e4 100644 --- a/cpuemu_50.cpp +++ b/cpuemu_50.cpp @@ -18623,6 +18623,7 @@ uae_u32 REGPARAM2 op_4ed0_50_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18641,6 +18642,7 @@ uae_u32 REGPARAM2 op_4ee8_50_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iiword_jit(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18660,6 +18662,7 @@ uae_u32 REGPARAM2 op_4ef0_50_ff(uae_u32 opcode) uaecptr srca; m68k_incpc(2); srca = x_get_disp_ea_020(m68k_areg(regs, srcreg), 0); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18676,6 +18679,7 @@ uae_u32 REGPARAM2 op_4ef8_50_ff(uae_u32 opcode) { uaecptr srca; srca = (uae_s32)(uae_s16)get_iiword_jit(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18692,6 +18696,7 @@ uae_u32 REGPARAM2 op_4ef9_50_ff(uae_u32 opcode) { uaecptr srca; srca = get_iilong_jit(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18709,6 +18714,7 @@ uae_u32 REGPARAM2 op_4efa_50_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpc() + 2; srca += (uae_s32)(uae_s16)get_iiword_jit(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -18727,6 +18733,7 @@ uae_u32 REGPARAM2 op_4efb_50_ff(uae_u32 opcode) m68k_incpc(2); uaecptr tmppc = m68k_getpc(); srca = x_get_disp_ea_020(tmppc, 0); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -49599,6 +49606,7 @@ uae_u32 REGPARAM2 op_4ef0_54_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = get_disp_ea_000(m68k_areg(regs, srcreg), get_iiword_jit(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -49615,6 +49623,7 @@ uae_u32 REGPARAM2 op_4efb_54_ff(uae_u32 opcode) uaecptr srca; uaecptr tmppc = m68k_getpc() + 2; srca = get_disp_ea_000(tmppc, get_iiword_jit(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57736,6 +57745,7 @@ uae_u32 REGPARAM2 op_4ed0_55_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57753,6 +57763,7 @@ uae_u32 REGPARAM2 op_4ee8_55_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = m68k_areg(regs, srcreg) + (uae_s32)(uae_s16)get_iiword_jit(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57770,6 +57781,7 @@ uae_u32 REGPARAM2 op_4ef0_55_ff(uae_u32 opcode) uae_u32 srcreg = (real_opcode & 7); uaecptr srca; srca = get_disp_ea_000(m68k_areg(regs, srcreg), get_iiword_jit(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57785,6 +57797,7 @@ uae_u32 REGPARAM2 op_4ef8_55_ff(uae_u32 opcode) { uaecptr srca; srca = (uae_s32)(uae_s16)get_iiword_jit(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57800,6 +57813,7 @@ uae_u32 REGPARAM2 op_4ef9_55_ff(uae_u32 opcode) { uaecptr srca; srca = get_iilong_jit(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57816,6 +57830,7 @@ uae_u32 REGPARAM2 op_4efa_55_ff(uae_u32 opcode) uaecptr srca; srca = m68k_getpc() + 2; srca += (uae_s32)(uae_s16)get_iiword_jit(2); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); @@ -57832,6 +57847,7 @@ uae_u32 REGPARAM2 op_4efb_55_ff(uae_u32 opcode) uaecptr srca; uaecptr tmppc = m68k_getpc() + 2; srca = get_disp_ea_000(tmppc, get_iiword_jit(2)); + uaecptr oldpc = m68k_getpc(); if (srca & 1) { m68k_incpc(2); exception3_read_prefetch_only(opcode, srca); diff --git a/gencpu.cpp b/gencpu.cpp index f7f8f311..5fe680da 100644 --- a/gencpu.cpp +++ b/gencpu.cpp @@ -7220,7 +7220,8 @@ static void gen_opcode (unsigned int opcode) clear_m68k_offset(); tail_ce020_done = true; if (using_ce || using_prefetch) { - fill_prefetch_full_000_special(2, NULL); + out("int pcadjust = oldpc - m68k_getpci() + 2;\n"); + fill_prefetch_full_000_special(-1, NULL); } else { fill_prefetch_full_ntx(0); } @@ -7389,7 +7390,8 @@ static void gen_opcode (unsigned int opcode) out("}\n"); clear_m68k_offset(); if (using_prefetch || using_ce) { - fill_prefetch_full_000_special(2, NULL); + out("int pcadjust = oldpc - m68k_getpci() + 2;\n"); + fill_prefetch_full_000_special(-1, NULL); } else { fill_prefetch_full(0); } @@ -7502,7 +7504,8 @@ static void gen_opcode (unsigned int opcode) } clear_m68k_offset(); if (using_prefetch || using_ce) { - fill_prefetch_full_000_special(2, NULL); + out("int pcadjust = oldpc - m68k_getpci() + 2;\n"); + fill_prefetch_full_000_special(-1, NULL); } else { fill_prefetch_full(0); } @@ -7568,7 +7571,17 @@ static void gen_opcode (unsigned int opcode) write_return_cycles(0); out("}\n"); } + + if (curi->smode == absl) { + sprintf(bus_error_code, "pcoffset = oldpc + 6;\n"); + } else if (curi->smode == Ad8r || curi->smode == PC8r || curi->smode == Ad16 || curi->smode == PC16 || curi->smode == absw) { + sprintf(bus_error_code, "pcoffset = oldpc + 4;\n"); + } else { + sprintf(bus_error_code, "pcoffset = oldpc + 2;\n"); + } fill_prefetch_1(0); + bus_error_code[0] = 0; + if (cpu_level < 2) { out("m68k_areg(regs, 7) -= 4;\n"); } @@ -7624,7 +7637,8 @@ static void gen_opcode (unsigned int opcode) out("if(regs.t1) opcode |= 0x10000;\n"); out("%s(%d);\n", prefetch_word, 2); count_readw++; - check_prefetch_bus_error(-2, 0, sp); + check_prefetch_bus_error(2, 0, 0); + did_prefetch = 1; ir2irc = 0; } else { @@ -7638,6 +7652,7 @@ static void gen_opcode (unsigned int opcode) case i_JMP: no_prefetch_ce020 = true; genamode(curi, curi->smode, "srcreg", curi->size, "src", 0, 0, GF_AA|GF_NOREFILL); + out("uaecptr oldpc = %s;\n", getpc); if (using_exception_3) { push_ins_cnt(); out("if (srca & 1) {\n"); @@ -7664,7 +7679,9 @@ static void gen_opcode (unsigned int opcode) if (using_prefetch || using_ce) { out("%s(%d);\n", prefetch_word, 0); count_readw++; - check_prefetch_bus_error(-1, 0, 0); + sprintf(bus_error_code, "pcoffset = oldpc + 2;\n"); + check_prefetch_bus_error(-1, -1, 0); + bus_error_code[0] = 0; irc2ir(); set_last_access_ipl(); out("%s(%d);\n", prefetch_word, 2); @@ -7673,7 +7690,7 @@ static void gen_opcode (unsigned int opcode) if (sp < 0 && cpu_level == 0) out("if(regs.t1) opcode |= 0x10000;\n"); count_readw++; - check_prefetch_bus_error(-2, 0, sp); + check_prefetch_bus_error(2, 0, 0); did_prefetch = 1; ir2irc = 0; } else { @@ -7837,7 +7854,8 @@ static void gen_opcode (unsigned int opcode) push_ins_cnt(); if (using_prefetch) { incpc("(uae_s32)src + 2"); - fill_prefetch_full_000_special(2, NULL); + out("int pcadjust = oldpc - m68k_getpci() + 2;\n"); + fill_prefetch_full_000_special(-1, NULL); if (using_ce) out("return;\n"); else -- 2.47.3