let stepper () =
    // Execute a single instruction
    // Each instruction uses a different amount of cycles
    let mCycles = stepCpu cpu io
      
    for _ in 1..mCycles do  
        stepTimers timer io  
        stepSerial serial io
        // The APU technically runs at 4x CPU-cycles, but can be batched
        stepApu apu  
      
    let tCycles = mCycles * 4  
    
    // The PPU operates at 4x CPU-cycles. The APU should be here too
    for _ in 1..tCycles do  
        stepPpu ppu  
    
    // Return cycles taken so the frontend runs the emulator at the right speed
    mCycles