Sintetizando un Spectrum con el ZX-Uno

Sinclair QL, ZX81, +2, +3, 128K ...
Avatar de Usuario
antoniovillena
Amiga 1200
Amiga 1200
Mensajes: 2013
Registrado: 16 Abr 2012, 21:22
Gracias recibidas: 7 veces

Sintetizando un Spectrum con el ZX-Uno

Mensajepor antoniovillena » 12 Feb 2014, 22:13

Imagen

Este hilo es continuación de la saga:

PiZx: Clon barato de spectrum con FPGA (WIP)
ZX-Uno, clon barato basado en FPGA
Montaje del ZXUNO

Web oficial del proyecto:
zxuno.speccy.org

Ya hemos montado algunos prototipos, otros están pendientes de montar. De lo que se trata ahora es de ir añadiendo hardware (sintético) a la FPGA a través de Verilog hasta tener el clon que queremos. Desgraciadamente (o afortunadamente según se mire) el único con conocimientos suficientes para llevar a cabo esta labor es McLeod, aunque los demás intentamos ayudar en todo lo que podamos. Esta última semana ha sido muy prolífica para el proyecto, porque hemos pasado de no tener nada a tener emulados 128k con AY, con ULAplus y modos gráficos Timex, aunque por ahora con ROM de 16K.

Con prototipos montados estamos Superfo, McLeod y yo (lo hemos montado en este orden). Con la placa montada y apunto de funcionar está jepalza, y radastan está empezando a montar la suya (le ha llegado esta misma tarde). Por otro lado JULIO de speccy.org también quiere ponerse, así que va a estar la cosa muy animada durante un tiempo.

Más cosas. El montaje no es muy complicado, se puede hacer sólo mirando la lista de componentes, aunque es preferible seguir el esquema.

Por ahora sólo hay un fix que hacer, además es muy sencillo y se puede hacer externamente (yo lo tengo hecho así por si en un futuro necesito de esos pines). Se trata de poner las señales EXT1, EXT3 y EXT4 a 3.3V, en el otro hilo hay fotos de cómo se puede hacer. Por otro lado (esto no es un fix) hay que hacer un corto en R32 (o poner una resistencia de 0 ó pocos ohmios) para que funcione el AD724 en modo PAL.

Hay algunos conectores que tienen patitas de plástico por abajo (microUSB, jack, SD) que no se corresponden con agujeros en la PCB. Hay que cortar las patitas con un cutter previamente para que encajen bien. El único conector delicado es el microUSB, mi recomendación es que lo soldéis normalmente y luego con una clavija macho enchufada le dais un buen repaso de estaño por los lados. Si lo hacéis con el conector vacío corréis el riesgo de tapar el recorrido con estaño y que luego no encaje bien la clavija.

A la hora de posicionar los componentes, con la FPGA y el oscilador mirar las fotos porque no hay ninguna referencia (bueno la FPGA tiene números pero mirar de todas formas). El resto más o menos es seguir las guías. En los integrados hay un puntito pequeño que marca el pin 1, no confundir con otro círculo más grandote que está en el lado opuesto. Los diodos LED tienen una franja verde que hay que orientar donde dice la serigrafía (en la serigrafía hay una especie de flechita pequeña en uno de los lados). Los hay de dos colores (verde y rojo) pero a simple vista son indistinguibles, así que si no os da igual tenerlos intercambiados (y queréis verde para alimentación y rojo para usuario) probar con el multímetro en posición diodo, se debe encender la luz. Por último el condensador electrolítico va polarizado. Hay una huella (por donde se mete el pin) redonda y otra cuadrada. La cuadrada es la positiva y la redonda la negativa, en el condensador hay una franja blanca que indica el negativo.

Componentes de reemplazo. Como he pedido los componentes SMD en forma de kits (no individualmente) no he tenido más remedio que hacer algunos cambios respecto a la lista de componentes oficial:
Las tres resistencias de 1K8 (R18, R19, R20) las he sustituído por tres de 2K.
En lugar de poner 6 condensadores de 4.7uF y uno de 10uF, he puesto 8 de 4.7uF. En principio C34 debería funcionar con 4.7uF, pero si no es así tenéis uno de sobra para ponerlo encima (en paralelo).
En lugar de 6 resistencias de 10K hay 4 de 10K y 2 de 9K1.
En lugar de 3 condensadores de 10nF hay 2 de 10nF (C3 y C4) y uno de 15nF (C2)

Para los que tengan la placa montada. Hay que bajarse el ISE Webpack de la página de Xilinx. No hace falta compilar nada porque McLeod ya lo tiene todo generado. Tan sólo hay que meterse en iMPACT y cargar los archivos. Hay unos archivos con extensión .bit que se cargan temporalmente en la FPGA (esto viene bien para hacer pruebas rápidas). Para que se quede almacenado de manera permanente están los archivos .mcs. Todo esto lo tiene McLeod en este repositorio Subversion, aunque se puede descargar sin tener que tener instalado un cliente subversion. Esta es la dirección:

http://www.atc.us.es/svn/zxuno/
Usuario: guest
Contraseña: zxuno
Última edición por antoniovillena el 14 Feb 2014, 16:25, editado 3 veces en total.

Avatar de Usuario
Zardoz
MSX Turbo R
MSX Turbo R
Mensajes: 283
Registrado: 09 Sep 2013, 19:04
Sistema Favorito: (Otro)
primer_sistema: (Otro)
consola_favorita: Nintendo NES/Clónica
Primera consola: Nintendo NES/Clónica
Ubicación: Madrid
Contactar:

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor Zardoz » 12 Feb 2014, 22:19

Cuales son los modos gráficos Timex ?
Yep, I have a blog :zardoz.es
Emulador DCPU-16 VM
Emulador Trillek

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5310
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: 46 veces
Contactar:

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor mcleod_ideafix » 12 Feb 2014, 22:33

Zardoz escribió:Cuales son los modos gráficos Timex ?

De momento es EL modo gráfico de Timex (de los dos que tiene): es el modo HiColour, que te permite tener dos colores simultáneos en cada barrita de 8x1 píxeles (en lugar de 8x8 como hace el Spectrum). Esto permite tener más resolución en color.
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: 7 veces

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor antoniovillena » 12 Feb 2014, 22:43

Zardoz escribió:Cuales son los modos gráficos Timex ?


Perdón, no son modos, es un modo único. Es como el del spectrum pero las celdas son de 8x1 en lugar de 8x8. Cada atributo se corresponde con un byte, así que en lugar de ocupar la pantalla 6144+768 bytes, ocupa 6144+6144 bytes.

-- Actualizado 12 Feb 2014, 22:55 --

Respondiendo a temas del otro hilo:

Hark0 escribió:Escribo post rápido... que tengo que salir volando.... lo del teclado era eso... una plantilla... :D

Otra opción, las pegatinas, opino que queda "guarrete"...

Me gusta la distribución del teclado... ;)

Acerca de manuales para compilar, si lo poneis clarito, me curro PDF...

Vuelvo esta noche, no tengo más tiempo...


Es que el espacio que hay encima del teclado es muy pequeño para tanta información. En cuanto a pegatinas, ¿no hay ninguna alternativa que sea viable? Tiene que ser un material plástico, que no absorba el sudor, que dure mucho tiempo pegada y que con el paso del tiempo no se oscurezca. No sé, ¿vinilo? Lo ideal sería meter el logo y las pegatinas de las teclas en la misma plantilla y que vengan pre-recortadas. Es sólo por preguntar, lo más seguro es que sea caro o inviable.

En realidad compilar no es difícil, lo único que se me escapa una cosa, generar un reloj usando el Core generator. Pero vamos que ya he solventado lo del teclado, no me urge tanto compilar.
Última edición por antoniovillena el 14 Feb 2014, 16:25, editado 3 veces en total.

JULIO
Commodore 128
Commodore 128
Mensajes: 121
Registrado: 22 Feb 2013, 18:58
Sistema Favorito: Spectrum +2
primer_sistema: Spectrum 16Kb/48Kb
Primera consola: TV Games/Pong Clone

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor JULIO » 12 Feb 2014, 22:55

Hola.
joer que gustazo poder responder ya..... =D>

A partir de mañana a calentar el soldador y montarlo, y lo de los ficherines de Mc Leod, pues fenomenal, que al final va a ser mas
sencillo de lo que pensaba..
¿Qué versión mínima a partir de la cual funcionan esos *.bit en el impact? Yo tengo la 11.1 sobre el casi obsoleto
win_xp_sp3.

saludos
Julio.

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

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor antoniovillena » 12 Feb 2014, 23:02

McLeod los ha generado con la 12.4. Yo tengo la 12.1 y me funciona. Al ser archivos ya compilados no tendrás problemas con tu versión incluso valdrían versiones más antiguas, lo que no sé es dónde está el límite.

McLeod escribió:Otra cosa que voy a intentar es generar los relojes sin usar el Core Generator, sino directamente desde Verilog, usando una primitiva de Xilinx. Con suerte, dicha primitiva será la misma en tu versión del ISE que en la mía y podrás regenerar el proyecto sin más que añadir los ficheros y sintetizar


Pues me vendría genial porque nunca he usado el Core Generator. Si te sirve de ayuda, desde VHDL yo genero el reloj (en este caso partiendo de 25MHz genero 7MHz) con el siguiente código:

Código: Seleccionar todo

  signal  clk7      : std_logic;
  signal  clkfb_in  : std_logic;
  signal  clkfx_buf : std_logic;
  signal  clk0_buf  : std_logic;
  signal  gnd_bit   : std_logic;

  gnd_bit <= '0';
  clkfx_bufg_inst : bufg
    port map( i => clkfx_buf,
              o => clk7);
  clk0_bufg_inst : bufg
    port map( i => clk0_buf,
              o => clkfb_in);
  dcm_sp_inst : dcm_sp generic map (
    clk_feedback          => "1X",
    clkdv_divide          => 2.0,
    clkfx_divide          => 25,
    clkfx_multiply        => 7,
    clkin_divide_by_2     => false,
    clkin_period          => 40.0,
    clkout_phase_shift    => "NONE",
    deskew_adjust         => "SYSTEM_SYNCHRONOUS",
    dfs_frequency_mode    => "LOW",
    dll_frequency_mode    => "LOW",
    duty_cycle_correction => true,
    factory_jf            => x"C080",
    phase_shift           => 0,
    startup_wait          => false)
  port map(
    clkfb   => clkfb_in,
    clkin   => clk,
    dssen   => gnd_bit,
    psclk   => gnd_bit,
    psen    => gnd_bit,
    psincdec=> gnd_bit,
    rst     => gnd_bit,
    clkdv   => open,
    clkfx   => clkfx_buf,
    clkfx180=> open,
    clk0    => clk0_buf,
    clk2x   => open,
    clk2x180=> open,
    clk90   => open,
    clk180  => open,
    clk270  => open,
    locked  => open,
    psdone  => open,
    status  => open);


-- Actualizado 12 Feb 2014, 23:09 --

Para aclarar el tema del teclado. No he conseguido hacer que funcione, pero he encontrado otro teclado con el que sí funciona. Al principio pensaba que era cosa del archivo .ucf, pero tenemos el mismo valor lvcmos33. Así que la única explicación posible a este expediente X es que eléctricamente la entrada de la Spartan 3E sea un poco diferente a la de la Spartan 3A (con la que el teclado sí funciona), y el teclado problemático esté emitiendo unos voltajes justo en el límite pero legales para la 3A, pero fuera del límite para la 3E.

De aquí a unos días haré el cambio de teclado. Si a alguien más le ocurre lo mismo tendríamos que cambiar la circuitería que convierte los niveles TTL en CMOS del teclado.

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: Nintendo NES/Clónica
Ubicación: Córdoba-Jaén
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor radastan » 12 Feb 2014, 23:20

Si, ya me ha llegado el paquete, y al ver los componentes SMD se me han caídos los cojones al suelo. Me veo limando la punta del soldador, porque ahora mismo es más grande que los componentes.

- poner imagen del niños clamando venganza en el cómic "la gran superoproducción" de Super López -

Voy a tener que echar paciencia infinita.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

Avatar de Usuario
Zardoz
MSX Turbo R
MSX Turbo R
Mensajes: 283
Registrado: 09 Sep 2013, 19:04
Sistema Favorito: (Otro)
primer_sistema: (Otro)
consola_favorita: Nintendo NES/Clónica
Primera consola: Nintendo NES/Clónica
Ubicación: Madrid
Contactar:

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor Zardoz » 12 Feb 2014, 23:35

mcleod_ideafix escribió:
Zardoz escribió:Cuales son los modos gráficos Timex ?

De momento es EL modo gráfico de Timex (de los dos que tiene): es el modo HiColour, que te permite tener dos colores simultáneos en cada barrita de 8x1 píxeles (en lugar de 8x8 como hace el Spectrum). Esto permite tener más resolución en color.

Ah, como el Sam Coupe....

PD: Realmente se aprecia o se puede aprovechar bien, aparte de poner imágenes estáticas ? (ejem... juegos)
Yep, I have a blog :zardoz.es
Emulador DCPU-16 VM
Emulador Trillek

Avatar de Usuario
radastan
Amiga 2500
Amiga 2500
Mensajes: 4542
Registrado: 11 Jun 2007, 19:29
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Sega Genesis/Megadrive
Primera consola: Nintendo NES/Clónica
Ubicación: Córdoba-Jaén
Gracias dadas: 9 veces
Gracias recibidas: 40 veces
Contactar:

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor radastan » 12 Feb 2014, 23:39

Zardoz escribió:
mcleod_ideafix escribió:
Zardoz escribió:Cuales son los modos gráficos Timex ?

De momento es EL modo gráfico de Timex (de los dos que tiene): es el modo HiColour, que te permite tener dos colores simultáneos en cada barrita de 8x1 píxeles (en lugar de 8x8 como hace el Spectrum). Esto permite tener más resolución en color.

Ah, como el Sam Coupe....

PD: Realmente se aprecia o se puede aprovechar bien, aparte de poner imágenes estáticas ? (ejem... juegos)


No, el Sam Coupé tiene un modo de 256x192 y cada pixel con su color de una paleta de 16. Es más un 16 bits que un 8 bits, y no se que demonios hace para ir tan rápido a nivel de gráficos (es que se las pela, sobre todo desde BASIC).
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

jepalza

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor jepalza » 12 Feb 2014, 23:51

Pues a mi me dan ganas de tirarlo todo por la borda y meter la cabeza en un agujero.

Espero, que el grabador paralelo, no sea bueno, y el fallo venga de ahí, pero por lo pronto, tras tirarme una hora repasando las soldaduras del Xilinx, y descubrir que al menos habían 5 o 6 que no hacían contacto, alguna que tenía una gota que unia dos pines, y poco mas, sigue sin detectarlo al 100%.
He instalado en un portátil que tiene paralelo y XP, un WebPack 10.1 con detección automática, y el Spartan 6 me lo detecta (la papilio pro), pero el spartan 3 me dice que no lo reconoce, y lee una unidad falsa (si en binario es 01000100010 por decir algo, lo que lee es todo "1"). Si aprieto el Xilinx un poco, y le doy a leer, lee "0" y "1", pero sigue siendo unidad ID desconocida. Si repito esos pasos en el Papilio, todo bien....

Ya no sé que mas hacer. Solo esperar al grabador USB, a ver si es mas efectivo. Pero me da que no, que si el paralelo lee uno si y el otro no, es que no está bien soldado. Pero es que ya he repasado las soldaduras con flux varias veces. Puede que el fallo sea de otro sitio, pero es que el JTAG son solo cuatro pines, y los cuatro está bien. Puede que falle la alimentación de alguno de los pines, por que de los reguladores sale bien. Me quedo sin ideas por ahora, y apaga hasta mañana (espero no apagar para siempre, por que ya sería la segunda vez)

Y lo jodio, es que esta vez la placa tiene una pinta al 99% perfecta, sin fallos aparentes de soldaduras, pero..... :cry:

EDITO: hay un hálito de esperanza, acabo de pensar una cosa, y puede que tenga razón de ser. El papilio pro funciona SOLO a 3.3v, y el JTAG no es menos, ya que tambien lo hace a 3.3v, y el programador de puerto paralelo que me hice, SOLO funciona a 5v. pero al parecer, con los 3.3 que le da el Papilio tiene de sobras para detectar la unidad. Pero en cambio, el ZXUNO se alimenta de 2.5v para el JTAG, y el voltaje me da que es demasiado bajo para la circutería del grabador paralelo, y seguro que por eso, está "apagado" y la unidad detectada es todo "1" o todo "0". :-k (ojalá sea esa tontería)


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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