...Dado que la frecuencia de lectura depende así de la frecuencia de origen, y ésta es PAL, estamos hablando de que en la salida VGA, una línea durará la mitad que en PAL, esto es, 32us, que nos da a su vez una frecuencia horizontal de 31,25kHz. La frecuencia vertical es la misma que PAL, 50Hz. Este scandoubler no realizará desentrelazado de señales que provengan de modos "interlaced" (se verán, pero con mucho parpadeo).
En resumen: el scandoubler que puedo implementar con mis conocimientos y el hardware del que disponemos en el ZX-Uno es uno que dará una señal VGA de 704x576 puntos, a 31,25kHz horizontal y 50Hz vertical. Probablemente pueda recortar la imagen para mostrar sólamente 640x480 a costa de comer un poco de borde por los cuatro lados.
Bueno, pues estoy haciendo pruebas. En principio lo que he hecho es implementar una mira electrónica. Una mira electrónica es un dispositivo que genera una señal de video y que se usa para probar televisores, o para probar qué tal se modula/demodula esa señal en RF. Esta que he implementado genera una señal para monitor VGA con estas características:
- Resolución efectiva: 800x600
- Frecuencia de barrido horizontal: 31,25kHz
- Frecuencia de barrido vertical: 50Hz
- Señal progresiva (no entrelazada)
- Reloj de pixel de 28MHz.
La imagen que se ve es un patrón que muestra todas las tonalidades de rojo, verde y azul que puede sacar el dispositivo (8 tonalidades de rojo y verde, y 4 de azul). Este patrón ocupa 512x384 píxeles, justo lo que ocuparía el área de "paper" del Spectrum, visto en la VGA. Rodeándolo hay un borde de color magenta. La imagen con el borde ocupa 704x576. Rodeando a este borde magenta hay otro amarillo (no visible en la segunda foto, que se hizo antes de implementar dicho borde, pero sí en la primera) para "rellenar" hasta los 800x600. Así puedo ver si la imagen está bien centrada. En el scandoubler final, ese borde amarillo será en realidad negro.
La idea es de aquí, sacar un cuadro centrado de 704x576 puntos, que será la pantalla del Spectrum. Cada pixel original del Spectrum son en la VGA un cuadradito de 2x2 píxeles. De esta forma, la resolución real que obtenemos en pantalla es de 352x288 puntos, que es la nativa del Spectrum (¡el borde también cuenta!)
La he implementado en una pequeña placa FPGA que alimento por USB, y que lleva salida VGA con el mismo esquema de color que el ZX-Uno, esto es, 3-3-2 . La idea era llevármela por los laboratorios de mi departamento a la busca y captura de monitores, para pinchar la plaquita en ella, alimentarla con el USB del PC más cercano, y ver qué pasa.
He podido probarla en 10 monitores, tanto de tubo como TFT:
- Monitor TFT Philips 220SW: panorámico, 22'' con DVI, VGA y HDMI: imagen perfecta, una vez que le hemos dado al ajuste automático.
- Monitor TFT panorámico de 22'' con VGA, HDMI y DVI del cual no recuerdo la marca: imagen perfecta, una vez que le hemos dado al ajuste automático.
- Monitor TFT Benq FP767, 17'' 4:3, con VGA: imagen perfecta.
- Monitor TFT LG Flatron L1715S 4:3 con VGA: error de imagen fuera de rango. No se ve nada, salvo el cartelito del OSD.
- Monitor TFT AOC 17'' (sin número de modelo visible) 4:3 con VGA y DVI: aparece la imagen, desplazada un poco a la izquierda. Sobreimpresionada a ella, un cartel del OSD indicando "entrada inválida" (pero la imagen se ve)
- Monitor TFT Asus panorámico 17'' (sin número de modelo visible) con VGA: aparece la imagen, desplazada un poco a la izquierda. Sobreimpresionada a ella, un cartel del OSD indicando "entrada inválida" (pero la imagen se ve).
- Monitor TFT Philips A170 17'' 4:3: error de imagen inválida. No se ve nada, salvo el cartelito del OSD.
- Monitor CRT Samsung SyncMaster 753DFX 17'' 4:3 con VGA: imagen perfecta, una vez que se ha accedido al menú de opciones para centrar la imagen.
- Monitor CRT AOC 17'' 4:3 con VGA: imagen perfecta, una vez que se ha accedido al menú de opciones para centrar la imagen.
- Monitor CRT IBM PS/1 12'' 4:3 con VGA: imagen casi perfecta. Hay una banda de color a la derecha de la imagen, que creo que se debe a la elección de los parámetros del back porch y el front porch. Según los valores que use, la banda es más o menos prominente, o incluso desaparece.
Así se ve en el SyncMaster, uno de los que he probado donde mejor se ve


En mi despacho he podido montar algo parecido al escritorio de Matrix, con cuatro de los monitores listados, para probar. De los cuatro, tres muestran la imagen (Philips 220SW, IBM PS/1 y Benq FP767), así que son los que salen en la foto. La foto es en realidad un montaje fotográfico combinando tres fotos, hechas desde el mismo sitio, enchufando la mira electrónica a cada monitor por separado en cada una:

En los dos casos (cuatro si contamos los dos monitores que muestran la imagen pero aún así dicen que está fuera de rango), no tengo ninguna pista de cuál de los parámetros de la señal es el que está fuera de rango. En realidad, y por lo que al monitor se refiere, los únicos parámetros que conoce son la frecuencia horizontal y la vertical.
La frecuencia vertical (50Hz) no es negociable, so pena de usar un scandoubler de frame completo, y eso no lo tenemos disponible con los recursos de que disponemos en la placa. Recordemos que el scandoubler de línea funciona enviando la imagen a la VGA a una frecuencia que debe ser 2 veces, 4 veces, 8 veces, etc, la frecuencia original, para que en el mismo tiempo que la ULA genera una línea (64us), el scandoubler envíe 2,4,8, o las que sea, haciendo por tanto que el tamaño vertical de un pixel crezca en la misma proporción. Para que la relación de aspecto del pixel siga siendo 1:1, habrá también que duplicar, cuadruplicar, etc, la resolución horizontal.
La frecuencia horizontal (31,25kHz) podría multiplicarse por 2, y obtener 62,5kHz. Esto supondría implementar un modo de pantalla del doble de píxeles horizontales y verticales respecto a como está ahora. Si parto de la resolución inicial, de 800x600, tendría que subirlo a 1600x1200, y eso lo haría inviable para practicamente cualquier monitor actual. Si parto de una resolución de 640x480 (la cual puedo conseguir cortando el borde por los lados), obtengo otra de 1280x960, que entra dentro del rango representable en un monitor de 17'' TFT o CRT.
Si los errores de fuera de rango lo son por la frecuencia horizontal, y no por otra cosa, es posible que de esta forma se solucionen. Si vienen por la frecuencia vertical, no es posible cambiarla, salvo que cambies la ULA entera y los timmings dejen de ser compatibles con el Spectrum que conocemos.