No se va a notar lo más mínimo si no lo haces así.
El caso es que sí se nota en ciertos casos muy puntuales. Me pasó en el Caos Begins. Al cambiar de área se descomprimía el mapeado, lo que podía tardar más de una int. Supongo que dos, quizá tres, no llegué a medirlo. En ese caso concreto, si no tenía el player dentro de la rutina de interrupción, se notaba un pelín de parón en la música. Casi nada, tenías que estar muy atento para notarlo, pero se podía oir.
De todas formas, ¿llamas al replayer musical completo? ¿No sería mejor simplemente volcar los datos producidos por el replayer (un coste muchísimo menor) y después de todas las transferencias a VRAM ya llamar al replayer musical que produzca los datos para el siguiente frame?
Tienes razón. Ahora tengo que llamar al replayer después del volcado a VRAM. Como en lo que estoy haciendo hay bastantes diferencias en la cantidad de datos que envío a VRAM en ints consecutivas (en algunas mando sobre 700 bytes y en otras menos de 100), las llamadas al replayer no son exactamente periódicas.
Haciéndolo como dices tú, podría hacer el volcado antes y estaría perfecto. Aún así, no noto nada raro en la música. Más aún... el replayer no es mío, es PSG+FM, me da que es bastante complicadete y prefiero no meterme en el código del replayer para separar replayer de escritura de registros.
Para nada. Si te enganchas en FD9A y ahí lees el registro de estado del VDP estarás limpiando el bit de interrupción, con lo que al volver a la BIOS ésta se creerá que no es una interrupción de VBLANK y volverá tras restaurar los registros. Échale un vistazo al código que puse en snippets.
¡Eso es lo que estaba buscando! ¡Gracias SapphiRe! De hecho, ahora que lo has mencionado, recuerdo haber leido algo sobre el tema, seguramente algún mensaje tuyo, o haberme mirado los snippets hace tiempo. Thanks!