Gross fix (nw)

This commit is contained in:
Olivier Galibert 2018-07-09 21:59:50 +02:00
parent 6d0325f17d
commit bad31ea61c
2 changed files with 11 additions and 6 deletions

View File

@ -670,7 +670,7 @@ void m68000_base_device::postload()
void m68000_base_device::m68k_cause_bus_error() void m68000_base_device::m68k_cause_bus_error()
{ {
// Halt the cpu on berr when writing the stack frame. // Halt the cpu on berr when writing the stack frame.
if (m_run_mode == RUN_MODE_BERR_AERR_RESET) if (m_run_mode == RUN_MODE_BERR_AERR_RESET_WSF)
{ {
m_stopped = STOP_LEVEL_HALT; m_stopped = STOP_LEVEL_HALT;
return; return;
@ -678,7 +678,7 @@ void m68000_base_device::m68k_cause_bus_error()
uint32_t sr = m68ki_init_exception(); uint32_t sr = m68ki_init_exception();
m_run_mode = RUN_MODE_BERR_AERR_RESET; m_run_mode = RUN_MODE_BERR_AERR_RESET_WSF;
if (!CPU_TYPE_IS_010_PLUS()) if (!CPU_TYPE_IS_010_PLUS())
{ {
@ -700,6 +700,7 @@ void m68000_base_device::m68k_cause_bus_error()
} }
m68ki_jump_vector(EXCEPTION_BUS_ERROR); m68ki_jump_vector(EXCEPTION_BUS_ERROR);
m_run_mode = RUN_MODE_BERR_AERR_RESET;
} }
bool m68000_base_device::memory_translate(int space, int intention, offs_t &address) bool m68000_base_device::memory_translate(int space, int intention, offs_t &address)

View File

@ -88,8 +88,9 @@ static constexpr int INSTRUCTION_NO = 0x08;
static constexpr int MODE_READ = 0x10; static constexpr int MODE_READ = 0x10;
static constexpr int MODE_WRITE = 0; static constexpr int MODE_WRITE = 0;
static constexpr int RUN_MODE_NORMAL = 0; static constexpr int RUN_MODE_NORMAL = 0;
static constexpr int RUN_MODE_BERR_AERR_RESET = 1; static constexpr int RUN_MODE_BERR_AERR_RESET_WSF = 1; // writing the stack frame
static constexpr int RUN_MODE_BERR_AERR_RESET = 2; // stack frame done
@ -1516,13 +1517,14 @@ inline void m68ki_exception_address_error()
* this is a catastrophic failure. * this is a catastrophic failure.
* Halt the CPU * Halt the CPU
*/ */
if(m_run_mode == RUN_MODE_BERR_AERR_RESET) if(m_run_mode == RUN_MODE_BERR_AERR_RESET_WSF)
{ {
m_read8(0x00ffff01); m_read8(0x00ffff01);
m_stopped = STOP_LEVEL_HALT; m_stopped = STOP_LEVEL_HALT;
return; return;
} }
m_run_mode = RUN_MODE_BERR_AERR_RESET;
m_run_mode = RUN_MODE_BERR_AERR_RESET_WSF;
if (!CPU_TYPE_IS_010_PLUS()) if (!CPU_TYPE_IS_010_PLUS())
{ {
@ -1545,6 +1547,8 @@ inline void m68ki_exception_address_error()
m68ki_jump_vector(EXCEPTION_ADDRESS_ERROR); m68ki_jump_vector(EXCEPTION_ADDRESS_ERROR);
m_run_mode = RUN_MODE_BERR_AERR_RESET;
/* Use up some clock cycles and undo the instruction's cycles */ /* Use up some clock cycles and undo the instruction's cycles */
m_remaining_cycles -= m_cyc_exception[EXCEPTION_ADDRESS_ERROR] - m_cyc_instruction[m_ir]; m_remaining_cycles -= m_cyc_exception[EXCEPTION_ADDRESS_ERROR] - m_cyc_instruction[m_ir];
} }