Página 1 de 16

Core de Spectrum alternativo

Publicado: 04 Sep 2016, 11:20
por Kyp
Poco antes de que empezara el desarrollo del ZX-Uno me compré una placa de desarrollo de FPGAs, la Papilio Pro. Un poco por eso y por el respeto que me daba soldar los componentes SMD, al final no me apunté a las pruebas de los prototipos, así que, como quería aprender a usar las FPGAs, me puse a diseñar mi propio clon de Spectrum.

Para no enrollarme mucho, a base de un poco de estudio, y muchas pruebas y errores, este es el resultado: ZXpp

Son seis pasos:
01 - Vídeo VGA
02 - decodificando la pantalla
03 - Juntando las primeras piezas: CPU, ULA, ROM y RAM baja
04 - Añadiendo el resto: RAM alta, teclado, sonido y joystick
05 - Mejorando el sonido: chip AY
06 - Mejorando el teclado

· Implementa un Spectrum 48K.
· El core de la CPU es el TV80. Pensaba que era el mismo que usa el ZX-Uno pero lo he ido a comprobar y resulta que no, que el TV80 está basado en el T80 pero es diferente.
· La ULA es una implementación libre de la del Spectrum basada más en 'como tiene que interpretarse la memoria' más que en como funciona realmente la ULA del Spectrum. No hay contención de memoria y la salida de vídeo es VGA nativa a 640x480@60Hz. Para 'llenar' la pantalla hace un escalado x2 pero sólo de la zona de pixeles. Es decir, que la imagen generada es de 512x384 y el resto se rellena con el color de borde. Es un engendro un poco raro pero funciona en cualquier monitor VGA :lol:
· Toda la memoria, ROM y RAM, está implementada con la BRAM de la FPGA. La RAM baja es de doble puerto ya que el Z80 y la ULA funcionan cada uno a su ritmo (la CPU a 3.5 MHz y la ULA a 25,143 MHz).
· Para el teclado PS2 he adaptado éste módulo de Mike Field para la comunicación con el teclado, y he adaptado mi revisión del código para CPLD del interfaz Speckey para la interfaz con el Spectrum.
· También le he añadido un core de chip de sonido AY.
· Como uso toda la BRAM de la FPGA para la memoria del Spectrum no quedan recursos para nada más así que me he quedado a medio implementar el DivMMC. Al menos, mediante un sencillo adaptador, más que nada para no freír la FPGA si no se tiene cuidado, se puede cargar de cinta.

Ahora voy a coger todo esto y lo primero es hacer que funcione en el hardware del ZX-Uno. Luego le iré haciendo mejoras y, sobre todo ahora que dispongo de más RAM, lo primero es que funcione el DivMMC y luego ampliarlo a un 128K.

Re: Core de Spectrum alternativo

Publicado: 04 Sep 2016, 11:34
por jepalza
Al final ¿no conseguiste nada con la DRAM? lo de hacer que parezca SRAM. Yo lo intenté, miré en lo mas profundo de la red oscura, y nada. Y mis pruebas no sirvieron de nada. Me volví loco, y no conseguía "emular" SRAM dentro de una DRAM.
Es una limitación gorda en nuestras Papilios Pro. (que pena con haber logrado una Plus cuando salieron)

He pensado muchas veces quitar la DRAM y poner SRAM, pero es estropear la papilio, cuando ya tengo FPGA's con SRAM, como el ZXUNO, para jugar.

También me hice memorias SRAM externas para el Papilio, pero te quedas sin pines para poner luego la SD, la VGA, el teclado, el mando...

Re: Core de Spectrum alternativo

Publicado: 04 Sep 2016, 11:58
por Kyp
No, no pude hacer que funcionara. Por eso he decidido aprovechar la oportunidad de tener una placa de ZX-Uno y seguir el desarrollo sobre este hardware. Lo que más rabia me da es que se que la Mist tiene SDRAM y sus cores, incluido el del Spectrum, la usan sin problemas. El principal escollo es que usa módulos tipo los IPs de Xilinx pero al ser una FPGA diferente, no son compatibles y no acabo de entender como funciona. Como controlador usa una modificación del controlador simple de Mike Field, pero por lo que he visto le mete una señal de control extra para sincronizar no_se_como_ni_que los accesos y mi limitado conocimiento de VHDL no da para más :(

Lo de cambiar la SDRAM por una SRAM también lo pensé, pero tampoco quería estropear la papilio.

Re: Core de Spectrum alternativo

Publicado: 04 Sep 2016, 12:27
por azesmbog
Here is another alternative core Spectrum made on Xilinx XC6SLX9 & SRAM:
https://github.com/ILoveSpeccy/Aeon-Lit ... res/speccy
One problem - the author is not interested to support the project :(((

Re: Core de Spectrum alternativo

Publicado: 04 Sep 2016, 16:15
por Kyp
Very interesting. Thank you!

Re: Core de Spectrum alternativo

Publicado: 07 Sep 2016, 17:26
por Kyp
He subido a mi carpeta de DropBox la primer paso: ZXkyp01.zip

En vez de limitarme a portar tal cual el core del ZXpp, aprovecho para ir mejorándolo poco a poco. Este primer paso implementa una ULA PAL con timings exactos según el libro de la ULA de Chris Smith. Le he añadido un módulo de memoria para que se vea algo.

Para probarlo hace falta el cable de Xilinx pero no es necesario modificar el contenido de la flash así que se puede usar sin perder el firmware del :zxuno:

Re: Core de Spectrum alternativo

Publicado: 07 Sep 2016, 17:54
por antoniovillena
Kyp hay poca gente que tiene el cable de Xilinx. He subido una herramienta a la zona de descargas para pasar de bit a zx1 y a tap.
Así lo podrá probar todo el mundo.

Re: Core de Spectrum alternativo

Publicado: 07 Sep 2016, 18:39
por Kyp
Todavía no conozco todas esas herramientas para facilitar el trabajo :oops:

Lo he estado mirando y ya he subido un .zx1 y .tap con el core al dropbox. Lo he probado con el ZX-Uno reemplazando uno de los cores y funciona perfectamente :D

Como recordatorio... Hay que renombrar el archivo ZXkyp.zx1 como COREn.ZX1 donde 'n' es el core a reemplazar y copiarlo a la SD. Arrancar pulsando F2 para entrar en la BIOS, seleccionar 'Upgrade', seleccionar el nº de core a reemplazar, y luego seleccionar SD file. Cuando termine, reiniciar pulsando Caps Lock para seleccionar el core y ¡Listo!

Tened en cuenta si lo probáis que el core no hace nada más que sintetizar una ROM con la imagen y la ULA para generar la señal de vídeo, nada más. No hay un teclado que se pueda usar para resetear y volver al ZX-Uno. Hay que apagar y encender.

Re: Core de Spectrum alternativo

Publicado: 07 Sep 2016, 18:52
por carmeloco
He generado el .bit, y lo he cargado con impact. A mi me sale una pantalla en la que pone "Fairlight a prelude" y un pajarraco en una ventana, y como un castillo al fondo. :D

Re: Core de Spectrum alternativo

Publicado: 07 Sep 2016, 19:17
por Kyp
Eso es todo lo que hace por el momento :D