diff options
author | 2024-12-21 19:45:20 +0100 | |
---|---|---|
committer | 2024-12-21 19:45:32 +0100 | |
commit | 27fa7dec6ec35b470500d2eee4e83e1a88d03878 (patch) | |
tree | f9f9a69f1038e5b002c30eeb3ed1cefa0d70fb0a /src/devices/cpu/i86/i286.cpp | |
parent | 780490d9ac651f0aafe6fe3e6c2ece9b7e800fbe (diff) |
i86: don't clear physical irq pins state at reset
Diffstat (limited to 'src/devices/cpu/i86/i286.cpp')
-rw-r--r-- | src/devices/cpu/i86/i286.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/devices/cpu/i86/i286.cpp b/src/devices/cpu/i86/i286.cpp index b18abd01f89..bfe4dc7c728 100644 --- a/src/devices/cpu/i86/i286.cpp +++ b/src/devices/cpu/i86/i286.cpp @@ -384,21 +384,16 @@ void i80286_cpu_device::execute_set_input(int inptnum, int state) { if(inptnum == INPUT_LINE_NMI) { - if(m_nmi_state == state) - { - return; - } - m_nmi_state = state; - if(state != CLEAR_LINE) + if(!m_nmi_state && state) { m_pending_irq |= NMI_IRQ; } + m_nmi_state = state; } else if(inptnum == INPUT_LINE_A20) m_amask = m_a20_callback(state); else { - m_irq_state = state; if(state == CLEAR_LINE) { m_pending_irq &= ~INT_IRQ; @@ -760,7 +755,7 @@ void i80286_cpu_device::code_descriptor(uint16_t selector, uint16_t offset, int throw TRAP(FAULT_GP, IDXTBL(selector)); if(!PRES(r)) - throw TRAP(FAULT_NP, IDXTBL(selector)); // this order is important + throw TRAP(FAULT_NP, IDXTBL(selector)); // this order is important if(offset > LIMIT(desc)) throw TRAP(FAULT_GP, 0); @@ -774,7 +769,8 @@ void i80286_cpu_device::code_descriptor(uint16_t selector, uint16_t offset, int m_prev_ip = m_ip = offset; } else - { // systemdescriptor + { + // systemdescriptor uint16_t gatesel = GATESEL(desc); if(!gate) |