diff --git a/src/devices/cpu/m68000/m68k_in.lst b/src/devices/cpu/m68000/m68k_in.lst index 4cc8a9ea125..86f5eef9ae6 100644 --- a/src/devices/cpu/m68000/m68k_in.lst +++ b/src/devices/cpu/m68000/m68k_in.lst @@ -6886,16 +6886,12 @@ e5c0 ffc0 roxl w A+-DXWL 01:8 7:14 234fc:5 m_instr_mode = INSTRUCTION_YES; m_run_mode = RUN_MODE_NORMAL; } else { - if (format_word == 0x8) /* type 1000 stack frame */ + if (format_word == 0x8) /* 68010 - type 1000 stack frame */ { new_sr = m68ki_pull_16(); new_pc = m68ki_pull_32(); - m68ki_fake_pull_16(); /* format word */ - m68ki_jump(new_pc); - m68ki_set_sr(new_sr); - m_instr_mode = INSTRUCTION_YES; - m_run_mode = RUN_MODE_NORMAL; - m68ki_fake_pull_16(); /* special status */ + m68ki_fake_pull_16(); /* format word */ + m68ki_fake_pull_16(); /* special status word */ m68ki_fake_pull_32(); /* fault address */ m68ki_fake_pull_32(); /* reserved and data output buffer */ m68ki_fake_pull_32(); /* reserved and data input buffer */ @@ -6908,6 +6904,10 @@ e5c0 ffc0 roxl w A+-DXWL 01:8 7:14 234fc:5 m68ki_fake_pull_32(); m68ki_fake_pull_32(); m68ki_fake_pull_32(); + m68ki_jump(new_pc); + m68ki_set_sr(new_sr); + m_instr_mode = INSTRUCTION_YES; + m_run_mode = RUN_MODE_NORMAL; } else { diff --git a/src/devices/cpu/m68000/m68kcpu.cpp b/src/devices/cpu/m68000/m68kcpu.cpp index 6ef8d18057f..f7a61d6f77a 100644 --- a/src/devices/cpu/m68000/m68kcpu.cpp +++ b/src/devices/cpu/m68000/m68kcpu.cpp @@ -957,8 +957,15 @@ void m68000_base_device::execute_run() if (!CPU_TYPE_IS_020_PLUS()) { - /* Note: This is implemented for 68000 only! */ - m68ki_stack_frame_buserr(sr); + if (CPU_TYPE_IS_010()) + { + m68ki_stack_frame_1000(m_ppc, sr, EXCEPTION_BUS_ERROR); + } + else + { + /* Note: This is implemented for 68000 only! */ + m68ki_stack_frame_buserr(sr); + } } else if(!CPU_TYPE_IS_040_PLUS()) { if (m_mmu_tmp_buserror_address == m_ppc) diff --git a/src/devices/cpu/m68000/m68kops.cpp b/src/devices/cpu/m68000/m68kops.cpp index e630aa065ca..3535926fbf9 100644 --- a/src/devices/cpu/m68000/m68kops.cpp +++ b/src/devices/cpu/m68000/m68kops.cpp @@ -26542,16 +26542,12 @@ void m68000_base_device::x4e73_rte_l_71() m_instr_mode = INSTRUCTION_YES; m_run_mode = RUN_MODE_NORMAL; } else { - if (format_word == 0x8) /* type 1000 stack frame */ + if (format_word == 0x8) /* 68010 - type 1000 stack frame */ { new_sr = m68ki_pull_16(); new_pc = m68ki_pull_32(); - m68ki_fake_pull_16(); /* format word */ - m68ki_jump(new_pc); - m68ki_set_sr(new_sr); - m_instr_mode = INSTRUCTION_YES; - m_run_mode = RUN_MODE_NORMAL; - m68ki_fake_pull_16(); /* special status */ + m68ki_fake_pull_16(); /* format word */ + m68ki_fake_pull_16(); /* special status word */ m68ki_fake_pull_32(); /* fault address */ m68ki_fake_pull_32(); /* reserved and data output buffer */ m68ki_fake_pull_32(); /* reserved and data input buffer */ @@ -26564,6 +26560,10 @@ void m68000_base_device::x4e73_rte_l_71() m68ki_fake_pull_32(); m68ki_fake_pull_32(); m68ki_fake_pull_32(); + m68ki_jump(new_pc); + m68ki_set_sr(new_sr); + m_instr_mode = INSTRUCTION_YES; + m_run_mode = RUN_MODE_NORMAL; } else {