diff --git a/bsnes/processor/wdc65816/wdc65816.hpp b/bsnes/processor/wdc65816/wdc65816.hpp index 80556a63..3821794d 100755 --- a/bsnes/processor/wdc65816/wdc65816.hpp +++ b/bsnes/processor/wdc65816/wdc65816.hpp @@ -20,7 +20,7 @@ struct WDC65816 { virtual auto readDisassembler(uint addr) -> uint8 { return 0; } inline auto irq() const -> bool { return r.irq; } - virtual inline auto irq(bool line) -> void { r.irq = line; } + inline auto irq(bool line) -> void { r.irq = line; } using r8 = uint8; diff --git a/bsnes/sfc/cpu/cpu.hpp b/bsnes/sfc/cpu/cpu.hpp index a22b9fef..bac32b3e 100644 --- a/bsnes/sfc/cpu/cpu.hpp +++ b/bsnes/sfc/cpu/cpu.hpp @@ -52,7 +52,6 @@ struct CPU : Processor::WDC65816, Thread, PPUcounter { alwaysinline auto dmaEdge() -> void; //irq.cpp - auto irq(bool line) -> void override; alwaysinline auto pollInterrupts() -> void; auto nmitimenUpdate(uint8 data) -> void; auto rdnmi() -> bool; diff --git a/bsnes/sfc/cpu/irq.cpp b/bsnes/sfc/cpu/irq.cpp index b0bb88c6..b9564ba1 100644 --- a/bsnes/sfc/cpu/irq.cpp +++ b/bsnes/sfc/cpu/irq.cpp @@ -1,11 +1,3 @@ -//external interrupt line changed. -auto CPU::irq(bool line) -> void { - WDC65816::irq(line); - if(line) { - status.irqTransition = 1; - } -} - //called once every four clock cycles; //as NMI steps by scanlines (divisible by 4) and IRQ by PPU 4-cycle dots. // @@ -80,7 +72,7 @@ auto CPU::nmiTest() -> bool { } auto CPU::irqTest() -> bool { - if(!status.irqTransition) return 0; + if(!status.irqTransition && !r.irq) return 0; status.irqTransition = 0; r.wai = 0; return !r.p.i;