Sintetizando un Spectrum con el ZX-Uno

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor mcleod_ideafix » 16 Feb 2014, 14:50

jepalza escribió:Me sigue pareciendo raro que el BIT no se grabe en flash.

En la Papilio sí se graba pero porque, si mal no recuerdo, esa placa lleva un PIC que hace de bootloader, así que se puede grabar el archivo binario. El MCS no es más que una versión textual (lo puedes leer con el bloc de notas) del .BIT
Otra cosa es que la Spartan que lleve la Papilio sea una Spartan 3AN: esas Spartans tienen la ROM de configuración embebida en la propia FPGA, con lo que no te hace falta una SPI externa.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor antoniovillena » 16 Feb 2014, 14:53

Entonces es por el loader ese que usas. En realidad la FPGA no entiende de formatos, solo espera una cadena de 166K. O sea que lo mas probable es que el fpga loader envíe el contenido del .bit directamente al SPI Flash. Pero ya sabes, si trabajas con iMPACT las cosas son como te digo.

El iMPACT al ver tu .bit engordado se da cuenta que no tiene sentido y lo interpreta como corrupto. Pero el .mcs engordado sí que se lo traga. Como te he dicho antes lo de engordar el .bit en el iMPACT no sirve para nada porque esos bytes adicionales no van a ningún lado. Con el Papilio loader sí que podría funcionar eso de engordar el .bit, siempre que lo envíe todo tal cual a la SPI Flash sin hacer ningún chequeo de tamaño, pero vamos que no es seguro que funcione.

Por ahora las únicas 2 opciones que hemos comprobado que funcionan son engordar el .mcs con sret_cat (lo he probado yo y funciona en línea de comandos) o con la herramienta de iMPACT que te genera el propio .mcs (lo ha probado McLeod pero no va por línea de comandos, que yo sepa).

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor mcleod_ideafix » 16 Feb 2014, 15:01

¡Ah! Otra cosa: para todos los periféricos que sean "nuevos" en el ZX-Uno, el comité ZXI nos ha dado un rango de direcciones de E/S para usar. Son las siguientes:

ZXI escribió:Right, 0xFC3B and 0xFD3B assigned to ZX-UNO

I'll update the wiki shortly.

Guesser.


La idea es tener de esta forma acceso hasta 256 registros de E/S diferentes: en el puerto FC3B se escribe la dirección de registro, y en FD3B se lee o se escribe ese registro.

Por ejemplo, supongamos que decidimos que el registro 00h es para el SPI de la Flash. Escribimos 00h en el puerto FC3B para seleccionar que queremos usar el SPI de la Flash, y ahora, escribiendo o leyendo a FD3B escribimos datos por SPI o los leemos.
Aquí no estarían los registros SPI de la SD; ya que esos tienen sus propios puertos definidos según el estándar DIVMMC. Lo mismo con la paginación del DIVMMC.

Otro registro podría servir, por ejemplo, para indicar la velocidad de la CPU (3.5MHz o 7MHz)

Y así, hasta 256 registros diferentes :)
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor antoniovillena » 16 Feb 2014, 15:04

mcleod_ideafix escribió:
jepalza escribió:Me sigue pareciendo raro que el BIT no se grabe en flash.

En la Papilio sí se graba pero porque, si mal no recuerdo, esa placa lleva un PIC que hace de bootloader, así que se puede grabar el archivo binario. El MCS no es más que una versión textual (lo puedes leer con el bloc de notas) del .BIT
Otra cosa es que la Spartan que lleve la Papilio sea una Spartan 3AN: esas Spartans tienen la ROM de configuración embebida en la propia FPGA, con lo que no te hace falta una SPI externa.


No, el PIC lo lleva la OLS. Las Papilio llevan este chip:
http://www.ftdichip.com/Support/Documen ... T2232D.pdf

Que solamente vale para tener un puerto serie mediante USB. Los chips que llevan son xc3s250e (mismo que ZX-Uno) la One 250k, xc3s500e la One 500k y Spartan 6 LX9 la Pro que creo es la que tiene jepalza. Intuyo (esto no lo sé) que hay que tener siempre un pequeño bootloader ocupando espacio en la FPGA para que funcione este método de carga (Papilio Loader), pero es más cómodo porque no necesitas el cable JTAG.

Por esa razón en las Papilio necesitas el cable JTAG, para grabar el bootloader la primera vez. El resto de veces podrás cargar por USB (siempre que no te cargues el bootloader). En el caso de la OLS era el PIC el que escribía directamente sobre la SPI Flash, por tanto podías prescindir del cable JTAG.

-- Actualizado 16 Feb 2014, 15:11 --

mcleod_ideafix escribió:
ZXI escribió:Right, 0xFC3B and 0xFD3B assigned to ZX-UNO

I'll update the wiki shortly.

Guesser.


La idea es tener de esta forma acceso hasta 256 registros de E/S diferentes: en el puerto FC3B se escribe la dirección de registro, y en FD3B se lee o se escribe ese registro.

Por ejemplo, supongamos que decidimos que el registro 00h es para el SPI de la Flash. Escribimos 00h en el puerto FC3B para seleccionar que queremos usar el SPI de la Flash, y ahora, escribiendo o leyendo a FD3B escribimos datos por SPI o los leemos.
Aquí no estarían los registros SPI de la SD; ya que esos tienen sus propios puertos definidos según el estándar DIVMMC. Lo mismo con la paginación del DIVMMC.

Otro registro podría servir, por ejemplo, para indicar la velocidad de la CPU (3.5MHz o 7MHz)

Y así, hasta 256 registros diferentes :)


Genial. En un futuro planeo parchear tanto ResiDOS como ESXDOS para que funcione con el puerto SPI que queramos, aunque por ahora sólo estoy parcheando el +3e. Cuando esto pase podemos migrar a nuestro rango de puertos.

-- Actualizado 16 Feb 2014, 15:16 --

Vamos que sería lo mismo que la ULAplus pero con estos valores en lugar de BF3B y FF3B

jepalza

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor jepalza » 16 Feb 2014, 15:22

antoniovillena escribió: Spartan 6 LX9 la Pro que creo es la que tiene jepalza


Correcto, esa es. Tenía tan asumido que el BIT era lo único necesario, que tenía un pañuelo en los ojos. Si conduces toda la vida un coche de marchas automático, el día que pasas a uno manual, no sabes llevarlo. Eso me ha ocurrido a mi.

Ahora que los sé, estoy mirando de hacer el MCS en el Impact.

¿habéis probado, vosotros que tenéis un ISE moderno y grabador USB, el código del bootloader que he dejado en el anterior correo?
Lo mismo a vosotros si os lo deja colar a la SPI directamente, y podéis comprobar si funciona el envío de SPI a SRAM.

Mientras, sigo probando yo con el Impact de la versión 10.1 obsoleta que tengo.

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor antoniovillena » 16 Feb 2014, 15:29

jepalza escribió:¿habéis probado, vosotros que tenéis un ISE moderno y grabador USB, el código del bootloader que he dejado en el anterior correo?
Lo mismo a vosotros si os lo deja colar a la SPI directamente, y podéis comprobar si funciona el envío de SPI a SRAM.


No lo he probado pero he visto el código VHDL y hay puertos como rs232_data que no existen, creo que esto está pensado para la Papilio Pro. En el ZX-Uno no tenemos chip FT2232D.

jepalza

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor jepalza » 16 Feb 2014, 15:34

antoniovillena escribió:
jepalza escribió:¿habéis probado, vosotros que tenéis un ISE moderno y grabador USB, el código del bootloader que he dejado en el anterior correo?
Lo mismo a vosotros si os lo deja colar a la SPI directamente, y podéis comprobar si funciona el envío de SPI a SRAM.


No lo he probado pero he visto el código VHDL y hay puertos como rs232_data que no existen, creo que esto está pensado para la Papilio Pro. En el ZX-Uno no tenemos chip FT2232D.


Hazme caso, pruébalo. Que tenga puertos RS232 y estuviera preparado para el Papilio, no significa que no funcione. Ya está adaptado al ZXUNO, y compila bien. Y ya lo he probado, sube bien al ZXUNO y ejecuta, pero como no he podido meter una ROM seguido del BIT, no sé si funciona o no.
No esperes salida de vídeo, lo que he hecho es modificar la salida del RS232 para que en lugar de ir al puerto TX del Papilio, vaya al LED del ZXUNO, y este parpadee cada vez que recibe un dato, señal, de que se esta recibiendo info desde la SPI hacia la SRAM. Solo es una prueba.
Pero si esta prueba funciona, solo es llevar este código (borrando lo del RS232 y lo del reloj) al código de ejemplo TEST7 de mcleod_ideafix.

Por lo demas, ya he aprendido a crear archivos MCS, ahora, voy a probar el resto de cosas.

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor antoniovillena » 16 Feb 2014, 15:34

Escribiendo un .bat como este:

Código: Seleccionar todo

promgen -spi -p mcs -o tldmodvga.mcs -s 4096 -u 0 tldmodvga.bit
srec_cat tldmodvga.mcs -Intel 48.bin -binary -offset 0x40000 -o salida.mcs -Intel


Consigues transformar un archivo .bit llamado tldmodvga.bit en otro salida.mcs con el contenido de 48.bin incrustado en $40000.

-- Actualizado 16 Feb 2014, 15:40 --

jepalza escribió:
Hazme caso, pruébalo. Que tenga puertos RS232 y estuviera preparado para el Papilio, no significa que no funcione. Ya está adaptado al ZXUNO, y compila bien. Y ya lo he probado, sube bien al ZXUNO y ejecuta, pero como no he podido meter una ROM seguido del BIT, no sé si funciona o no.
No esperes salida de vídeo, lo que he hecho es modificar la salida del RS232 para que en lugar de ir al puerto TX del Papilio, vaya al LED del ZXUNO, y este parpadee cada vez que recibe un dato, señal, de que se esta recibiendo info desde la SPI hacia la SRAM. Solo es una prueba.
Pero si esta prueba funciona, solo es llevar este código (borrando lo del RS232 y lo del reloj) al código de ejemplo TEST7 de mcleod_ideafix.

Por lo demas, ya he aprendido a crear archivos MCS, ahora, voy a probar el resto de cosas.


Si quieres lo pruebo, pero no entiendo todavía lo que pretendes hacer. ¿instalar un bootloader adaptado del Papilio Pro al ZX-Uno?. Si es este el caso debes usar puertos alternativos al RS232. ¿en qué pines lo conectamos? Y tendré que instalarme un programa similar al Papilio Loader para cargar el .bit engordado, puesto que por el cable JTAG no va a funcionar (el iMPACT sólo funciona con el cable JTAG).

jepalza

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor jepalza » 16 Feb 2014, 16:08

antoniovillena escribió:Si quieres lo pruebo, pero no entiendo todavía lo que pretendes hacer. ¿instalar un bootloader adaptado del Papilio Pro al ZX-Uno?. Si es este el caso debes usar puertos alternativos al RS232. ¿en qué pines lo conectamos? Y tendré que instalarme un programa similar al Papilio Loader para cargar el .bit engordado, puesto que por el cable JTAG no va a funcionar (el iMPACT sólo funciona con el cable JTAG).


Ahora miro lo de crear archivos MCS. Estoy cerca.

Lo del RS232 está claro que no me entiendes. No tienes que hacer NADA DE NADA, solo compilarlo, y meter el BIT que te genera al ZXUNO, y al ejecutarse este, verás parpadear el LED cercano al JTAG, indicando que está vivo, que está recibiendo datos de la SPI y enviándolos a la SRAM. NADA MAS QUE ESO!!! simplemente.
Ya esta todo adaptado, que ponga "rs232" no significa nada, le podía haber llamado "ferrari" igualmente, pero he dejado el nombre que tenía en el Papilio, para no volverme loco reescribiendo todo. Nada tan simple como esto que te digo. Ese código, funciona tal y como está en el ZXUNO, pero claro, no se ve nada en pantalla, no recibe datos reales de la SPI por que no hay nada seguido del BIT, etc.
Si el ZXUNO no tiene ese hardware en concreto (el del módulo rs232 qu el papilio si lleva), no indica que no vaya a funcionar. Eso ya lo sabes, si le quitas un chip poco importante a un circuito, este sigue funcionando, lo mismo con el ZXUNO, no he querido quitar el código del RS232, pero como el ZXUNO no lo lleva, no hace nada, pero me sirve internamente para engañar al LED y hacer que reciba el el flujo de datos que deberían ir a un RS232 real.

Pero déjalo estar, por que no creo que tarde nada en tener yo un MCS adaptado y con una ROM detrás (tal y como me describes), y espero que me deje meter ese MCS dentro de la SPI, que lo dudo, por que el grabador de puerto paralelo que empleo es muy peleón, y se me resiste.

edito:nada, que el mierda impact 10.1 o el grabador por paralelo no me dejan grabar nada en la flash. Cuando no me dice "formato no reconocido", me dice que se ha grabado con éxito, pero luego miras la flas y está vacia, o no sé. A ver si resulta que la flash la tengo mal soldada. Mas bien pienso, que la conjunción de usar un ISEWEBPACK tan viejo (es del año 2002) y sumados a un grabador paralelo, que mas parece para-lelos, hacen que no vea la SPI mire por donde mire.
A ver si me llega el grabador USB mañana o pasado, y puedo por fín usar el ISE 14.3, y el portátil grande.

Sigo haciendo pruebas de todos modos.

Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 8 veces

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor antoniovillena » 16 Feb 2014, 16:31

En teoría la SPI Flash se graba vía JTAG, así que si te funciona cargar un .bit no hay motivo hardware que te impida cargar un .mcs. Vamos que por tu cable no es. Y tu versión de iMPACT es antigua pero tiene que haber alguna forma, estoy seguro.

En mi iMPACT tras cargar el .bit me pregunta que si quiero cargar el .mcs. En el tuyo puede que no te lo pregunte pero no importa, haciendo doble click encima de la FPGA (justo donde está ubicado FLASH en la imagen que te mando) te debería aparecer un diálogo para que metas el archivo .mcs.

En cualquier caso, sólo sabrás si lo has conseguido si llegas a algo como esto (le darías doble click a program y listo):

-- Actualizado 16 Feb 2014, 16:37 --

Tambien caben otras dos posibilidades: o que no esté la SPI Flash bien soldada (como dices) o que no estén a 3.3V los pines VS2..VS0. En el segundo caso sí podrías escribir en la Flash con el iMPACT pero luego no verías ejecutarse lo que le has metido.
Adjuntos
imagen.png
imagen.png (87.6 KiB) Visto 6263 veces


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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