Scroll por hardware

Si por algo se caracteriza el Spectrum es por su gran variedad de periféricos (clásicos y modernos)

Moderador: Sir Cilve Sinclair

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Scroll por hardware

Mensaje por antoniovillena » Sab Oct 29, 2011 6:09 pm

He escrito un post en los foros de WOS sobre la posibildad de añadir scroll por hardware (scroll horizontal en caso particular) usando ULAs de reemplazo (implementadas en FPGAs o CPLDs).

http://www.worldofspectrum.org/forums/s ... hp?t=36358

La idea es escribir un valor en el puerto 7f3b que está entre 0 y 7, y que será tomado en cuenta por la ULA para desplazar 7 píxeles la imagen. Son necesarios 24 bytes extra de atributos en caso de que se vea parte de la columna 32. Aquí he puesto un ejemplo en Basic para que probéis:

http://jbacteria.antoniovillena.es/48s?scrbasic.tap
http://jbacteria.antoniovillena.es/SEs?scrbasic.tap

Y aquí la demostración de lo que es posible hacer (juegos con scroll suave a 50fps y sin que el attribute clash sea un problema al desplazar el fondo).

http://jbacteria.antoniovillena.es/128?hwscdemo.tap
Imagen

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Scroll por hardware

Mensaje por mcleod_ideafix » Dom Oct 30, 2011 1:47 am

Wow! Alucinante!

Incluso diría que igual no hacen falta los 24 bytes de atributos, ya que para que no se vea "el truco", precisamente la columna 31 se suele ennegrecer para que no se vea cómo se va pintando la nueva columna 31. De hecho, me pregunto... si se desplazan bitmap y atributos, ¿cómo podría hacerse para que no se viera cómo aparece de golpe la columna 31?
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Scroll por hardware

Mensaje por antoniovillena » Dom Oct 30, 2011 2:18 am

mcleod_ideafix escribió:Wow! Alucinante!

Incluso diría que igual no hacen falta los 24 bytes de atributos, ya que para que no se vea "el truco", precisamente la columna 31 se suele ennegrecer para que no se vea cómo se va pintando la nueva columna 31. De hecho, me pregunto... si se desplazan bitmap y atributos, ¿cómo podría hacerse para que no se viera cómo aparece de golpe la columna 31?


En realidad el problema no es que esté mal diseñado el hardware del scroll, sino que no me he currado lo suficiente la demo y por tanto se ve esa basura a la derecha. Los 24 bytes de atributos son necesarios porque al usar scroll se ven 33 columnas de atributos, las 31 de en medio completamente y la primera y la última parcialmente. Es posible simplificarlo y usar en la última columna los atributos de la primera, pero entonces no se vería correctamente, ni siquiera poniéndolas en negro, ya que las 31 columnas centrales estarían "bailando" todo el rato.

Échale un vistazo a la demo en Basic para ver exáctamente cómo funciona, es sencillo pero contraintuitivo. La gracia está en que desplazamos toda la rejilla de atributos y por lo tanto no tenemos el problema de que tiles adjacentes entremezclen sus colores. He dejado espacio (entre 5b00 y 5b1f) para un futuro scroll vertical usando el mismo principio. Y en caso de mostrar ambos a la vez, es necesario también el byte de atributo 5b38.

Desgraciadamente los 50fps solo son posibles con shadow screen (modelos 128K en adelante) ya que el desplazamiento se puede repartir en 8 frames. En 48K habría un retardo ya que no da tiempo a desplazar toda la pantalla en un frame. Aunque tal vez haciendo un skip frame (saltando 2 pixeles en lugar de 1) no se note.
Imagen

Avatar de Usuario
climacus
Sabreman
Mensajes: 411
Registrado: Mar Ago 25, 2009 1:46 pm

Re: Scroll por hardware

Mensaje por climacus » Dom Oct 30, 2011 8:57 am

Coño!!!! (Elegí un mal día para dejar de decir tacos).
Muy bueno. Precisamente ahora que voy a empezar a romperme la cabeza con los scrolles
Todos mis juegos en formato físico
http://www.matranet.net/boutique/zx/zx.php

curioso1100
Herbert
Mensajes: 60
Registrado: Mar May 08, 2007 8:41 am

Re: Scroll por hardware

Mensaje por curioso1100 » Dom Oct 30, 2011 9:16 am

No sólo es impresionante a nivel técnico, si no que tras leer al completo el hilo del foro de WOS, diría que a pesar de que ya conocemos la "personalidad" de algunos de los que por ahí escriben, has lidiado francamente bien con sus "bonitos consejos y apoyos".

Mi opinión -por si a alguien le importa, claro- es que si quieres y además puedes hacerlo como ya has demostrado, pues ¡adelante!... y si alguien de WOS -o de donde sea- tiene que rasgase las vestiduras no te preocupes, ya se las coserá de nuevo :)

Una estupenda idea y un estupendo resultado.

Ánimo, y un saludo.

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Scroll por hardware

Mensaje por mcleod_ideafix » Dom Oct 30, 2011 11:14 am

curioso1100 escribió:...ya conocemos la "personalidad" de algunos de los que por ahí escriben, has lidiado francamente bien con sus "bonitos consejos y apoyos"
.... y si alguien de WOS -o de donde sea- tiene que rasgase las vestiduras no te preocupes, ya se las coserá de nuevo :)


De acuerdo al 100% . Chris es un tío muy majo, pero aparte de él hay algún que otro talibán del llamado "espíritu del Spectrum". Aunque el concepto de la ULA+ no es malo y es verdad que permite a un usuario final "recolorear" un juego, el verdadero potencial se exprime si haces un juego que desde el principio use esas nuevas paletas. Es decir, si hay nuevo software. Y puestos a hacer nuevo software, ¿por qué no soportar algún nuevo aditamento como pudiera ser una ULA con scroll por hardware? Ahora mismo, como cacharro, ni existe la ULA+ "oficial" ni la ULA con scroll hardware, así que soportar una u otra depende exclusivamente del soporte que haya de ella en los emuladores y de quien o quiénes sean los "sponsors" del aparatito.

Además... sigo pensando que con el diseño que han escogido para las funciones de esa nueva ULA+ y sobre todo, el cómo han escogido los puertos... mira, pues no lo entiendo. No sé cómo pretenden diseñar un recambio de quita y pon para la ULA que soporte esas nuevas características.

Para empezar, la ULA+, al contrario de lo que se ha dicho en WOS, es algo que en su día hubiera supuesto un incremento considerable en el precio, ya que la cantidad de memoria interna que necesitan las paletas excede en muy mucho la capacidad de las celdas de la ULA de Ferranti, por lo que Sinclair, de haber querido este añadido, tendría que haberse ido a un full-custom o un ASIC más caro de producir.

Hoy eso no es problema con la lógica programable, pero es que resulta que la solución más barata y directa son las CPLD, porque son tolerantes a 5V sin necesidad de ningún driver enmedio, y porque guardan su configuración ellas solas sin necesidad de EEPROM externa. Pues bien, a las CPLD's les pasa como a las ULA's de Ferranti: que tienen poca capacidad de memoria, así que no puedes usarlas para implementar una ULA+ si no es con componentes externos (RAM estática). Si metes componentes externos estás aumentando el área de la placa, su consumo, y todo ello redunda en el precio final que tendría el recambio, de producirse comercialmente.

La otra forma de hacer una ULA+ es con una FPGA. En este caso no se necesita RAM externa porque las FPGA's llevan internamente memoria más que suficiente (la más pequeña que tengo tiene 16K, así que es que puedes meterle otro frame-buffer dentro. El problema de las FPGA's es que no son tolerantes a 5V, así que se necesitan drivers externos para acomodar las tensiones y no dañar a la FPGA.

En cualquiera de los dos casos, CPLD+RAM, o FPGA, hay espacio suficiente para implementar tu característica (en mi estimación inicial, la cosa consiste en añadir un registro, algo de lógica de decodificación, y dos sumadores a los contadores X,Y de la ULA de forma que esos contadores sumen un valor de 0 a 7, que es el que se ha guardado antes). Esto es mucho menos de lo que habrá que añadirse para implementar la ULA+ oficial.

Y aunque lo digo en último lugar, vaya por delante que tu demo del scroll "a la Mario" me ha parecido más espectacular que las capturas de pantalla mostrando los nuevos colores de la ULA+. Scroll lateral es algo que hemos visto en los juegos antes, así que tu mejora simplemente alivia la carga del programa a la hora de hacer esta operación, lo que redundaría en un juego más ágil, pero el resultado seguiría siendo 100% Spectrum. La ULA+ te da más colores, algo que no tiene el Spectrum original, por lo que si uno ve un juego "ULA+ enhanced" no tendría la misma sensación de estar viendo un juego de Spectrum... echarías en falta los colores "chillones" de la ULA original.

Es más: gracias a que tú has escrito un emulador, y que para colmo dicho emulador puede ejecutarse en una página web, has podido demostrar con código y resultados lo que sería programar con esta nueva ULA tuya. Y eso estoy seguro que ha hecho que algunos WOSers se hayan quitado la venda de los ojos y hayan pensado que... hobmre.... igual esta idea no es tan mala después de todo. Me apuesto lo que sea a que Chris Smith se lo está pensando :)
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Scroll por hardware

Mensaje por antoniovillena » Dom Oct 30, 2011 11:51 am

Climacus no hace falta que te rompas la cabeza, es algo experimental. Para que llegue a verse en un spectrum real debe implementarse antes en una CPLD.

Curioso, a ver no me importa que no le vean futuro al scroll hw porque es cierto que es algo experimental. Lo que me mosquea es que pongan entre laureles al ULA+ cuando, como dice mc_leod, es más complicado de llevar acabo. Además, para sacarle el máximo potencial (64 colores en pantalla) se necesitan juegos diseñados para tal fin, porque en los juegos del spectrum raramente se usaba el flash.

Mc_leod, de acuerdo en todo. En cuanto a ULA+ es cierto que podían haber hecho algo más sencillito, con una paleta de 15 colores que sólo tuviese un modo. Esto es, al hacer reset los 15 registros toman los colores del zx como valores por defecto, que puedes sobreescribir en cualquier momento sin necesidad de activar nada.

Lo que no entiendo es porqué necesito CPLD+RAM para implementar el scroll hardware. Uso la RAM del spectrum (5b00-5b38), no hay necesidad de usar ninguna memoria interna.

Edito: No sé si les ha gustado la demo o no, por ahora están "callaos como putas" como suele decirse por aquí :)
Última edición por antoniovillena el Dom Oct 30, 2011 12:09 pm, editado 2 veces en total.
Imagen

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Scroll por hardware

Mensaje por mcleod_ideafix » Dom Oct 30, 2011 11:58 am

antoniovillena escribió:Lo que no entiendo es porqué necesito CPLD+RAM para implementar el scroll hardware. Uso la RAM del spectrum (5b00-5b38), no hay necesidad de usar ninguna memoria interna.


No, tú no, es la ULA+ oficial la que de hacerse con una CPLD, necesitaría RAM adicional. Quiero decir, que si alguna vez se llegar a hacer una ULA+ oficial usando alguna de las dos vías (FPGA o CPLD+RAM), en esa nueva ULA+ estoy seguro de que cabría tu añadido sin problemas.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Scroll por hardware

Mensaje por antoniovillena » Dom Oct 30, 2011 12:08 pm

mcleod_ideafix escribió:No, tú no, es la ULA+ oficial la que de hacerse con una CPLD, necesitaría RAM adicional. Quiero decir, que si alguna vez se llegar a hacer una ULA+ oficial usando alguna de las dos vías (FPGA o CPLD+RAM), en esa nueva ULA+ estoy seguro de que cabría tu añadido sin problemas.


Ya lo entendí. Lo interesante sería tenerlo en ambas opciones:
1. CPLD con scroll hardware.
2. CPLD+RAM ó FPGA con scroll hardware y paleta de colores configurable.

Seguramente haya gente que sólo quiera arreglar su ULA estropeada de la forma más sencilla posible, y si además puede disponer de scroll hardware pues mejor que mejor.
Imagen

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Scroll por hardware

Mensaje por radastan » Dom Oct 30, 2011 3:53 pm

Yo lo que tengo muy claro es que la ULA+ está aún muy lejos de materializarse. Sobre el papel, y en emulación, todo es muy bonito, pero no ha pasado de ser algo precioso que los Spectrum reales siguen sin tener. No me desagradan este tipo de experimentos, pero es una pena que tanto esfuerzo no pase de un emulador y perdamos ese esfuerzo en otros proyectos más interesantes y reales.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Scroll por hardware

Mensaje por mcleod_ideafix » Dom Oct 30, 2011 4:37 pm

radastan escribió:Yo lo que tengo muy claro es que la ULA+ está aún muy lejos de materializarse. Sobre el papel, y en emulación, todo es muy bonito, pero no ha pasado de ser algo precioso que los Spectrum reales siguen sin tener.


En parte es porque, primero, no hay mucha gente que domine todos los campos que es necesario dominar para llevar a cabo el tema, y aquí el principal personaje es Chris Smith. Por otra parte, el creador del ZX Badaloc, creo que es, tiene ya terminado su clon de Spectrum en FPGA con ULA+ y todo. Lo malo es que, como el italiano no suelta ni una línea del código fuente, sólo el fichero final que va a la FPGA, resulta que o tienes exactamente el mismo entrenador FPGA que usa él, o no puedes probar su diseño.

Segundo, y esto es lo que no entiendo por qué se hace así, es que las especificaciones de la ULA+ no permiten que dicha ULA+ exista comom reemplazo directo de la ULA de un 48K o un 128K/+2 gris ya que para decodificar los nuevos puertos hacen falta líneas de dirección que no están disponibles en las señales de la ULA original. Esto hace que en la práctica no pueda existir un reemplazo directo, y cualquier sustitución de una ULA vieja por nueva requiera soldar cablecitos desde la nueva ULA a la placa del Spectrum.
Un inciso: la única solución viable (y cómoda para el usuario final) es lo que en su día propuso Winston: que la ULA+ fuera no un reemplazo interno, sino externo. Es decir, ni más ni menos que una ULA externa, con su propia memoria de video y su propio reloj. No podría funcionar en un Spectrum con la ULA "buena" sino que tendría que funcionar en un Spectrum con el zócalo de la ULA vacío. Un reemplazo externo daría además la posibilidad de producir una señal VGA, entre otras lindezas.
Hace algunos años propuse una forma de acceder a las nuevas características de la ULA+ de forma diferente a la que se ha hecho y que sería compatible con un reemplazo interno. Lo que yo propuse en su día era hacer lo mismo que hizo Amstrad en el ASIC del CPC464+, es decir, sería arrancar el Spectrum con la ULA "normal", y sólo activar las nuevas características usando una secuencia concreta de escrituras al puerto $FE. Una vez "desbloqueada" la ULA+, podrían usarse nuevos puertos decodificando A15, A14 y A0. Ni que decir tiene que pasaron del tema.

Tercero: lo que ya se ha discutido antes. Las prestaciones de la nueva ULA+ requieren una cantidad de memoria que excede la disponible en los registros de una CPLD, así que hay que irse a una FPGA o a un combinado CPLD+memoria RAM externa. Lo primero es muy cómodo, pero dificulta el diseño y la producción, que no podría ser en plan artesanal como se hace con este tipo de proyectos. Lo segundo es compatible con la producción a pequeña escala por uno mismo, pero requiere más componentes y sería problemático, en caso de intentar un reemplazo interno, que la nueva ULA cupiese en el espacio dejado en la placa por la otra.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Scroll por hardware

Mensaje por antoniovillena » Dom Oct 30, 2011 5:46 pm

mcleod_ideafix escribió:En parte es porque, primero, no hay mucha gente que domine todos los campos que es necesario dominar para llevar a cabo el tema, y aquí el principal personaje es Chris Smith. Por otra parte, el creador del ZX Badaloc, creo que es, tiene ya terminado su clon de Spectrum en FPGA con ULA+ y todo. Lo malo es que, como el italiano no suelta ni una línea del código fuente, sólo el fichero final que va a la FPGA, resulta que o tienes exactamente el mismo entrenador FPGA que usa él, o no puedes probar su diseño.


Aquí no hay nada que hacer. Desgraciadamente todavía hay gente muy reacia a publicar el código fuente, aunque estemos hablando de máquinas antiguas sin ningún aliciente comercial. Pero vamos, que con los esquemas de Harlequin de Chris o comprando su libro es posible implementarlo desde cero (no digo que sea fácil).

mcleod_ideafix escribió:Segundo, y esto es lo que no entiendo por qué se hace así, es que las especificaciones de la ULA+ no permiten que dicha ULA+ exista comom reemplazo directo de la ULA de un 48K o un 128K/+2 gris ya que para decodificar los nuevos puertos hacen falta líneas de dirección que no están disponibles en las señales de la ULA original. Esto hace que en la práctica no pueda existir un reemplazo directo, y cualquier sustitución de una ULA vieja por nueva requiera soldar cablecitos desde la nueva ULA a la placa del Spectrum.


Pues no había caído en eso. Acabo de ver los esquemáticos y es cierto. En 48K solo están disponibles las líneas A0..A6, A14 y A15, aunque en el gatearray de modelos 128K están disponibles todas vía zócalo. Tampoco veo ningún impedimento aquí, yo ahora que lo sé cambiaré el puerto de acceso al scroll hardware.
Antes era: 7f3b-> 0111 1111 0011 1011
Ahora es: 7fbb-> 0111 1111 1011 1011

El cambio consiste en poner a 1 las líneas no disponibles en la ULA para minimizar los problemas con otros periféricos.

mcleod_ideafix escribió:Tercero: lo que ya se ha discutido antes. Las prestaciones de la nueva ULA+ requieren una cantidad de memoria que excede la disponible en los registros de una CPLD, así que hay que irse a una FPGA o a un combinado CPLD+memoria RAM externa. Lo primero es muy cómodo, pero dificulta el diseño y la producción, que no podría ser en plan artesanal como se hace con este tipo de proyectos. Lo segundo es compatible con la producción a pequeña escala por uno mismo, pero requiere más componentes y sería problemático, en caso de intentar un reemplazo interno, que la nueva ULA cupiese en el espacio dejado en la placa por la otra.


Obviamente lo más práctico es usar un CPLD a secas. Para ello es posible una ULA+ alternativa. No sé si limitando la paleta a 16 colores podría conseguirse. La gran pega que le veo al ULA+ es que te limita mucho el elegir 8 colores de fondo y 8 de tinta para un mismo CLUT. Yo propondría algo que ya se hizo en el modo texto 3h (80x25) de la VGA. Sustituir el blink por un color independiente para el fondo (en realidad el bright solo afectaba a la tinta).

A ver si me explico, tener un flag llamado BLINK o algo así, que si está a 1 tendríamos el comportamiento normal del spectrum (si el FLASH está a uno se intercambian tinta y fondo cada x frames) y si está a 0 tendríamos que el BRIGHT antiguo sólo afecta a la tinta y el FLASH antiguo ahora será el brillo del fondo. Vamos que puedes elegir entre los 16 colores de la paleta tanto para tinta y para fondo independientemente. Digo 16 colores porque por paleta se puede aprovechar el color 8, pero esto mismo también se puede hacer sin necesidad de usar paleta, con los colores originales y, por tanto, posible al 100% en CPLD.

En resumen, yo creo que si se ponen de acuerdo los gurús de las CPLD (contándote a tí por supuesto), podrían llevarse a la realidad muchas de estas cosas usando CPLD como reemplazo de la ULA.
Imagen

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Scroll por hardware

Mensaje por mcleod_ideafix » Dom Oct 30, 2011 7:22 pm

antoniovillena escribió:...Pero vamos, que con los esquemas de Harlequin de Chris o comprando su libro es posible implementarlo desde cero (no digo que sea fácil)...
...En resumen, yo creo que si se ponen de acuerdo los gurús de las CPLD (contándote a tí por supuesto), podrían llevarse a la realidad muchas de estas cosas usando CPLD como reemplazo de la ULA.


Haber, lo que se dice haber, ya hay hecha una ULA descrita en Verilog. Lo comenté hace un tiempo aquí mismo:
viewtopic.php?f=8&t=2311

Lo que pasa es que tengo que pulir el diseño ya que había cosas en el libro de Chris que no me quedaban del todo claras. Después de un tiempo, y sobre todo después de haber implementado un Jupiter ACE y alguna cosilla más en FPGA, me he hecho una mejor idea de cómo se temporiza la ULA. No he publicado código porque la cosa está lejos aún de ser definitiva. Es más, el mismo Chris Smith me escribió para pedirme el código Verilog de la ULA y le dije eso mismo, que la ULA que había hecho aún estaba lejos de respetar los timmings documentados en su libro, ya que era poco menos que una prueba de concepto, y además la salida que implementé es VGA, no TV, por lo que los patrones de contención son muy diferentes.

Cuando vuelva a tener tiempo y termine su descripción, añadiré lo necesario para que además disponga de scroll hardware de la forma en que tú has descrito, ULA+ "oficial" (en la FPGA no hay problema por coger señales del bus de dirección) y también querría añadirle posibilidad de una "raster interrupt" como tiene el SAM.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Scroll por hardware

Mensaje por mcleod_ideafix » Dom Oct 30, 2011 8:14 pm

antoniovillena escribió:Pues no había caído en eso. Acabo de ver los esquemáticos y es cierto. En 48K solo están disponibles las líneas A0..A6, A14 y A15

Ojo con eso. Las líneas A0-A6 sólo están disponibles tras el multiplexor, y ahí están compartidas con el bus de direcciones de la VRAM. ¿Qué pasaría si accedes a uno de tus nuevos puertos mientras la ULA está enviando por esas mismas líneas (en la ULA original son de salida) una dirección de VRAM mientras se lee la pantalla? Pues que para que no haya problemas de pantalla, todos tus accesos a puertos generarán contienda.
Este es un problema que también existe en la ULA+ y no sé de hecho si existe un patrón de contienda documentado para esta nueva funcionalidad.

antoniovillena escribió:...aunque en el gatearray de modelos 128K están disponibles todas vía zócalo.

En cuál gatearray? En el de 48 pines del 128K/+2 gris? No, ahí están las mismas que en la ULA original, y en el del +2A/+3 sí que están pero... de zócalo nada de nada. Es de hecho la única ULA que tiene todas las señales que necesita la implementación actual de la ULA+, y es también la única ULA para la cual, seguramente, jamás haya un reemplazo interno directo, y que sea fácil de instalar.

antoniovillena escribió:Obviamente lo más práctico es usar un CPLD a secas. Para ello es posible una ULA+ alternativa. No sé si limitando la paleta a 16 colores podría conseguirse.

La CPLD más grande que conozco es la XC95288XL, que dispone de 288 bits de memoria (biestables). Haciendo un poco de memoria... la ULA original usa dos contadores de 10 bits cada uno. Eso hacen 20 biestables. Hay una máquina de estados que usa al menos 4 biestables (aunque quizás puedan derivarse de los 4 bits menos significativos del contador de pixeles). Luego tienes un registro de 3 bits para almacenar el valor del borde. Otros dos para MIC y EAR. Un latch que almacena 8 píxeles y otro que almacena el atributo actual. Otro par de latches que almacenan los siguientes 8 píxeles y el siguiente atributo; estos hacen en total 32 biestables.
Sumándolo todo, tienes una ocupación mínima de 20+4+3+2+32=61 biestables. Pero es que en una CPLD, si una macrocelda se usa para contener parte de un circuito combinacional, el biestable asociado a esa macrocelda se pierde (se bypassea), así que el número disponible de biestables es menor de 288. Incluso suponiendo que no fuera así, el número de biestables que tendríamos disponibles para hacer CLUT's sería de 288-61=227, o unos 28 bytes, así que sí, en teoría, una paleta de 16 colores sí cabría en una CPLD, pero hasta que no se escriba y se sintetice la descripción, no se sabrá.

De hecho, es lo mismo que cuenta el propio Chris Smith en la FAQ de la ULA+:
Chris Smith escribió:Could Sinclair have done this back in the day?
Yes, but more than one ULA would have been required and it would have been much more complicated and therefore expensive. It would take "...gazillions of gates and flip-flops. 64 * 8 Flip-Flop/latches for the palette storage = 512, plus a 640 2-input-nor gates for the multiplexing (4*16*8 + 16*8 ). That would take 832 matrix cells of the ULA, plus the other necessary circuitry. The 5C000 ULA had 440 matrix cells in total, so you'd need at least two ULAs of that size. This is so impractical that external memory would have been required for the palette. Propagation delay will have been the major issue, leading to other colour effects similar to the two-levels-of-intensity effect and the edge-artifact with flashing cells. As devices are much larger and efficient these days, it is likely to fit into a reasonably cheap CPLD. Worse case, a small amount of external memory may be required, or FPGA is used instead, as this will have the internal memory required. The design has been proven, but not synthesized, so I don't know how big a CPLD/FPGA is required."
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
flopping
Nonamed
Mensajes: 1093
Registrado: Vie Jul 16, 2010 9:54 am

Re: Scroll por hardware

Mensaje por flopping » Dom Oct 30, 2011 9:27 pm

Yo lo que no entiendo es si ya hay emuladores de Spectrum con ULA+ y hay documentacion sobre ello, ¿como es que no se ha implementado ya en una FPGA o CPLD?, que yo sepa ya se ha conseguido meter una ULA normal, incluso todo un Spectrum, vale Mcleod, quiza no se perfecto en timings y demas, pero se ha podido meter, asi que no entiendo como hay tanto listo en los foros y nadie ha podido implementar esa ULA+, vale quiza el ZXBADALOC tenga algo realizado, pero si no es portable no sirve para gran cosa, asi que supongo que no debe de ser tan facil de implementar como una ULA normal, y mas si partimos de la base de que no es un reemplazo directo de una ULA, en mi opinion creo que eso es un error, si se hace externa, seria otra cosa, pero eso de tener que quitar la ULA interna en un 16/48 ó 128K vale, esta en zocalo, pero ¿y en el resto de spectrums?.
Y ya que estamos metidos en harina ¿hay juegos de ULA+ y que emulador la implementa?, yo solo conozco el juego de los mojons twins, el ST.Helmet que creo que implemnta ULA+, bueno creo que hay algun otro mas, pero no conozco mucho mas, ¿alguien sabe donde encontrar mas juegos de ULA+?
Espero que nadie se mosquee por mis palabras, ya que mi intencion no es ofender, y esto no lo digo por la gente de españa, que muchas veces ayudamos mas que otros, simplemente comento que mucha gente dice cosas y quiza no sabe realmente si son factibles o no, yo de programacion no puedo ayudar mucho, pero no digo que esto o lo otro es posible si no se implementarlo, no se si me explico, pero bueno la idea es que me gustaria ver esa ULA+ implementada en cualquier chip programable y no solo como un proyecto de emulacion, ya que por medio de la emulacion se pueden implementar muchas cosas, lo bueno es tenerlo materialmente, yo no soy un purista del spectrum, me da igual el medio que se utilice, bien es verdad que con esa ULA+ el spectrum perderia parte de su encanto, pero tambien ganariamos en otros aspectos, por lo que bajo mi humilde punto de vista, apoyo la decision de implementar esa ULA+ como sea, es posible que tardemos mucho en poder verla, pero yo creo que al final alguien se pondra en serio con ello y lo veremos, igual que cris smith descifro el contenido de la ULA, se puso hasta que lo consiguio, eso si que es tener valor y decision.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, debido a la esquizofrenia paranoide que tengo.
(C) 1982-2016, 34 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente"

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 11 invitados