ZX-Uno: Camino hacia la versión 3 (definitiva)

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: 15 veces

Re: ZX-Uno: Camino hacia la versión 3 (definitiva)

Mensajepor Quest » 17 Ago 2015, 23:38

antoniovillena escribió:
No caben todos los sistemas, sólo uno a la vez. Bueno en realidad caben 2, pero no hemos explotado aún el multiboot. Los que no tengan cable sólo podrán disfrutar del sistema original (Spectrum) y actualizar las veces que quieran. Los otros sistemas no tienen posibilidad de autoescribirse, por lo que si tienes Spectrum y por ejemplo cambias a SMS pierdes la posibilidad de cambiar de sistema y te quedas en SMS hasta que alguien te lo cambie con un cable JTAG. Técnicamente es posible hacer que el sistema en cuestión se pueda actualizar y no necesitar para nada el cable JTAG, pero en la práctica es muy complejo.

En resumen. Los que compren el ZX-Uno y no quieran complicarse con el cable ni con instalarse el iMPact se tienen que "aguantar" con un sólo sistema, el Spectrum, que es para el que fue diseñado originalmente.


Con respecto a este tema, se me ocurrio un modo, que podria ser viable, a ver cómo lo veis.

Estuve mirando los documentos de xilinx sobre el multiboot, y aunque no me enteraba ni del 5% de lo que leia, lo que si parece claro es que puedes tener en la spartan 6 un sistema de multiboot basado en una "golden image", un "multiboot image" y un header. (http://www.xilinx.com/support/documenta ... xtp059.pdf)

Mi idea es hacer que la golden (creo que es la que arranca primero, o si es al reves, lo siento, pero espero que se entienda lo que quiero explicar) sea la de spectrum en el zx-uno, es decir, que siempre arranque por defecto el spectrum. Y en la spi, la otra imagen (bitstream) sea de otro sistema, el cual podamos actualizar. Y aqui viene lo interesante: siendo el offset del bitstream secundario en la flash fijo y conocido, sólo hay que añadir a la bios del zx-uno una nueva opcion en el menu de upgrade "Upgrade secondary machine", y poder actualizarlo con un tap.

Lo de actualizar un bitfile cualquiera con un tap ya lo empece a hacer cuando me petó el puerto jtag. Y si hago un tap con el bitfile del sam coupe y lo cargo en el upgrade machine que hay ahora mismo funciona perfectamente, como es natural (probado). Pues lo mismo pero escribiendo en el offset de la spi de la imagen secundaria.

El resto sería crear el sistema de multiboot para nuestra spartan y decidir el método por el cual se elige arrancar con un bitfile u otro. Puede ser con un pequeño bootloader, o con una combinacion de teclas en bios, o con un pulsador en la placa...

jjmarin
ZX Spectrum 16
ZX Spectrum 16
Mensajes: 7
Registrado: 02 Sep 2013, 23:40
Sistema Favorito: Spectrum +2
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Sony PlayStation 2

Re: ZX-Uno: Camino hacia la versión 3 (definitiva)

Mensajepor jjmarin » 17 Ago 2015, 23:45

Hola, aunque me presenté hace tiempo, me he quedado mudito todo este tiempo. Sólo puedo decir que estoy realmente impresionado con todo lo que habéis conseguido. Esperando impaciente que salga el crowdfinding, pero vamos, tomaros el tiempo que haga falta.

PD: podría ser interesante alguna opción para incluir el cable JTAG para los que quieran complicarse la vida :-)

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: 51 veces
Contactar:

Re: ZX-Uno: Camino hacia la versión 3 (definitiva)

Mensajepor mcleod_ideafix » 18 Ago 2015, 00:29

Quest escribió:Estuve mirando los documentos de xilinx sobre el multiboot, y aunque no me enteraba ni del 5% de lo que leia, lo que si parece claro es que puedes tener en la spartan 6 un sistema de multiboot basado en una "golden image", un "multiboot image" y un header. (http://www.xilinx.com/support/documenta ... xtp059.pdf)

Mi idea es hacer que la golden (creo que es la que arranca primero, o si es al reves, lo siento, pero espero que se entienda lo que quiero explicar) sea la de spectrum en el zx-uno, es decir, que siempre arranque por defecto el spectrum. Y en la spi, la otra imagen (bitstream) sea de otro sistema, el cual podamos actualizar. Y aqui viene lo interesante: siendo el offset del bitstream secundario en la flash fijo y conocido, sólo hay que añadir a la bios del zx-uno una nueva opcion en el menu de upgrade "Upgrade secondary machine", y poder actualizarlo con un tap.


Sí, esa es la idea para tener un multiboot de verdad: que el Spectrum sea el golden y desde él se pueda elegir, en BIOS, si cargar un nuevo core desde la flash hasta la ubicación de la segunda imagen. Tengo que leerme también todo esto del multiboot :)

Por cierto, Quest: que ya tienes permisos de escritura sobre el directorio "cores" para poner estos cores que has portado. Una vez estén ahí, trataré de modificarlos para tener una versión que no use VGA, sino RGB/video compuesto.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

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: 15 veces

Re: ZX-Uno: Camino hacia la versión 3 (definitiva)

Mensajepor Quest » 19 Ago 2015, 15:58

:D :D
Bueno, esta vez voy a poner primero la foto :mrgreen:
Pero ya adelanto que no es "tan bonito como lo pintan", hay limitaciones importantes y pegas, que explico luego:

Imagen

¡La NES en el ZX-UNO! :D

Este port ha sido algo algo más difícil, y además para cargar juegos hay que hacerlo mediante un programa por puerto serie (luego lo explico). Además los juegos han de ser pequeños. Por eso decía antes, que "no es tan bonito como lo pintan" y como prueba de momento está bien, pero requeriría de un cargador de roms por SD y también del uso de la SRAM en vez de la BRAM de la FPGA para cargar juegos más grandes. Más abajo pongo un link de descarga con lo necesario para ponerlo en marcha, por si alguien tiene el material necesario y quiere probar.

El port se ha basado en el core de NES FPGA de Brian Bennett (https://github.com/brianbennett/fpga_nes), que está en Verilog. Originalmente escrito para un xc6slx16 BGA y otros ports para xc6slx45 que aún es más grande. En el nuestro (lx9) cabe justito justito. Además del habitual remapeo de pines y algún pequeño ajuste, ha habido que hacer algo para manejar los juegos, ya que el código original espera que conectemos un mando original de NES a la placa. Un usuario que lo portó a Pipistrello, puso una especie de wrapper para manejarlo con pulsadores en placa (algo incómodo ;)), y lo he readaptado para manejarlo con un mando norma Atari para poder conectarlo en nuestro ZX-UNO. Además con un mando de 2 botones (como el de Master System) podemos usar los botones A y B. Los de start y select de momento los he mapeado al conector de expansión, poniendo unos pulsadores, sirve para empezar los juegos, ya que no se usa mas que para eso.

Por otro lado, a pesar de que el original saca señal VGA, lo hace de una forma extraña, con 3 bits por color salvo en el azul, que solo usaba 2. Eso hacía que se viera todo verdoso-amarronado, ya que la paleta que pusieron originalmente está hecha para adaptarse a ese curioso modo. Lo que he hecho es adaptarlo para que use 3 bits también en el color azul, y he rehecho completamente la paleta, usando como base los valores que encontré aquí (http://www.thealmightyguru.com/Games/Ha ... ES_Palette) y adaptándolos a 3 bits redondeando por arriba o por abajo según he comprobado la cercanía de los colores. Además he aprovechado para quitar el verde-caca que tenía el borde y cambiarlo por negro.

La primera foto que he puesto es con la paleta ya arreglada y "los bits en su sitio" :D Aquí debajo pongo otra de cómo se veía antes (es con el móvil y no consigo que se vea como yo lo veo en vivo, pero para haceros la idea de cómo se veía):

Imagen

Detalles a tener en cuenta:

- Como comentaba antes, el tamaño máximo de juegos .nes que está admitiendo ahora mismo es de 41kb, debido a la limitación de la memoria BRAM interna de la FPGA, ya que este core no usa ningún tipo de memoria externa.

- Para cargar los juegos, hay que disponer de puerto serie en el ordenador + conversor de niveles, o bien un USB->serie de esos que se suelen usar para programar los arduinos y demás. Yo me tiré un par de horas probando con uno de estos últimos y la transmisión daba muchos errores, así que acabé usando el puerto COM real del ordenador y un MAX3232 para conectarlo al ZX-UNO. Como el código original traía el puerto COM fijado al 5, yo he compilado 5 ejecutables del cargador, para los que tengan puertos COM numerados del 1 al 5.

Para hacerlo funcionar en el ZX-UNO:

- Descomprimir el NES_ZXUNO.zip en una carpeta
- Meter el bitfile a la FPGA (o el mcs para la flash)
- Enchufar un joystick de Master system preferiblemente (o un norma atari con 2 botones compatible)
- Enchufar la plaquita VGA al conector J8 y conectarlo a un monitor VGA normal. (no va por vídeo compuesto, sólo VGA de momento)
- Enchufar el jack de salida de audio a unos altavoces (sólo se oirá por un lado)
- Colocar, según la imagen que adjunto aquí debajo, los pulsadores para START/SELECT en el puerto de expansión y los cables RX/TX del puerto de expansión al puerto serie del ordenador (vía coversor de señales o adaptador USB->serie que funcione bien):

Imagen

Ahora, a funcionar:

- Con todo conectado (sobre todo revisar la conexión RX/TX al puerto serie), enchufar el ZX-UNO. Saldrá en el monitor una pantalla gris con borde negro.
- Ahora, según número del puerto serie que tengáis (x = COM1, COM2, COM5...), ejecutad el cargador de roms de la carpeta RomLoader (nesdbg_COMx.exe)
- Si todo va bien, el loader reconoce la FPGA y saldrá una ventana con 2 menús (file y tools). Si da error, algo tenéis mal puesto.
- Vamos a File -> load ROM y elegimos una ROM de NES de la carpeta "roms" que he incluido (también las incluye el repositorio original, de hecho el incluye más, teneis un TXT con los compatibles en la carpeta "roms")
- Si todo va bien, tras finalizar la barra de progreso, ya tendréis el juego funcionando en el ZX-UNO :)

Descarga:
NES_ZXUNO.rar
(596.87 KiB) Descargado 101 veces


Bueno, pues de momento eso es todo.

Mis conocimientos por el momento no dan para hacer nada más usable en este port (en todo caso adaptarlo para usar un pad de megadrive y poder usar el botón Start en vez de un pulsador)

Cuando organice todos los fuentes de todo y los uba todo al repositorio (voy a necesitar días), a ver si alguien más entendido de los que estáis por aquí puede al menos intentar usar la SRAM en vez de la BRAM para cargar juegos más grandes. También intenté incorporar una ROM en el propio bitstream haciendo un BMM para inyectarla pero no lo he conseguido. Creo que trabajando un poquito en él, puede ser una pasada. Tiene la ventaja de que está escrito en Verilog :D

El port que hay para xc6slx45 (Pipistrelo) es mejor porque la FPGA es bastante más grande, y han implementado la carga por SD (de un unico juego, eso sí) metiendo para ello un core Microblaze en la FPGA (matar moscas a cañonazos, diría yo). De hecho cuando probé a portar "eso", vi que ni siquiera el Microblaze solo cabe en nuestra Spartan, es más, creo que no cabe ni la mitad :roll: así que preferí portar uno que al menos funcionara en el ZX-UNO. Creo que lo mejor para un cargador SD, es hacerlo directamente usando la CPU de la NES.

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: 51 veces
Contactar:

Re: ZX-Uno: Camino hacia la versión 3 (definitiva)

Mensajepor mcleod_ideafix » 19 Ago 2015, 16:12

Halaaaaaa!!!! :shock: :)
Bueno, salvo que necesiten mucho ancho de banda en la RAM, no debería ser problema implementar la memoria del cartucho en la SRAM. ¿Sabes si usan una o dos zonas separadas a las que se puedan acceder a la vez?
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

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: 15 veces

Re: ZX-Uno: Camino hacia la versión 3 (definitiva)

Mensajepor Quest » 19 Ago 2015, 17:59

Pues usa una zona para la PRG ROM y otra para la CHR ROM.

Por cierto, olvidé mencionar algo bastante importante, y es que este core sólo soporta Mapper 0, con lo cual la lista de juegos compatibles es muy muy reducida (olvidarse de Zeldas, Marios que no sean el 1, Metroids y demás) :(

Habrá que investigar más. Hay otro core, de Ludde / Strigeus aquí (https://github.com/strigeus/fpganes) que soporta mappers MMC1,2,3 y Action 53, con lo cual la lista de juegos soportados se ampliaría muchisimo (Podríamos correr un Super Mario Bros 3, por ejemplo). Intenté adaptarlo (es para la placa Nexys4, monta una spartan-6 LX16) pero usa memoria PSRAM, que no tengo ni repajolera idea de qué es (parece que un híbrido entre dram y sram) ni por dónde cogerlo. El código es ininteligible para mí. Si le queréis echar un vistazo...

Avatar de Usuario
scooter
Amiga 1200
Amiga 1200
Mensajes: 1029
Registrado: 17 Jul 2012, 09:25
primer_sistema: C64
Ubicación: Alicante

Re: ZX-Uno: Camino hacia la versión 3 (definitiva)

Mensajepor scooter » 19 Ago 2015, 18:51

¡¡Joder con el 'aprendiz'!!

Que peligro tiene el tío

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

Re: ZX-Uno: Camino hacia la versión 3 (definitiva)

Mensajepor antoniovillena » 19 Ago 2015, 22:46

Esto es ya un no parar. Dios mío. En la última versión no hay botones extra en el puerto de joystick. Intentaré sacar un pin de donde sea para que funcionen los pads de la SMS (con el segundo botón en el pin 9), porque sería una pena no poder jugar a la NES o a la SMS con los nuevos sistemas que has portado por no tener dicho botón.
Adjuntos
zxuno.zip
(344.28 KiB) Descargado 93 veces

jjmarin
ZX Spectrum 16
ZX Spectrum 16
Mensajes: 7
Registrado: 02 Sep 2013, 23:40
Sistema Favorito: Spectrum +2
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Sony PlayStation 2

Re: ZX-Uno: Camino hacia la versión 3 (definitiva)

Mensajepor jjmarin » 19 Ago 2015, 23:12

Creo que el amigo Quest la está liando pardísima :-). Ya puestos, me gustaría saber si es posible soportar socz o su versión mejorada, que creo que es interesante para correr cp/m, mp/m, uzi, fuzix
- http://sowerbutts.com/socz80/
- http://zeniv.linux.org.uk/~alan/SocZ80/
- https://github.com/EtchedPixels/FUZIX

Avatar de Usuario
garvidal
Spectrum 48K Plus
Spectrum 48K Plus
Mensajes: 34
Registrado: 15 Oct 2014, 21:15
Sistema Favorito: Amstrad CPC
primer_sistema: PC
consola_favorita: NeoGeo
Primera consola: Nintendo DS/3DS
Gracias dadas: 4 veces
Gracias recibidas: 2 veces

Re: ZX-Uno: Camino hacia la versión 3 (definitiva)

Mensajepor garvidal » 19 Ago 2015, 23:15

Habéis creado un monstruo... Me dejáis alucinado, de verdad. Es increíble lo que sois capaces de hacer con él zx- uno. Parece que voy a tener más tiempo este mes, tengo que ponerme a probarlo todo pero ya.
---------------------------------------------------
http://www.garvidal.com
http://www.dicemarket.es


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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