
Hasta ahora, para poder ver más o menos decentemente una demo hecha para estos equipos había que usar el parámetro -cn en .zxunocfg para quitar la contención de memoria, pero esto no era suficiente para algunas demos.
Resulta que el Pentagon tiene unos timings bastante particulares: usa los timings del 48K en lo que se refiere a T-states por linea (224), pero un número bastante mayor en lo que son T-states por frame (69888 en el 48K frente a 71680 del Pentagon).
Esto en la práctica explica en parte por qué algunas demos de Pentagon se ven bien si, además de quitar la contención, ponemos timings de 48K, y por qué otras se ven bien con timings de 128K. Las primeras usan temporizaciones críticas para hacer efectos multicolor en una línea y necesitan sus 224 estados. Las segundas necesitarán más tiempo por frame para hacer su "magia" y los 69888 T-estados del modo 48K no son suficientes. El 128K ofrece unos pocos de más estados.
Un cálculo rápido nos da que el número de líneas por frame del Pentagon son por tanto 320 frente a las 312 del Spectrum 48K. Otro cálculo nos dice que esto provoca que la tasa de refresco vertical del Pentagon sea de: 3500000/(224*320) = 48.828 Hz , lo cual es un poco menos que los 50 Hz nominales de la norma PAL (en el Spectrum 48K esta tasa de refresco es en realidad 50,080 Hz).
Si este refresco tan bajo no gusta a algún televisor/monitor, se puede remediar usando el parámetro -f en la utilidad .zxunocfg para indicar una frecuencia de trabajo un poco más elevada. Este parámetro no sólo funciona en modo VGA sino también con video compuesto/RGB.
En el ZX-Uno no usamos un reloj de exactamente 3500000 para el Z80, sino ligeramente superior: 3515625 (esto para el modo por defecto, -f0, y está entre la frecuencia que tiene el Z80 en un Spectrum 48K original y un 128K original). La frecuencia de refresco vertical del Pentagon en este caso no es la anterior, sino 49,046 Hz. Subiendo la frecuencia de trabajo un poquito, con -f1, ya tenemos una tasa de refresco vertical de 49,82 Hz que en la práctica debería ser suficiente para que enganche el monitor. A esta frecuencia de trabajo, el reloj del Z80 va a la misma velocidad que en un 128K, así que tampoco se notará la diferencia.
Tengo que hacer notar que cuando se ejecuta .zxunocfg , en la pantalla de información aparece un valor en herzios al lado de "VFreq opt": este valor está calculado para un Spectrum 48K. No se recalcula para el resto de casos. Es sólo una indicación de qué nivel es el seleccionado actualmente (entre paréntesis está la opción de frecuencia que el usuario tiene escogida en ese momento).
Los nuevos timings han tenido en cuenta todo lo explicado y más: los tamaños de los bordes izquierdo, derecho, superior e inferior cambian. La pantalla no se ve centrada, y supuestamente tampoco se vería centrada en un Pentagon real si se pone en un monitor LCD. No lo sé con certeza por la sencilla razón de que no tengo un Pentagon real para poder mirar sus señales con un analizador lógico (acabo de encontrar un esquema eléctrico del Pentagon, así que igual por ahí puedo deducir sus señales). En otro momento y otro post hablaré de una posibilidad para remediar este descentraje. El momento del disparo de la interrupción por retrazo vertical también cambia, y en el caso del Pentagon es un disparo en un sitio más "raro" (aunque no llega al nivel de exotismo del Inves Spectrum).
(UPDATE: he encontrado este documento que corrobora algunos de los timings que he usado. Otros los tengo que repasar...) En fin: todo esto significa que tenemos ahora dos bits en el registro de configuración para establecer el modo de funcionamiento de la ULA:
00 : 48K
01 : 128K
10 : Pentagon
11 : Reservado (en este momento, hace lo mismo que 10)
En la wiki técnica se encuentran todos los detalles (o mejor dicho, todos los que me ha dado tiempo a revisar):
http://www.zxuno.com/wiki/index.php/ZX_ ... _de_ZX-Uno
De momento no hay que cambiar nada en la BIOS para soportar los modos que ya teníamos. Sí habrá que cambiar para soportar el nuevo modo Pentagon si así se quiere hacer. De momento, la utilidad ZXUNOCFG ya ha sido actualizada para reflejar el nuevo modo. Así, para disfrutar de las demos de Pentagon sin glitches ni cosas extrañas, podeis hacer: .zxunocfg -tpen -cn (el ejemplo en la ayuda de .zxunocfg también ha sido actualizado

No todas las demos de Pentagon funcionarán: algunas requieren más de 128K, o alguna otra característica propia del Pentagon que no está implementada (como acceso real a una interfaz BetaDisc). Pero la gran mayoría sí que funcionarán bien. Unos ejemplos para que los cargueis desde el menú NMI del DivMMC (buscar la versión TRD o TAP) y que antes no se veían bien, o en algunos casos, ni llegaban a cargar:
Kpacku Deluxe: no funciona entera. Llega un momento en que se cuelga, pero la parte que funciona lo hace muy bien. Efectos de atributos multicolor.
http://www.pouet.net/prod.php?which=66295
Scroller: pantallas multicolor que se van sucediendo usando un efecto de "pérdida de sincronismo" como cuando va y viene la imagen en una TV. Para ejecutarla, RUN "SCROLLER"
http://www.pouet.net/prod.php?which=56455
Confusion: (pulsar SPACE para salir del texto inicial). El primer efecto usando el borde es imposible de ver bien si los timings no son correctos

http://www.pouet.net/prod.php?which=1952
Cambrian Explossion: un efecto "twister" multicolor que sólo se ve bien con los timings adecuados. Aquí tengo que decir que el efecto deja una linea de basurilla en la parte superior de la msima, pero es que la misma basurilla la he visto si uso el emulador Unreal Speccy (supuestamente, el emulador de referencia para los modelos rusos de Spectrum). Para ejecutar, RUN "cambrian"
http://www.pouet.net/prod.php?which=61692
Heart: esta demo sencillamente no arranca si los timings no son correctos. Hasta ahora, cuando lo intentaba, sólo conseguía una pantalla que "latía" entre el negro y el rojo, y ya está. Pero con los timings de Pentagon, se ve en todo su esplendor (al menos hasta que después de la pantalla de la chica con dos corazones se resetea sin inicializar el AY-3-8912 ni volver a la pantalla principal -se queda en la shadow-). Arrancar con RUN "HEART"
http://www.pouet.net/prod.php?which=62378
Paralactika: esta demo ya la podemos ver bien desde antes, porque se hizo una versión compatible con Spectrum 128K y contención de memoria activa, pero ahora podemos disfrutar de la original en formato TRD.
http://www.pouet.net/prod.php?which=57610
Si alguna de estas demos no arranca automáticamente al seleccionarlas de la lista de ficheros, haced lo siguiente:
- Desde el prompt del TRDOS (porque estareis ahí) usad la orden CAT (modo extendido -tecla TAB-, y luego shift + 9) para sacar una lista de archivos.
- Buscad uno que tenga al lado la secuencia <B>. Eso indica que es un programa BASIC, presumiblemente el cargador. Para ejecutarlo, teclear: RUN "nombredelprograma" y ya está.
- Si teneis que volver al BASIC "normal", por ejemplo para poder ejecutar comandos de ESXDOS, teclear RETURN (la tecla Y)
- Para ir del BASIC al TRDOS, teclear: RANDOMIZE USR 15616 .