diff --git a/Processors/6502/CPU6502.hpp b/Processors/6502/CPU6502.hpp index 6777571f1..44a75f7d2 100644 --- a/Processors/6502/CPU6502.hpp +++ b/Processors/6502/CPU6502.hpp @@ -616,6 +616,12 @@ template class Processor { op;\ } +#define bus_access() \ + _interrupt_requests = (_interrupt_requests & ~InterruptRequestFlags::IRQ) | (_irq_request_history ? InterruptRequestFlags::IRQ : 0); \ + _irq_request_history = _irq_line_is_enabled && !_interruptFlag; \ + number_of_cycles -= static_cast(this)->perform_bus_operation(nextBusOperation, busAddress, busValue); \ + nextBusOperation = BusOperation::None; + checkSchedule(); number_of_cycles += _cycles_left_to_run; const MicroOp *program = _scheduledPrograms[scheduleProgramsReadPointer]; @@ -628,6 +634,11 @@ template class Processor { if(!_ready_is_active) { + if(nextBusOperation != BusOperation::None) + { + bus_access(); + } + while(number_of_cycles > 0) { const MicroOp cycle = program[scheduleProgramProgramCounter]; @@ -1098,10 +1109,7 @@ template class Processor { _ready_is_active = true; break; } - _interrupt_requests = (_interrupt_requests & ~InterruptRequestFlags::IRQ) | (_irq_request_history ? InterruptRequestFlags::IRQ : 0); - _irq_request_history = _irq_line_is_enabled && !_interruptFlag; - number_of_cycles -= static_cast(this)->perform_bus_operation(nextBusOperation, busAddress, busValue); - nextBusOperation = BusOperation::None; + bus_access(); } } }