    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