El Apple II fue un pionero en el mundo de la computación personal y sus múltiples accesorios y expansiones marcaron una era en la evolución tecnológica. Uno de estos accesorios fundamentales fue el MouseCard, un componente que aportó al usuario la capacidad de utilizar un ratón con el Apple II, mejorando la interacción y el control sobre las aplicaciones gráficas. Un aspecto clave y frecuentemente discutido en la comunidad de desarrolladores del Apple II es cómo la interrupción IRQ del MouseCard se sincroniza con la señal de Vertical Blank o VBL, un fenómeno esencial para el correcto funcionamiento y la fluidez visual de los gráficos en pantalla. Aunque la existencia de esta sincronización ya es conocida, el “cómo” y el “por qué” detrás de este mecanismo no siempre resultan evidentes ni han sido discutidos en profundidad. Esta exposición busca aclarar y detallar ese proceso técnico que hace que la interrupción IRQ del MouseCard esté perfectamente sincronizada con el VBL, aportando una comprensión técnica válida para cualquier interesado en el sistema Apple II y su ecosistema.
Para situar el contexto, la señal de Vertical Blank (VBL) se refiere al intervalo en el que el haz del monitor deja de dibujar la pantalla y se reposiciona para iniciar un nuevo ciclo de dibujo. Durante este intervalo, el sistema puede actualizar la memoria de video sin causar parpadeos o artefactos visuales. El Apple II, como muchas otras computadoras de su época, dependía de la sincronización con esta señal de VBL para proporcionar experiencias visuales coherentes y estables, especialmente en videojuegos o programas que requerían refrescos frecuentes de la pantalla. La MouseCard del Apple II genera una interrupción por solicitud (IRQ) que, según la documentación oficial, está sincronizada con la señal de Vertical Blank. Sin embargo, esta sincronización generó dudas en la comunidad porque el MouseCard, a nivel físico, aparentemente no tenía acceso directo a la señal VBL en su hardware.
Algunos desarrolladores sostuvieron que la interrupción podía estar simplemente emitiéndose a la misma frecuencia que la VBL, pero sin una verdadera sincronización de ciclo a ciclo. Este debate se intensificó al contrastar las experiencias de emulación a través de MAME con el funcionamiento real de la máquina Apple II, donde se evidenció una diferencia notoria en la estabilidad gráfica. Un punto de partida fue la observación de que en el emulador MAME, el juego Shufflepuck presentaba un parpadeo notorio, mientras que en un Apple //c real, que aunque no tenía un MouseCard exacto, mantenía una reproducción visual impecable. Esto impulsó a varios desarrolladores, incluyendo a expertos en emulación como Robert Justice y R. Belmont, a investigar en profundidad el comportamiento interno del MouseCard.
La conclusión fue clara: la interrupción IRQ del MouseCard del Apple II está sincronizada de manera precisa y exacta con la señal de VBL, incluso disparándose en simultaneidad con el inicio del Vertical Blank. ¿Cómo logra entonces el MouseCard esta sincronización sin acceso físico directo a la señal VBL? La respuesta reside en una interacción inteligente entre software y hardware. Cuando un programador llama a la rutina MOUSE_INIT, el firmware del mouse espera el inicio del Vertical Blank mediante la lectura de un softswitch específico, RDVBL, ubicado en la dirección $C019 en la memoria del Apple IIe. No siempre estuvo disponible esta softswitch, como en el caso del Apple II+, donde la solución fue más ingeniosa: se creaba una página de memoria de gráficos en alta resolución (HGR) llena de ceros y algunos bytes alterados en posiciones particulares para identificar el momento exacto del haz en la pantalla, y luego se realizaba una técnica conocida como vapor lock para esperar el momento correcto. Este método, aunque menos exacto que la lectura directa del softswitch, lograba una sincronización suficiente para determinar dónde se encontraba el haz y, por ende, estimar el inicio del VBL.
Una vez que el firmware del MouseCard detecta el inicio del VBL, inicia la configuración de un microcontrolador 68705 incorporado en la tarjeta. Este microcontrolador trabaja en conjunto con un 6821 PIA (Interface de Entrada/Salida Programable) para gestionar la generación de interrupciones sincronizadas. Durante la fase de configuración, el código del firmware lee y escribe en registros específicos del PIA para preparar la comunicación con el 68705. Curiosamente, en la MouseCard existen dos firmwares: uno ejecutado por la CPU principal 6502 del Apple II y otro corriendo en el 68705, siendo este último el responsable de manejar con precisión el temporizador y las interrupciones. El 68705 cuenta con un temporizador hardware de 8 bits, que decrementa de forma periódica y dispara una interrupción una vez que alcanza cero.
El firmware del 68705 está diseñado para que esta interrupción coincida exactamente con la frecuencia de refresco del VBL, que es aproximadamente 59.92 Hz en los sistemas NTSC y 50.32 Hz en PAL. El temporizador se programa con valores específicos que definen la cantidad de ciclos entre cada interrupción, ajustándose para sincronizarse con la señal VBL. Esto implica que en cada ciclo de interrupción, el 68705 informa al microprocesador principal mediante una señal que genera un IRQ, exactamente al inicio del Vertical Blank.
Un dato importante es que el 68705 opera a 2 MHz, el doble del reloj de 1 MHz de la CPU 6502 del Apple II. Con este dato y los valores específicos programados en los registros del temporizador, se puede calcular que la interrupción ocurre cada 17030 ciclos en NTSC y 20280 ciclos en PAL, lo que corresponde a la duración entre dos señales de Vertical Blank. Así, aunque parezca complejo, el hardware y el firmware trabajan en conjunto para que la interrupción del MouseCard se dispare al mismo tiempo que la señal VBL, asegurando que cualquier proceso sincronizado con esta interrupción se ejecute en el momento óptimo para evitar parpadeos y artefactos visuales. Para los programadores que desean aprovechar esta característica y sincronizar sus aplicaciones a esta interrupción, es fundamental entender que el sistema puede hablar tanto con máquinas NTSC como PAL. Por lo tanto, la configuración del temporizador debe ajustarse dinámicamente.
Algunos métodos para identificar la frecuencia del sistema se basan en medir el tiempo entre dos señales de VBL mediante técnicas de conteo de ciclos o, si se utiliza el compilador cc65, mediante la función get_tv(), que determina el tipo de señal de video. En caso de no poder determinar automáticamente, el programa puede solicitar al usuario que indique la versión de su máquina. Esta atención a la diversidad asegura que las interrupciones aparezcan sincronizadas correctamente en cualquier variante regional del Apple II. Aunque la sincronización es precisa, hay que destacar que existe un retraso inherente en la propagación de la interrupción IRQ. La señal, después de generarse, pasa por el vector de interrupción, el sistema operativo ProDOS, y los distintos manejadores de IRQ antes de que el código del programa la perciba.
Este retraso significa que el propio código recibe la notificación unos cientos de ciclos más tarde, lo que los desarrolladores deben considerar para ajustar la lógica de actualización gráfica o procesamiento de entrada. En resumen, la sincronización de la interrupción IRQ del Apple II MouseCard con la señal de Vertical Blank se logra gracias a una combinación inteligente de software y hardware. La detección inicial del VBL mediante softswitch o técnicas de vapor lock permite al firmware del MouseCard preparar el microcontrolador 68705 para generar interrupciones precalibradas que coinciden con la frecuencia del VBL. Esta precisión se traduce en una experiencia gráfica fluida y sin parpadeos, algo que los usuarios del Apple II apreciaron enormemente y que aún hoy despierta admiración por su sofisticación técnica. Este profundo conocimiento del funcionamiento interno del MouseCard no solo ayuda a mantener viva la historia del Apple II y su comunidad, sino que también sirve como inspiración para diseñadores y desarrolladores actuales, que pueden apreciar el nivel de detalle y ingenio requerido para lograr sincronizaciones tan precisas con recursos limitados.