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

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor antoniovillena » 12 Feb 2014, 23:59

radastan escribió: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 he usado un soldador JBC de 30W con punta de 1mm. Los componentes acojonan en un principio pero es más asequible de lo que parece. Los condensadores de 100nF son más pequeños y son peleones a la hora de soldarlos, sólo necesitan un poco más de paciencia. Y si tienes que repasar algún pin de la FPGA, usa flux pero nada de estaño, con el que tiene la huella acumulado hay más que de sobra.

Los dos elementos más delicados son la FPGA y el microUSB. Si se te rompe el USB puedes alimentar por otras vías, lo malo es que estropees la FPGA. Tengo una PCB sin montar que me ha sobrado, si por lo que sea tu estropicio se arregla montándolo todo en una placa nueva no dudes en pedírmela.

-- Actualizado 13 Feb 2014, 00:04 --

jepalza escribió: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)


Sólo te puedo decir que he perdido mucho tiempo comprobando el circuito del teclado, resoldando las resistencia, repasando los pines involucrados de la FPGA e incluso he cambiado dos resistencias. Todo para comprobar finalmente que el circuito estaba perfecto y el problema era del teclado.

Así que hasta que no puedas descartar que sea culpa del grabador yo me esperaría al grabador USB, vaya a ser que intentando enmendar algo que igual está bien, destroces otra cosa.

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

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor mcleod_ideafix » 13 Feb 2014, 01:27

radastan escribió: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).

Radas, el Sam también tiene un modo de atributos 8x1 que funciona de hecho igual que el Timex.

-- Actualizado 13 Feb 2014, 01:54 --

antoniovillena escribió: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:

Eeeeeeso es justo lo que andaba buscando. A ver, para nuestro caso, tenemos que generar dos relojes: uno de 28MHz y otro de 5MHz (este último es para la señal WSS que le indica a la tele que genere una imagen 4:3). Del DCM necesitas dos salidas: CLKFX y CLKDV. Para obtener 28MHz en la salida CLKFX hay que poner como multiplicador (atributo CLKFX_MULTIPLY) igual a 14, y como divisor (CLKFX_DIVIDE), poner 25. Eso nos da una frecuencia de 50*14/25 = 28 MHz.

Para el otro reloj usaremos la señal de salida CLKDV, y para generarla, el atributo CLKDV_DIVIDE debe ser igual a 10. De ahí obtendremos 50/10 = 5 MHz.

¿Te vale con esa información?
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 » 13 Feb 2014, 02:10

Sí me vale. Para el de 28MHz sería:

Código: Seleccionar todo

  signal  clk28      : 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 => clk28);
  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        => 14,
    clkin_divide_by_2     => false,
    clkin_period          => 20.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);


Y para el de 5MHz:

Código: Seleccionar todo

  signal  clk5      : 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 => clk5);
  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          => 10,
    clkfx_multiply        => 1,
    clkin_divide_by_2     => false,
    clkin_period          => 20.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);


Supongo que lo vas a usar en módulos separados, si lo quieres meter en un mismo módulo tendrías que cambiar los normbres de variables/instancias para que no colisionen.

-- Actualizado 13 Feb 2014, 02:13 --

Un módulo sería así (con sus valores correspondientes)
http://retrolandia.net/foro/showthread.php?tid=76

Código: Seleccionar todo

library ieee;
use ieee.std_logic_1164.all;
library unisim;
use unisim.vcomponents.all;

entity clock7 is
  port( clkin_in  : in    std_logic;
        clkfx_out : out   std_logic);
end clock7;

architecture behavioral of clock7 is

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

begin
  gnd_bit <= '0';
  clkfx_bufg_inst : bufg
    port map( i => clkfx_buf,
              o => clkfx_out);
  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          => 20.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   => clkin_in,
              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);
end behavioral;


-- Actualizado 13 Feb 2014, 02:35 --

mcleod_ideafix escribió:Sobre lo que le está pasando a tu teclado... mmmm... viendo algunos esquemáticos de interfaces de teclado, observo que no se requiere el pulldown, sólo el pullup. Si te es posible, ¿puedes quitar las dos resistencias que hacen de pulldown? Soon R30 y R31. Es más... yo hasta me atrevería a cambiar las dos resistencias de pullup de 5,1K por dos resistencias de 10K, es decir, hacer el pullup un poco más débil. Ya sé que dices que con esa misma configuración te funciona en el Gameduino, pero es que... no se me ocurre qué puede estar pasando (bueno, que hayas descartado falso contacto con los pines correspondientes de la VGA).


Como voy a estar unos días con el teclado "malo" haré esta prueba mañana. Es más, he estado viendo otros esquemas y en Minimig ni siquiera usan pullups, tan sólo ponen una resistencia en serie de 270 ohm (como la que tenemos). Así que probaré a quitar primero los pulldowns y luego los pullups.

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

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor mcleod_ideafix » 13 Feb 2014, 02:54

Mira: he reescrito el test7 para que no use el Core Generator. Es más o menos lo mismo que tú ya has hecho con lo que me acabas de contar. A ver si ahora puedes sintetizarlo sin problemas.

antoniovillena escribió:Como voy a estar unos días con el teclado "malo" haré esta prueba mañana. Es más, he estado viendo otros esquemas y en Minimig ni siquiera usan pullups, tan sólo ponen una resistencia en serie de 270 ohm (como la que tenemos). Así que probaré a quitar primero los pulldowns y luego los pullups.

Si quitas los pullps, no te olvides de que tienes que habilitarlos en el fichero UCF. Es decir, el protocolo PS/2 necesita los pullps, ya que en realidad, el teclado lo que envía es, o bien alta impedancia, o un cortocircuito a masa. Es decir, las señales del teclado son en colector abierto.
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 » 13 Feb 2014, 03:13

Genial. Ya compila simplemente añadiendo los archivos del directorio a un nuevo proyecto. Gracias.

Lo del pullup no había caído. Si funciona el experimento nos ahorramos 4 resistencias y tendremos mayor compatibilidad con los teclados.

jepalza

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor jepalza » 13 Feb 2014, 07:02

Me acaban de jo..er, me he levantado y tenía un correo de ebay, diciendo (6 días despues) que mi envío acaba de salir ¡DE CHINA!...... Tambien los ingleses juegan con los envíos.
Cagüenlá ... se acabó todo. Tras 6 dias pensando que llegaría hoy o mañana, me dicen que sale desde china y el plazo previsto de entrega es de 20 a 40 días. Yo que lo compró cerca, pago mas de la cuenta solo por eso (porque en china directamente salía unos 10€ menos), y me lo mandan desde allí y me va a tardar, con los 6 días que ya llevo, unos 35 en llegar. Así que, aparco otra vez el dinero pagado, y van dos. Mas decepciones (¿estaré gafado? :-k )

Como no tengo nada mas que hacer, ni decir, ni ayudar, nos vemos dentro de un mes.... (a no ser, que me haga otro grabador de puerto paralelo mas eficaz)


Retiro todo lo dicho, pero lo dejo por curiosidad. El mensaje que envía el inglés es genérico, y pone los diferentes tiempos de envío desde y hacia diferentes países, y solo me he quedado con lo malo, que es "su envío desde china, bla, bla...", pero mas abajo había otro que ponía "si su envío sale de nuestras oficinas por UPS, el plazo es de 4 a 5 días". Mirando el número de seguimiento, resulta ser un número de UPS UK, y ahora mismo está al sur de Inglaterra, esperando entrar en el barco, imagino. Cruzo los desdos.... :roll: [-o<

Avatar de Usuario
josepzin
Amiga 2500
Amiga 2500
Mensajes: 3103
Registrado: 12 Ene 2009, 14:36
Sistema Favorito: C64
primer_sistema: ZX81
Ubicación: Carthagonova
Gracias dadas: 4 veces
Gracias recibidas: 61 veces
Contactar:

Re: Sintetizando un Spectrum con el ZX-Uno

Mensajepor josepzin » 13 Feb 2014, 07:59

Seguro que el barco se hunde :-P ;-)

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: Sintetizando un Spectrum con el ZX-Uno

Mensajepor Hark0 » 13 Feb 2014, 10:29

Bueno, pues aquí está el logotipo spectrumizado... tamaño real 232x54, con lo que entra bien... ;)

Imagen

¿En que formato final lo queréis?


Imagen Imagen

Imagen Imagen

Imagen
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: Sintetizando un Spectrum con el ZX-Uno

Mensajepor antoniovillena » 13 Feb 2014, 11:05

Lo he pasado a .scr y he corregido un problema en el attribute clash. En realidad los logos válidos son los dos primeros, el del fondo azul es para rellenar la pantalla.
Adjuntos
edgetouch.scr.zip
(1.67 KiB) Descargado 230 veces
edgetouch.png
edgetouch.png (2.48 KiB) Visto 4989 veces

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: Sintetizando un Spectrum con el ZX-Uno

Mensajepor Hark0 » 13 Feb 2014, 11:14

antoniovillena escribió:Lo he pasado a .scr y he corregido un problema en el attribute clash. En realidad los logos válidos son los dos primeros, el del fondo azul es para rellenar la pantalla.


¿Con que app?

Entonces un tema menos ¿ok?
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.


Volver a “Sinclair/Spectrum”

¿Quién está conectado?

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