Soporte de timings Pentagon completo

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Soporte de timings Pentagon completo

Mensaje por mcleod_ideafix » 05 Dic 2015, 14:49

Bueno, pues en la línea de César, vamos a dejar más estela para seguir :D . Entre el jueves y ayer viernes terminé de incorporar los timings completos del Pentagon al TEST 20.

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...)
timings_pentagon128.png
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 .
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
Quest
Mensajes: 900
Registrado: 27 Sep 2015, 00:20

Re: Soporte de timings Pentagon completo

Mensaje por Quest » 05 Dic 2015, 15:18

:gracias!: :gracias!: :gracias!:
:plasplas: :chocala!: :plasplas: :plasplas: :plasplas: :plasplas:
:maestro: :maestro: :maestro:

Diossssss!

Esto lo esperaba yo como agua de mayo :D menudo alegrón me has dado con esta sorpresita.. :D

Lástima que tenga poco tiempo últimamente. A ver si saco un huequito para probarlo, que ya tenía guardaditos unos cuantos TRDs para Pentagon deseando ponerse en marcha :)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
Haplo
Mensajes: 368
Registrado: 05 Oct 2015, 13:51
Ubicación: Ciudad Real

Re: Soporte de timings Pentagon completo

Mensaje por Haplo » 05 Dic 2015, 15:33

Toma yaaa! otro que cae!

Excelente trabajo de investigación!

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Soporte de timings Pentagon completo

Mensaje por chernandezba » 05 Dic 2015, 16:16

Cachis!!! Que no me dais tiempo, cuando agrego yo algo vosotros ya habéis hecho el doble de trabajo, jejej
La verdad es que el tema del pentagon ya lo miré en su momento; me llamó la atención de todos los clones rusos que hay. En un futuro creo que también agregare soporte de pentagon/scorpion y quizá algún clon ruso más. Pero bueno tiempo al tiempo... Me alegra saber que si tengo alguna duda de los timings de dichas máquinas podré consultarlo con vosotros ;)

Saludos
César
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Soporte de timings Pentagon completo

Mensaje por chernandezba » 20 Feb 2016, 16:42

Hola
He probado todas esas demos de Pentagon y funcionan perfectas en ZEsarUX, ahora que le he agregado soporte de timings de Pentagon. Excepto la Confusion, que en cuanto pulso Espacio la pantalla se llena de "basura" y se queda colgado.
Incluso la paralactika, que ni la versión de 128k veo bien en emulador, con la versión de Pentagon en ZEsarUX sí se ve.

Esta es la famosa Hada del Paralactika, que tantos dolores de cabeza me había dado, con los timings de Pentagon en ZEsarUX:

Imagen

Podéis apreciar que el footer de la ventana aparece "duplicado" los FPS y el uso de cpu, esto es porque como pentagon usa diferentes scanlines, en cuanto activo el timing de Pentagon se me desplaza el texto... pero vamos es un bug visual que no me preocupa mucho


Saludos
César
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Soporte de timings Pentagon completo

Mensaje por chernandezba » 20 Feb 2016, 16:43

Evidentemente, con timings de pentagon y activando también soporte gigascreen... sino ya sabéis: parpadeos y no hay colores adicionales
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

hikoki
Mensajes: 307
Registrado: 21 Feb 2016, 01:38

Re: Soporte de timings Pentagon completo

Mensaje por hikoki » 21 Feb 2016, 20:34

Este soporte para el pentagon animará a los rusos a hacerle perrerías al zxuno
¿Habéis pensado en preguntar directamente en el foro ruso zx-pk.ru?
Un miembro ruso de wos,@azesmbog,también se ha prestado a ayudar con el zxuno.
Saludos

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Soporte de timings Pentagon completo

Mensaje por chernandezba » 21 Feb 2016, 20:50

Que cosas quieres decir que hay que preguntar?
Si, azesmbog me preguntaba a mí en WOS sobre el zxuno y yo le he reenviado a este foro ;)
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

hikoki
Mensajes: 307
Registrado: 21 Feb 2016, 01:38

Re: Soporte de timings Pentagon completo

Mensaje por hikoki » 21 Feb 2016, 21:32

Nada que igual Mcleod o César encontrais informacion, ayuda, tests de mas gente ahi y de paso promocionais el zxuno en el mismo escaparate ruso.

Avatar de Usuario
chernandezba
Mensajes: 841
Registrado: 02 Oct 2015, 23:35

Re: Soporte de timings Pentagon completo

Mensaje por chernandezba » 21 Feb 2016, 22:42

Ah ok, sí que puede ser interesante.
De todas maneras de momento yo estoy contento pues puedo ver esas demos correctamente.
Para tener emulación completa de Pentagon habría que tener emulación de archivos trd (cosa que ahora solvento con esxdos), emulación de más de 128kb, y otras particularidades del pentagon...
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Responder