diff --git a/Processors/6502Mk2/Implementation/6502.hpp b/Processors/6502Mk2/Implementation/6502.hpp index 41a4ebe1b..9c18d580f 100644 --- a/Processors/6502Mk2/Implementation/6502.hpp +++ b/Processors/6502Mk2/Implementation/6502.hpp @@ -689,6 +689,28 @@ void Processor::run_for(const Cycles cycles) { check_interrupt(); access(BusOperation::Read, Vector(0xfd), registers.pc.halves.high); goto fetch_decode; + + // MARK: - STP and WAI. + case access_program(STP): + stopped: + if(Storage::cycles_ <= Cycles(0)) { + Storage::resume_point_ = access_program(STP); + return; + } + access(BusOperation::None, Vector(0xff), Data::NoValue{}); + goto stopped; + + case access_program(WAI): + waiting: + if(Storage::cycles_ <= Cycles(0)) { + Storage::resume_point_ = access_program(WAI); + return; + } + access(BusOperation::Ready, Vector(0xff), Data::NoValue{}); + if(Storage::inputs_.interrupt_requests) { + goto fetch_decode; + } + goto waiting; } #undef access_program