Manic Miner en ZX81

mcleod_ideafix
Mensajes: 925
Registrado: 13 Ene 2012 09:45

Re: Manic Miner en ZX81

Mensajepor mcleod_ideafix » 24 Ene 2013 02:22

Último mensaje de la página anterior:

Pues creo que no ;)

La direccion de la instruccion que se esta ejecutando no es nada aleatoria. Cada NOP tarda en ejecutarse justo lo que se tarda en pintar 8 pixeles, de forma que cuando la linea ha terminado se ejecuta HALT, que deja a la CPU esperando hasta que se produzca el sincro horizontal.

La ULA no puede direccionar memoria. En el ZX81 eso sólo lo puede hacer la CPU. La ULA solo hace de "parásito", dejando que la CPU haga el trabajo sucio para después robarle el dato.
Cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista.

Avatar de Usuario
wilco2009
Mensajes: 1874
Registrado: 07 Ene 2013 16:48
Ubicación: Valencia
Agradecido : 104 veces
Agradecimiento recibido: 170 veces

Re: Manic Miner en ZX81

Mensajepor wilco2009 » 24 Ene 2013 07:56

mcleod_ideafix escribió:Pues creo que no ;)

La direccion de la instruccion que se esta ejecutando no es nada aleatoria. Cada NOP tarda en ejecutarse justo lo que se tarda en pintar 8 pixeles, de forma que cuando la linea ha terminado se ejecuta HALT, que deja a la CPU esperando hasta que se produzca el sincro horizontal.

La ULA no puede direccionar memoria. En el ZX81 eso sólo lo puede hacer la CPU. La ULA solo hace de "parásito", dejando que la CPU haga el trabajo sucio para después robarle el dato.


Seguramente no hago bien los cálculos, pero no me salen las cuentas.

Si la pantalla se refresca cada 1/50 segundos (0.02 seg) y una instrucción NOP tarda 1/4E6seg/ciclox4 ciclos,entonces los 192x32bytes de la pantalla se tardarian en pintar 192x32x1E-6=0.006144 seg, lo que es mucho menos que un refresco de pantalla y no parece justificarsecon los márgenes.
"Nada viaja a mayor velocidad que luz con la posible excepción de las malas noticias las cuales obedecen a sus propias leyes."

Douglas Adams. Guía de autoestopista galáctico.

mcleod_ideafix
Mensajes: 925
Registrado: 13 Ene 2012 09:45

Re: Manic Miner en ZX81

Mensajepor mcleod_ideafix » 24 Ene 2013 14:57

wilco2009 escribió:una instrucción NOP tarda 1/4E6seg/ciclox4 ciclos

El reloj del Z80 en el ZX81 no va a 4MHz, sino a 3.25MHz. Justo la mitad que la frecuencia a la que se pintan los píxeles. Una instrucción NOP tarda: 4/3.25e6 = 1,230769 microsegundos.

wilco2009 escribió:entonces los 192x32bytes de la pantalla se tardarian en pintar 192x32x1E-6=0.006144 seg

En realidad, una pantalla de 192x32 tarda en pintarse 192*32*1,230769=7,561846 milisegundos.

wilco2009 escribió:lo que es mucho menos que un refresco de pantalla y no parece justificarsecon los márgenes.

Pues se justifica :)

Cada línea de pantalla en PAL debe durar 64 microsegundos. En esta duración se incluye no solamente lo que ves en pantalla (área de imagen + márgenes izquierdo y derecho) sino también el llamado intervalo de blanking (que contiene a su vez al intervalo de pulso horizontal, front porch y back porch)

De esos 64 microsegundos, se están gastando 1,230769*32=39,38 microsegundos en pintar lo que es solamente los 256 píxeles que toca pintar en esa línea.
El resto, 24,615 microsegundos, se reparten entre el borde derecho e izquierdo () y el intervalo de blanking

Para los cálculos necesarios para ver que todo esto "casa", te emplazo a este post donde estuve explicando cómo sacar los diferentes parámetros de un sistema de video dados unos valores de inicio (frecuencia de pixel, y resolución de pantalla)

Por ejemplo, ahí puedes leer lo que es la "regíón activa" de un scanline, que es la suma de lo que ocupan los 256 píxeles más los bordes izquierdo y derecho. Dado que es mucho más cómodo (por el tema de los decimales) trabajar con ciclos de reloj en lugar de con microsegundos, diremos que para un reloj de pixel de 6,5MHz, la longitud de un scanline serán 416 ciclos de reloj. De ellos, 256 se emplean para pintar los 256 píxeles. Nos quedan 160 que se reparten entre el intervalo de blanking y los bordes izquierdo y derecho.
Hemos dicho que la región activa dura 52 microsegundos. Expresado en ciclos de reloj de pixel, tenemos 338 ciclos. De esa región activa repetimos que ya hemos usado 256 ciclos (píxeles). Nos quedan 82 ciclos (píxeles). De aquí se calcula que el tamaño en píxeles de los bordes laterales es de 41 píxeles cada uno.
Como hemos dicho, los 160 ciclos restantes hasta completar los 416, se emplean para el blanking.

Todo esto (región activa + blanking) se repite no 192 líneas, sino muchas más, ya que hay borde superior e inferior. Si tomamos únicamente las 192 líneas que constituyen la imagen manejable, el pintado de ellas (con su borde, su blanking y todo) dura 192*416=79872 ciclos de pixel, o expresado en milisegundos, 12,288 ms

El campo completo (bueno, cuadro en este caso porque es PAL progresivo) dura 20ms. La duración en ciclos de reloj debe ser un múltiplo entero del valor 79872, ya que el ZX81 no genera líneas partidas (que el PAL real sí hace). En 20 milisegundos caben 312 líneas (312.5 en PAL "pata negra" pero el ZX81 no hace esto). 312 líneas duran: 312*79872=24920064 ciclos.

Pero al igual que pasa con los píxeles de un scanline, no todas las líneas de esas 312 líneas son visibles en el monitor. Algunas de ellas no tienen "nada" y forman parte del intervalo de blanking vertical. Si mal no recuerdo, dicho intervalo lo forman 24 líneas de esas 312, con lo que para el área activa + bordes superior e inferior te quedan 288 líneas. Dado que de esas 288 líneas estás usando 192 para el área activa, te quedan 96 líneas para ambos bordes, es decir, que cada borde superior e inferior tiene una anchura de 48 líneas de exploración.

En resumen: los 20 milisegundos que dura un cuadro aquí se reparten así:
312 líneas durando cada una 64 microsegundos = 19,968 milisegundos (casi casi 20 milisegundos. El "casi" es por culpa de que el ZX81 no genera las líneas "partidas" de PAL)
De esas 312 líneas, 24 se emplean para el blanking vertical. Esto se lleva 24*64=1,536 ms
De las 288 líneas restantes, 96 (48+48) son líneas que corresponden a los bordes superior e inferior. Dibujar ambos bordes, con sus correspondientes intervalos de blanking horizontal lleva: 96*64=6,144 ms
El resto de líneas (192) que no se corresponden a borde superior e inferior, tienen tres partes visibles: borde izquierdo, paper y borde derecho, y una parte no viisble que es el blanking horizontal (presente en todas las líneas)
Cada una de esas líneas debe tardar 64 microsegundos, como las demás. Esos 64 microsegundos se distribuyen así: borde izquierdo (41 píxeles) tarda 41/6.5=6,307 microsegundos. Los 256 píxeles tardan 39,3846 microsegundos. El borde derecho, otros 6,307 microsegundos. El blanking horizontal debe tardar 12 microsegundos según norma PAL. La suma nos da: 6,307+39,3846+6,307+12=63,9986 microsegundos. No da 64 justito por los errores de redondeo que he cometido en este último cálculo.
Cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista.

Avatar de Usuario
wilco2009
Mensajes: 1874
Registrado: 07 Ene 2013 16:48
Ubicación: Valencia
Agradecido : 104 veces
Agradecimiento recibido: 170 veces

Re: Manic Miner en ZX81

Mensajepor wilco2009 » 24 Ene 2013 17:13

Muchísimas gracias por la información maestro. Ahora ya me cuadra todo.
Ha sido tremendamente instructivó para mi este hilo.
Sobre todo gracias por la paciencia. Espero hayáis sabido disculpar mi falta de conocimientos en alguno de los temas de hardware.

Ahora ya solo me queda recapitular todo y empezar a hacer pruebas.
"Nada viaja a mayor velocidad que luz con la posible excepción de las malas noticias las cuales obedecen a sus propias leyes."

Douglas Adams. Guía de autoestopista galáctico.

Avatar de Usuario
ron
Mensajes: 18397
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1570 veces
Agradecimiento recibido: 1315 veces

Re: Manic Miner en ZX81

Mensajepor ron » 07 Mar 2013 14:18


Avatar de Usuario
Luis
Mensajes: 1084
Registrado: 03 Nov 2010 19:00
Agradecido : 209 veces
Agradecimiento recibido: 113 veces

Re: Manic Miner en ZX81

Mensajepor Luis » 07 Mar 2013 14:23

¿¿13-14 segundos en cargar el juego?? -shock -shock -shock
West of House
You are standing in an open field west of a white house, with a boarded front door. There is a small mailbox here.

Avatar de Usuario
ron
Mensajes: 18397
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1570 veces
Agradecimiento recibido: 1315 veces

Re: Manic Miner en ZX81

Mensajepor ron » 07 Mar 2013 15:22

Pasas el .TZX o el .P por el OTLA ZX81 y el WAV generado es lo que tarda en cargar. 14 segundillos de nada, a que mola eh ?

dancresp
Mensajes: 5336
Registrado: 13 Nov 2010 02:08
Agradecido : 150 veces
Agradecimiento recibido: 287 veces

Re: Manic Miner en ZX81

Mensajepor dancresp » 07 Mar 2013 16:22

Bonito video ron, pero... ¿me lo parece a mi o esta versión va acelerada?

Lo de la carga en 7 segundos, flipante.
Como demasiadas cosas en este pequeñín...

Avatar de Usuario
ron
Mensajes: 18397
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1570 veces
Agradecimiento recibido: 1315 veces

Re: Manic Miner en ZX81

Mensajepor ron » 07 Mar 2013 16:27

En 7 no, en 14 segundos.
Y no está acelerado para nada, el único MOD que tiene mi ZX81 es el del video inverso xD

dancresp
Mensajes: 5336
Registrado: 13 Nov 2010 02:08
Agradecido : 150 veces
Agradecimiento recibido: 287 veces

Re: Manic Miner en ZX81

Mensajepor dancresp » 07 Mar 2013 16:33

Sean 7 o 14 segundos... en un ZX-81 es un milagro !!!

Y no digo que tu ZX-81 este acelerado, me refiero al juego.
Es más rápido que otras versiones que he visto.

Avatar de Usuario
ron
Mensajes: 18397
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1570 veces
Agradecimiento recibido: 1315 veces

Re: Manic Miner en ZX81

Mensajepor ron » 07 Mar 2013 16:35

Luego subo el .P y el -WAV para que quien tenga ganas. lo pruebe.

Reconozco que cuando lo lancé me sorprendí de verlo zumbando a toda leche, pero vamos, lo dicho, luego te lo pongo aquí y lo pruebas y sales de dudas.

dancresp
Mensajes: 5336
Registrado: 13 Nov 2010 02:08
Agradecido : 150 veces
Agradecimiento recibido: 287 veces

Re: Manic Miner en ZX81

Mensajepor dancresp » 07 Mar 2013 17:08

ron escribió:Luego subo el .P y el -WAV para que quien tenga ganas. lo pruebe.

Reconozco que cuando lo lancé me sorprendí de verlo zumbando a toda leche, pero vamos, lo dicho, luego te lo pongo aquí y lo pruebas y sales de dudas.

¿Pero tu ZX-81 tiene placa de alta resolución o funciona a pelo en cualquier ZX-81?

De todas formas, junto con el VIC-20 es de las máquinas que más me sorprenden de hasta donde pueden llegar a partir de sus supuestas prestaciones.

Avatar de Usuario
ron
Mensajes: 18397
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1570 veces
Agradecimiento recibido: 1315 veces

Re: Manic Miner en ZX81

Mensajepor ron » 07 Mar 2013 17:09

a pelo, puro y duro

dancresp
Mensajes: 5336
Registrado: 13 Nov 2010 02:08
Agradecido : 150 veces
Agradecimiento recibido: 287 veces

Re: Manic Miner en ZX81

Mensajepor dancresp » 07 Mar 2013 17:47

ron escribió:a pelo, puro y duro

Pues habrá que probarlo... -shock

Avatar de Usuario
ron
Mensajes: 18397
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1570 veces
Agradecimiento recibido: 1315 veces

Re: Manic Miner en ZX81

Mensajepor ron » 07 Mar 2013 18:40

Para Wally Dancresp y demás interesados en este MM. Incluye fichero .P y .WAV

MM_para_RW_ZX81.rar
(23.45 KiB) Descargado 138 veces

Avatar de Usuario
Luis
Mensajes: 1084
Registrado: 03 Nov 2010 19:00
Agradecido : 209 veces
Agradecimiento recibido: 113 veces

Re: Manic Miner en ZX81

Mensajepor Luis » 07 Mar 2013 21:07

Descargado! No lo he probado todavía, pero he escuchado el WAV y me parece curiosísima la forma en que hace una cabecera a velocidad normal y luego pilla "caña".

No conocía este método de ultra-cargas para ZX81, gracias!
West of House
You are standing in an open field west of a white house, with a boarded front door. There is a small mailbox here.

Avatar de Usuario
ron
Mensajes: 18397
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 1570 veces
Agradecimiento recibido: 1315 veces

Re: Manic Miner en ZX81

Mensajepor ron » 07 Mar 2013 21:21

ah ! un detalle, se ve con el fondo negro porque mi zx81 con el video invertido se ve por RF de copón ( tengo un interruptor para cambiarlo sobre la marcha ) !!! a vosotros si lo ejecutáis en un zx81 con 16K os saldrá en video inverso ! xD


Volver a “Sinclair ZX80/81”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado