ZXUNO con salida VGA en el Spectrum
ZXUNO con salida VGA en el Spectrum
He conseguido sacar VGA al ZXUNO para el core del Spectrum, pero tengo un problema, y es que no me queda, ni centrado, ni adecuado. En la imágen se aprecian sincronismos horizontales perdidos (en el borde negro de abajo), y ademas, no debería verse ese borde negro, y por la derecha no queda centrado por mucho.
Es un avance, no es gran cosa, pero ya va. No os emocionéis muy rápido ( @radastan , date por aludido por ahora ) por que de momento es una trmapa gigantesca la que me he currado. Estoy empleando una ULA trampeada para que haga el trabajo de sacar HSYNC y VSYNC ella sola, sin que lo tenga que hacer fuera de ella, y ademas, para no comerme la cabeza, estoy usando un Spectrum ultra-simple, el mas básico posible, en el cual solo tengo 17k de RAM (estoy usando la BRAM de la FPGA) y no tiene SD, solo se puede cargar por cinta. Esto lo hago así para agilizar tanto la síntesis (mas rápida al tener menos elementos) como para eliminar errores, al no preocuparme de módulos extras. Ademas, la ROM la he integrado directa en la FPGA, para no tener que cargarla aparte. Por ahora es solo para probar y divertirme aprendiendo.
Es un avance, no es gran cosa, pero ya va. No os emocionéis muy rápido ( @radastan , date por aludido por ahora ) por que de momento es una trmapa gigantesca la que me he currado. Estoy empleando una ULA trampeada para que haga el trabajo de sacar HSYNC y VSYNC ella sola, sin que lo tenga que hacer fuera de ella, y ademas, para no comerme la cabeza, estoy usando un Spectrum ultra-simple, el mas básico posible, en el cual solo tengo 17k de RAM (estoy usando la BRAM de la FPGA) y no tiene SD, solo se puede cargar por cinta. Esto lo hago así para agilizar tanto la síntesis (mas rápida al tener menos elementos) como para eliminar errores, al no preocuparme de módulos extras. Ademas, la ROM la he integrado directa en la FPGA, para no tener que cargarla aparte. Por ahora es solo para probar y divertirme aprendiendo.
- mcleod_ideafix
- Mensajes: 831
- Registrado: 27 Sep 2015, 00:14
- Ubicación: Jerez de la Frontera
- Contactar:
Re: ZXUNO con salida VGA en el Spectrum
Ese offset existe en la ULA original. Forma parte de cómo genera la pantalla. Probablemente lo que estés viendo es el "paper" muy echado a un lado (derecha o izquierda, ahora no recuerdo).jepalza escribió:He conseguido sacar VGA al ZXUNO para el core del Spectrum, pero tengo un problema, y es que no me queda, ni centrado, ni adecuado.
Si quieres hacer algo divertido, haz que cuando la parte de VGA pinta por segunda vez el scanline, lo haga pero con los colores más oscuros, es decir, de cada componente de color de 3 bits, desplázalo a la derecha para dividirlo entre dos y sácalo así. Habrás conseguido un efecto scanline muy chulo
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
Re: ZXUNO con salida VGA en el Spectrum
Lo pruebo mañana, ahora tengo que dejarlo de momento. Gracias.
Re: ZXUNO con salida VGA en el Spectrum
Jepalza, sólo llegar a esto ya me haces sonreir de oreja a oreja. Es lo que me separa de poner a piñón fijo el ZX Uno en el monitor (uno 4:3) y poder disfrutar del ZX Uno como si no hubiera un mañana. La capturadora no hace justicia a la calidad de imagen. Idem mi televisor/monitor Samsung. Y poner el televisor de tubo me da una perece impresionante porque tengo poco espacio y cada vez que lo saco tengo que recogerlo en poco tiempo.
Te falta "ná".
Yo voy preparando la cámara...
Te falta "ná".
Yo voy preparando la cámara...
Re: ZXUNO con salida VGA en el Spectrum
Necesito ayuda (una vez mas, para variar):
Ya he conseguido meter la VGA, usando la modificación de Mcleod_Ideafix sobre la ULA de Radastan.
Para poder luego mostrar esa imágen con HSYNC+VSYNC en la pantalla VGA, he empleado una rutina que cogí del repositorio de la placa de desarrollo "papistrello" de Jozsef Laszlo y la he retocado un poco para ponerla acorde al verilog del zxuno.
Y realmente funciona, pero la imágen que me sale es esta:
¿alguien ve el problema? SI os dáis cuenta, en vertical está perfecto, pero en horizontal me sale el doble de grande.
Y el código este, a ver si alguno véis el error de duplicado de tamaño horizontal:
EDITO!!: Olvidaros de todo lo anterior (he borrado el código que puse), el fallo era de mi monitor, que no quería centrar la imagen de modo automático, y hasta que no lo he hecho de modo manual no he podido ajustar). Ya tenemos VGA
Ya he conseguido meter la VGA, usando la modificación de Mcleod_Ideafix sobre la ULA de Radastan.
Para poder luego mostrar esa imágen con HSYNC+VSYNC en la pantalla VGA, he empleado una rutina que cogí del repositorio de la placa de desarrollo "papistrello" de Jozsef Laszlo y la he retocado un poco para ponerla acorde al verilog del zxuno.
Y realmente funciona, pero la imágen que me sale es esta:
¿alguien ve el problema? SI os dáis cuenta, en vertical está perfecto, pero en horizontal me sale el doble de grande.
Y el código este, a ver si alguno véis el error de duplicado de tamaño horizontal:
EDITO!!: Olvidaros de todo lo anterior (he borrado el código que puse), el fallo era de mi monitor, que no quería centrar la imagen de modo automático, y hasta que no lo he hecho de modo manual no he podido ajustar). Ya tenemos VGA
- mcleod_ideafix
- Mensajes: 831
- Registrado: 27 Sep 2015, 00:14
- Ubicación: Jerez de la Frontera
- Contactar:
Re: ZXUNO con salida VGA en el Spectrum
Porfa porfa porfa... pon alguna demo de las que hacen virguerías con la temporización de la pantalla, tal como la segunda parte de la Shock Megademo
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
Re: ZXUNO con salida VGA en el Spectrum
Supongo que te refieres a la que usa el borde a la par que el paper para dibujar lineas a trapo:
aqui ampliado, pero la cámara no ha captado la velocidad y se ve borrosa, pero lo importa se aprecia, que coge todo a la par, sin pérdidas.
De todos modos, hay que pulir mucho el conversor de escaneado que uso, por que falla mucho. El monitor de PC que véis en la foto (marca "nisupu") sufre con los sincronismos, y se me descentra contínuamente, por eso se ven bordes negros en la pantalla, por que cada vez que reseteo, se me pierde el ajuste y debo volver a centrarlo.
En cambio en la TV Samsung, lo coge a la primera, pero es tele no puedo usar, es en la que vemos la tele.
Otro fallo, son los ajustes en modo 128, que se ven tal que así:
aqui ampliado, pero la cámara no ha captado la velocidad y se ve borrosa, pero lo importa se aprecia, que coge todo a la par, sin pérdidas.
De todos modos, hay que pulir mucho el conversor de escaneado que uso, por que falla mucho. El monitor de PC que véis en la foto (marca "nisupu") sufre con los sincronismos, y se me descentra contínuamente, por eso se ven bordes negros en la pantalla, por que cada vez que reseteo, se me pierde el ajuste y debo volver a centrarlo.
En cambio en la TV Samsung, lo coge a la primera, pero es tele no puedo usar, es en la que vemos la tele.
Otro fallo, son los ajustes en modo 128, que se ven tal que así:
- mcleod_ideafix
- Mensajes: 831
- Registrado: 27 Sep 2015, 00:14
- Ubicación: Jerez de la Frontera
- Contactar:
Re: ZXUNO con salida VGA en el Spectrum
Lo que te pasa en modo 128K es probablemente porque los timmings de 128K son ligeramente diferentes a los de 48K, y por tanto habría que volver a recalibrar el monitor (lo de darle a AUTO para que coja bien la imagen).
¿Funciona bien la ULAplus? Puedes probar la demo HAM8x1, sobre todo la primera imagen, que muestra la carta de colores de ULAplus, y en la que se pueden llegar a ver los 256 colores posibles.
¿Funciona bien la ULAplus? Puedes probar la demo HAM8x1, sobre todo la primera imagen, que muestra la carta de colores de ULAplus, y en la que se pueden llegar a ver los 256 colores posibles.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
Re: ZXUNO con salida VGA en el Spectrum
Si que funciona, al menos, para mi gusto, no veo fallos. Otro ojo mas entrenado no dirá lo mismo.
Lo de los timmings del 128, lo suponía, pero no imaginaba que a efectos VGA afectara. Lo de autoajustar, no sirve en mi monitor, pasa de mi. Si le doy a autiajustar, se me descentra, y luego tengo que llevarlo a mano la centro.
Eso, tú que entiendes mas que yo de vídeo, podrás ajustarlo algún día y dejarlo pulido.
Ademas, habrá que hacer pruebas con muchos monitores, no solo con los tres mios.
Lo de los timmings del 128, lo suponía, pero no imaginaba que a efectos VGA afectara. Lo de autoajustar, no sirve en mi monitor, pasa de mi. Si le doy a autiajustar, se me descentra, y luego tengo que llevarlo a mano la centro.
Eso, tú que entiendes mas que yo de vídeo, podrás ajustarlo algún día y dejarlo pulido.
Ademas, habrá que hacer pruebas con muchos monitores, no solo con los tres mios.
- mcleod_ideafix
- Mensajes: 831
- Registrado: 27 Sep 2015, 00:14
- Ubicación: Jerez de la Frontera
- Contactar:
Re: ZXUNO con salida VGA en el Spectrum
La solución la conocemos: consiste en usar varios relojes y conmutar a uno u otro según estemos en 48K o 128K. Si quieres hacer la prueba manualmente de cómo quedarían los timmings de 128K con el reloj correcto, haz lo siguiente:jepalza escribió:Lo de los timmings del 128, lo suponía, pero no imaginaba que a efectos VGA afectara. Lo de autoajustar, no sirve en mi monitor, pasa de mi. Si le doy a autiajustar, se me descentra, y luego tengo que llevarlo a mano la centro.
Abre en el ISE el fichero cuatro_relojes_maestros.v . Ese es el fichero que contiene la definición de los cuatro relojes, que como podrás ver, son 28MHz y sus tres primeros submúltiplos. Pues bien. Habría que cambiar esos relojes para que ahora sean todos submúltiplos de la frecuencia de 28.5MHz, que sería la nueva frecuencia maestra para 128K. (NOTA: en realidad, y por aquello de hacer el sistema un poquito más compatible con VGA desde el principio, cambié la frecuencia a 28.125MHz)
Pero resulta que 28.5MHz es una frecuencia un tanto puñetera de generar con el PLL, ya que los valores del multiplicador y divisor se van de madre, y aunque sí podríamos generarla, sería más complicado generar sus submúltiplos. Además, en VGA, si la frecuencia es un poco mayor, en realidad es mejor, ya que aumentamos la frecuencia de refresco vertical, y así nos alejamos de la zona "inestable" de los monitores VGA. Así que probemos con una frecuencia pelín mayor: 28.571MHz, que requiere de un multiplicador 4 y un divisor 7.
Así que si puedes, prueba esto: donde aparece...
Código: Seleccionar todo
PLL_BASE
#(.BANDWIDTH ("OPTIMIZED"),
.CLK_FEEDBACK ("CLKFBOUT"),
.COMPENSATION ("SYSTEM_SYNCHRONOUS"),
.DIVCLK_DIVIDE (1),
.CLKFBOUT_MULT (9),
.CLKFBOUT_PHASE (0.000),
.CLKOUT0_DIVIDE (16),
.CLKOUT0_PHASE (0.000),
.CLKOUT0_DUTY_CYCLE (0.500),
.CLKOUT1_DIVIDE (32),
.CLKOUT1_PHASE (0.000),
.CLKOUT1_DUTY_CYCLE (0.500),
.CLKOUT2_DIVIDE (64),
.CLKOUT2_PHASE (0.000),
.CLKOUT3_DIVIDE (128),
.CLKOUT3_PHASE (0.000),
.CLKOUT2_DUTY_CYCLE (0.500),
.CLKIN_PERIOD (20.0),
.REF_JITTER (0.010))
Código: Seleccionar todo
PLL_BASE
#(.BANDWIDTH ("OPTIMIZED"),
.CLK_FEEDBACK ("CLKFBOUT"),
.COMPENSATION ("SYSTEM_SYNCHRONOUS"),
.DIVCLK_DIVIDE (1),
.CLKFBOUT_MULT (7),
.CLKFBOUT_PHASE (0.000),
.CLKOUT0_DIVIDE (7),
.CLKOUT0_PHASE (0.000),
.CLKOUT0_DUTY_CYCLE (0.500),
.CLKOUT1_DIVIDE (14),
.CLKOUT1_PHASE (0.000),
.CLKOUT1_DUTY_CYCLE (0.500),
.CLKOUT2_DIVIDE (28),
.CLKOUT2_PHASE (0.000),
.CLKOUT3_DIVIDE (56),
.CLKOUT3_PHASE (0.000),
.CLKOUT2_DUTY_CYCLE (0.500),
.CLKIN_PERIOD (20.0),
.REF_JITTER (0.010))
Código: Seleccionar todo
#include <stdio.h>
#define abs(a) (((a)>(0))?(a):(-a))
int main(void)
{
float m,d;
float cm=50; // frecuencia del reloj de la placa
float cd=28; // frecuencia principal que queremos generar
float c;
float cx=0;
for (d=2;d<128;d++)
{
for (m=2;m<128;m++)
{
c = cm*m/d;
if (abs(c-cd)<abs(cx-cd))
{
cx = c;
printf ("M = %3.0f D = %3.0f CLOCK = %6.3f\n", m, d, cx);
}
}
}
return 0;
}
http://www.tutorialspoint.com/compile_c ... Xp2cTI2cjQ
Puedes jugar con estas cuatro frecuencias, siempre y cuando se cumpla que haya una principal, y las demás sean sus submúltiplos. Los valores permitidos para M y D son desde 2 hasta 127, si mal no recuerdo, así que evita usar valores de la frecuencia principal deseada que exijan un valor de D alto, ya que para generar los siguientes submúltiplos de esa frecuencia tendrás que doblar el valor de D, y fácilmente se te puede ir de rango.
Tampoco puedes irte a frecuencias muy por encima de 28MHz, ya que el gestor de memoria que multiplexa los accesos de la ULA y el Z80 a la memoria SRAM empezará a no tener tiempo para completar los accesos. En la práctica no creo que esto sea problema, ya que tendrías que irte a una frecuencia principal de más de 50MHz para que esto ocurriera.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA