ZX-Uno prototipo 2: seguimos dándole caña

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
Quest
Atari 1040 STf
Atari 1040 STf
Mensajes: 900
Registrado: 18 Jul 2013, 22:20
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo SNES
Primera consola: Nintendo NES/Clónica
Gracias dadas: 9 veces
Gracias recibidas: 16 veces

Re: ZX-Uno prototipo 2: seguimos dándole caña

Mensajepor Quest » 14 Jun 2015, 21:52

mcleod_ideafix escribió:
Quest escribió:Sólo falta que al arrancar el ZX-UNO se envíe automáticamente al puerto PS/2 un comando cualquiera, por ejemplo el de reset. Imagino que se podrá hacer desde la propia BIOS que muestra la pantalla del logo.

Si, esa es otra de las cosas que Antonio tendrá que poner en la BIOS (si quiere, claro, que pa eso es su criaturita). Ojalá el ESXDOS tuviera algún modo de autoejecutar un fichero cuando se arranca, pero si lo tiene, no sé cómo se hace. Sé que carga unos .SYS al principio pero no sé si puedo añadir mis propios SYS con las cosas que quiero. Si eso es así, tenemos una forma de personalizar el sistema en el arranque sin necesidad de hacer cambios a la BIOS. Investigaré el asunto.


Sí, evidentemente es cosa de Antonio, faltaría más, que decida lo que crea conveniente poner :) Lo expuesto aquí en sucesivas ocasiones (por mi parte al menos) son sólo ideas, nada más.

No obstante, el caso del teclado es imperativo que se inicialice antes que cualquier cosa (no valdría al arrancar ESXDOS), ya que en caso de tener uno conflictivo, no se podría usar para entrar a la BIOS a configurar nada ni a cambiar de ROM puesto que aún no estaría "inicializado".

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: ZX-Uno prototipo 2: seguimos dándole caña

Mensajepor mcleod_ideafix » 14 Jun 2015, 21:55

Quest escribió:No obstante, el caso del teclado es imperativo que se inicialice antes que cualquier cosa (no valdría al arrancar ESXDOS), ya que en caso de tener uno conflictivo, no se podría usar para entrar a la BIOS a configurar nada ni a cambiar de ROM puesto que aún no estaría "inicializado".

Igual puedo ponerlo en la miniROM que se ejecuta antes que la BIOS.... Luego si tengo tiempo lo pruebo y si funciona, actualizo el repositorio con el nuevo core, que tendría por supuesto una fecha de revisión posterior ;)

-- Actualizado 15 Jun 2015, 02:33 --

mcleod_ideafix escribió:
Quest escribió:No obstante, el caso del teclado es imperativo que se inicialice antes que cualquier cosa (no valdría al arrancar ESXDOS), ya que en caso de tener uno conflictivo, no se podría usar para entrar a la BIOS a configurar nada ni a cambiar de ROM puesto que aún no estaría "inicializado".

Igual puedo ponerlo en la miniROM que se ejecuta antes que la BIOS.... Luego si tengo tiempo lo pruebo y si funciona, actualizo el repositorio con el nuevo core, que tendría por supuesto una fecha de revisión posterior ;)

Nada, que no hay manera. En cuanto toco la BIOS o la miniROM, el aparato no arranca ni a la de tres. No sé qué dependencias hay en una y en otra, porque el estilo de programación de Antonio es un tanto críptico para mi.

A nivel hardware, lo que he hecho es crear un nuevo registro que he llamado SCRATCH. Se usa sencillamente como un almacén para un valor de 8 bits. El hardware lo único que hace es asegurarte que si el equipo se enciende tras haber estado apagado, ese registro valdrá 0, pero el software puede darle después cualquier valor. En la wiki técnica están los detalles.

La idea es que la BIOS lea ese registro. Si vale 0, sabe que ha sido arrancada "en frío", y así puede hacer cosas que sólo tenga sentido hacer la primera vez, como por ejemplo resetear el teclado. Ahora mismo se emplea un truco basado en ver si está pulsada la tecla BACKSPACE cuando se empieza a ejecutar la BIOS. De esa forma se sabe si la BIOS ha sido invocada desde una pulsación del teclado o por un arranque en frío, pero con este registro se puede abandonar ese truco. En la BIOS actual se distingue entre la primera vez de otras veces para hacer que el mensaje de "Pulse F2 para bla bla bla..." se quede más tiempo en pantalla.

PD: lo que son las cosas del autoroute de Xilinx... antes de poner este registro scratch, la ocupación de la FPGA rondaba el 61% de los slices. DESPUES de añadir este registro, la ocupación es del... 54% !!!! De alguna forma, añadir esta lógica extra ha hecho que el enrutador haya tenido que buscar otros caminos para rutar el circuito que han hecho que se optimicen mejor los slices existentes. Misterios de Xilinx, supongo... porque es que aunque alguno no se lo crea, aún estoy aprendiendo de esto de las FPGA... y lo que me queda :O
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: ZX-Uno prototipo 2: seguimos dándole caña

Mensajepor antoniovillena » 15 Jun 2015, 20:18

César me comenta que su emulador ZEsarUX ya tiene soporte ZX-Uno así que le echaré una ojeada y si lo veo viable me pondré a desarrollar con él. Lo primero que tengo pendiente es comprobar que la Flash se graba correctamente y regrabar en caso contrario.

-- Actualizado 15 Jun 2015, 19:57 --

He probado el emulador y funciona perfectamente. El emulador no funciona nativamente en Windows, yo lo he probado en Virtual Box. Y Hark0 lo ha hecho funcionar con Cygwin.

Avatar de Usuario
celestinox
Commodore 128
Commodore 128
Mensajes: 97
Registrado: 07 Dic 2012, 17:04
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
Primera consola: Sony PlayStation 2
Gracias recibidas: 9 veces

Re: ZX-Uno prototipo 2: seguimos dándole caña

Mensajepor celestinox » 16 Jun 2015, 20:25

Hola.
Estoy montando el engendro v2 (las placas que hice de la v1) Spartan3.

He cometido un par de errores en el esquemático, que al final se han reflejado en el PCB, por supuesto.
Uno es que el fix para que grabe la SPI flah, lo he hecho al revés, llevé los pines 67,68 y 70 a masa en lugar de a 3.3 V; con cortar una pista, levantar 1 pin de la FPGA y soldar un cable se arregla. Ya daré detalles cuando termine. El otro error es que he mantenido el mismo error del pin XA8 que en el engendrov1 lo dejé en el pin 74, en lugar del 143. Hasta el test12 no hay problema por cambiar las descripción de pines y "recompilar"; pero desde el test13, test14 y test15, no me deja recompilar; me da un error :

ERROR: The iMPACT project file "C:/Repositorio McLeod/cores/spectrum_v1_spartan3/test14/impact_project.ipf" does not exist.

Ciertamente el fichero no existe. ¿como lo creo?

Tal y como me sugerió AntonioVillena en su día, he usado en el test13 en generamcs_v1.bat, adaptando el promgen.bat a la versión de mi ISE; con esto he conseguido crear el mcs del test13. Pero no puedo generar los test14 y test15, porque carecen del tld_zxuno.bit. Y no puedo generarlos por el error de compilación comentado en el parrafo anterior.

Esta el repositorio incompleto??

Un saludo.

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: ZX-Uno prototipo 2: seguimos dándole caña

Mensajepor mcleod_ideafix » 16 Jun 2015, 20:47

celestinox escribió:ERROR: The iMPACT project file "C:/Repositorio McLeod/cores/spectrum_v1_spartan3/test14/impact_project.ipf" does not exist.

Eso es un error del iMPACT, y no debería afectar a la recompilación del BIT. ¿Cómo haces para intentar generarlo?

De todas formas, no necesitas ese fichero. Cuando tengas el BIT, sencillamente abre iMPACT, no cargues ningún proyecto ni nada, sino que haces tú la inicialización de la cadena JTAG, asignas el fichero a la FPGA y lo grabas.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
celestinox
Commodore 128
Commodore 128
Mensajes: 97
Registrado: 07 Dic 2012, 17:04
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
Primera consola: Sony PlayStation 2
Gracias recibidas: 9 veces

Re: ZX-Uno prototipo 2: seguimos dándole caña

Mensajepor celestinox » 16 Jun 2015, 22:01

mcleod_ideafix escribió:
celestinox escribió:ERROR: The iMPACT project file "C:/Repositorio McLeod/cores/spectrum_v1_spartan3/test14/impact_project.ipf" does not exist.

Eso es un error del iMPACT, y no debería afectar a la recompilación del BIT. ¿Cómo haces para intentar generarlo?

De todas formas, no necesitas ese fichero. Cuando tengas el BIT, sencillamente abre iMPACT, no cargues ningún proyecto ni nada, sino que haces tú la inicialización de la cadena JTAG, asignas el fichero a la FPGA y lo grabas.


Hola, abro el "zxuno.xise" haciendo doble clic sobre el archivo, esto abre el ISE, voy a tools/iMPACT, y me dice que no tiene definido lo que necesita, así que lo regenera. Hasta el test12, esto me generaba el .bit. Pero en test13, test14 y test15 (del directorio "spectrum_v1_spartan3") me sale el error. He podido generar el mcs del test13, por que si había un .bit .

No tengo ni idea de como funciona el ISE, lo hago mecánicamente, como el guión que escribió jepalza para esto; ¿si puedes aclararme como hacerlo?. porque el problema es que en el repositorio del test14 no hay ningún BIT (Ojo V1 spartan3); sino está claro que con el iMPACT me basta, así lo he hecho hasta el test12.

De todos modos el BIT del test15, no me funciona, me sale una pantalla con el borde rojo y franjas negras verticales. En la placa lo único que no he soldado es el DB9 del joystick,ni lo necesario para el video compuesto. Creo que tanto el anterior engendro como este, están en la misma versión de firmware. Porque imagino que se puede actualizar con programador, ó ¿solo desde la bios a través de cargando leches desde el test13?. Imaginaba que para generar las cintas, se partía del BIT. Al menos eso veo al leer el código de generamcs_v1.bat.

call promgen -w -spi -p mcs -o tld_zxuno.mcs -s 4096 -u 0 "C:\Repositorio McLeod\cores\spectrum_v1_spartan3\test15\tld_zxuno.bit"

Un saludo, a ver si podeís aclararme estas dudas.

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

Re: ZX-Uno prototipo 2: seguimos dándole caña

Mensajepor antoniovillena » 16 Jun 2015, 23:22

El test15 sí que tiene tld_zxuno.bit, al único al que le falta es al test14. La compilación del .bit no es complicada, se hace en tres pasos y tarda un buen rato. Si tienes la misma versión del ISE que McLeod es muy fácil porque ya tienes el proyecto cargado y sólo tienes que "compilar", mientras que si usas otra versión tienes que crear un proyecto nuevo e ir añadiendo los archivos fuente al mismo.

De todas formas tienes el prom.mcs en el test14, que también te vale y de ahí puedes extraer el bitstream por si lo quieres cargar por el puerto EAR.

Avatar de Usuario
Hark0
Amiga 1200
Amiga 1200
Mensajes: 1695
Registrado: 11 Jul 2012, 23:44
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: (Otro)
Primera consola: (Otro)
Ubicación: Cornellà de Llobregat - Barcelona
Contactar:

Re: ZX-Uno prototipo 2: seguimos dándole caña

Mensajepor Hark0 » 16 Jun 2015, 23:25

ZEsarUX 2.2 corriendo en MacOS!!!

Con soporte "experimental" ZX-Uno... un 10 por César!

Por cierto, secundo el botón ON/OFF... creo que le problema del teclado viene del USB... esta tarde me he quedado con él en la mano... :?

Mañana lo sueldo y verifico... tengo 3 teclados diferentes para probar...

Y para terminar el telegrama post... McLeod, he probado bien la capturadora con los drivers correctos... identifica y funciona las señales NTSC y PAL_x... ;-)

A capturar videos!
Adjuntos
Captura de pantalla 2015-06-16 a la(s) 22.47.01.png
Captura de pantalla 2015-06-16 a la(s) 22.47.01.png (169.15 KiB) Visto 8094 veces
Captura de pantalla 2015-06-16 a la(s) 22.49.15.png
Captura de pantalla 2015-06-16 a la(s) 22.49.15.png (168.13 KiB) Visto 8094 veces
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

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

Re: ZX-Uno prototipo 2: seguimos dándole caña

Mensajepor antoniovillena » 16 Jun 2015, 23:35

Te explico línea a línea lo que hace generamcs_v1.bat (también aplicable a la versión 2):

Compila el firmware que está en la carpeta padre.

Código: Seleccionar todo

cd ..
call  make_v1.bat


Compila 2b500.asm que es donde están las tablas que configuran las ROMs y otros datos de configuración de la BIOS.

Código: Seleccionar todo

cd roms
..\sjasmplus 2b500.asm


Genera un archivo (roms29500.bin) con todas las ROMs que vamos a meter en el sistema, incluida la del ESXDOS, el firmware y las tablas antes mencionadas.

Código: Seleccionar todo

copy /b ESXMMC.BIN+                   ^
        2b500.bin+                    ^
        ..\firmware.rom+              ^
        leches.rom+                   ^
        plus3es40zxmmc.rom+           ^
        se.rom+                       ^
        48.rom+                       ^
        ManicMiner.rom+               ^
        JetSetWilly.rom+              ^
        LalaPrologue.rom+             ^
        Deathchase.rom+               ^
        Chess.rom+                    ^
        Backgammon.rom+               ^
        HungryHorace.rom+             ^
        HoraceSpiders.rom+            ^
        Planetoids.rom+               ^
        SpaceRaiders.rom+             ^
        MiscoJones.rom                ^
    roms_29500.bin


Crea un .mcs partiendo del .bit (bitstream). El formato .mcs es más manipulable y admite todo tipo de datos, no sólo el bitstream.

Código: Seleccionar todo

call promgen -w -spi -p mcs -o tld_zxuno.mcs -s 4096 -u 0 ..\..\cores\spectrum_v1_spartan3\test15\tld_zxuno.bit


Al archivo .mcs anterior que sólo contenía le bitstream le añadimos todas las ROMs con tablas/firmware/etc... que hemos generado antes.

Código: Seleccionar todo

srec_cat  tld_zxuno.mcs   -Intel                    ^
          roms_29500.bin  -binary -offset 0x29500   ^
          -o prom.mcs     -Intel                    ^
          -line-length=44                           ^
          -line-termination=nl


El anterior archivo (prom.mcs) es directamente grabable con iMPact, pero nosotros también queremos poder grabar la SPI por cinta. Así que partimos del tld_zxuno.mcs anterior que sólo tenía el bitstream y lo convertimos en un archivo puramente binario.

Código: Seleccionar todo

srec_cat  tld_zxuno.mcs     -Intel  ^
          -o tld_zxuno.bin  -binary


Al archivo binario anterior le añadimos la ROM del ESXDOS, la tabla de ROMs y el firmware para generar machine.bin. Nota: esto en la v2 se ha cambiado y machine.bin contiene sólo el bitstream (sería lo mismo que tld_zxuno.bin).

Código: Seleccionar todo

copy /b tld_zxuno.bin+    ^
        ESXMMC.BIN+       ^
        2b500.bin+        ^
        ..\firmware.rom   ^
    machine.bin


Transformamos los archivos binarios a .tap para que se puedan cargar desde la BIOS, y luego pasamos los .tap a ultracargas del tipo CargandoLeches.

Código: Seleccionar todo

GenRom 0 202 0 0 0 'BIOS' ..\firmware.rom firmware.tap
GenRom 0 0 0 0 0 'Machine' machine.bin  machine.tap
CgLeches firmware.tap firmware.wav
CgLeches machine.tap  machine.wav


-- Actualizado 16 Jun 2015, 22:42 --

Hark0 escribió:creo que le problema del teclado viene del USB... esta tarde me he quedado con él en la mano... :?

Mañana lo sueldo y verifico... tengo 3 teclados diferentes para probar...


No te preocupes por el conector microUSB, ya lo soldaré yo cuando hagamos de nuevo el cambio. De momento puedes soldar los dos pines macho del conector J12 y alimentar por ahí.

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: ZX-Uno prototipo 2: seguimos dándole caña

Mensajepor mcleod_ideafix » 17 Jun 2015, 14:14

celestinox escribió:No tengo ni idea de como funciona el ISE, lo hago mecánicamente, como el guión que escribió jepalza para esto; ¿si puedes aclararme como hacerlo?

Esto es lo que yo hago:
- Con el ISE: cargo el zxuno.ise, lo edito o hago lo que sea, y cuando quiero generar el bitfile (fichero .BIT) hago lo siguiente:
* En la vista de ficheros "Hierachy" a la izquierda, escojo tld_zxuno.v que verás que tiene un icono diferente a los demás. Ese icono es el indicativo de que ese fichero es el "top level design". Es decir, que se sintetiza a partir de él.
* Al elegirlo, abajo aparece en la ventana "Processes: tld_zxuno" todas las cosas que se pueden hacer con él. Haz doble clic en "Generate Programming File" y espera unos minutos.
* Al finalizar el proceso, tendrás un fichero tld_zxuno.bit en el mismo directorio que todos los demás ficheros del proyecto.

- Con el iMPACT: arranco iMPACT desde Windows (no desde el ISE). Me preguntará si quiero cargar un proyecto, o si quiero crear uno, etc. A todo esto le decimos que NO. Al final lo que obteienes es una ventana con un área grande vacía, y unas ventanas a los lados con los "Flows" (arriba) y los "Processes" (abajo).
* En "Flows" selecciona "Boundary Scan" haciendo doble clic. En la ventana vacía más grande, haz clic derecho y elige "Initialize chain". Se iniciará la comunicación con el adaptador JTAG y el resultado final es que aparecerá la FPGA. Si te pregunta que si quieres continuar asignando un configuration file le dices que NO. A la ventana que le sigues le das a Aceptar. Aparecerá un cartelito de "Identity success".
* Clic derecho en la FPGA y elige "Assign new configuration file". Aparece un cuadro de diálogo para buscar un fichero .BIT. Busca y elige el que has generado en el paso anterior, o el que hubiera en el repositorio si ya estaba creado. Te preguntará si quieres configurar las SPI ROM que haya conectadas. Le dices que NO.
* Ahora verás que la FPGA, además del nombre, tiene abajo el nombre del fichero bit que has elegido para ella. Para programarla, clic derecho en la FPGA y elige "Program". Aparecerá un cuadro de diálogo. Si la opción "Verify" está marcada, desmárcala. Si no, déjalo como está. Dale a Aceptar y el bitfile se volcará a la FPGA. Mientras esto ocurre, la pantalla del ZX-Uno se apaga. Cuando termine, arrancará como recién encendido.
* Si haces cambios al código del ZX-Uno tienes que volver a generar el bitfile y volver a volcarlo en la FPGA. Este segundo paso es más corto, ya que simplemente vuelves a elegir la FPGA con clic derecho, Programar. Te avisa de que el bitfile ha cambiado (lógico) y que si quieres recargarlo. Le dices que SI, y volverá a cargar la FPGA con la última versión del .bit

Para generar el fichero MCS que va en la SPI, se hace con el script generamcs dentro de firmware/roms. Asegúrate de que el tld_zxuno.bit se que coge sea el que estés usando.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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