Scroll por hardware

Si por algo se caracteriza el Spectrum es por su gran variedad de periféricos (clásicos y modernos)

Moderador: Sir Cilve Sinclair

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Scroll por hardware

Mensaje por antoniovillena » Dom Oct 30, 2011 9:43 pm

mcleod_ideafix escribió:Haber, lo que se dice haber, ya hay hecha una ULA descrita en Verilog. Lo comenté hace un tiempo aquí mismo:
viewtopic.php?f=8&t=2311

Lo que pasa es que tengo que pulir el diseño ya que había cosas en el libro de Chris que no me quedaban del todo claras. Después de un tiempo, y sobre todo después de haber implementado un Jupiter ACE y alguna cosilla más en FPGA, me he hecho una mejor idea de cómo se temporiza la ULA. No he publicado código porque la cosa está lejos aún de ser definitiva. Es más, el mismo Chris Smith me escribió para pedirme el código Verilog de la ULA y le dije eso mismo, que la ULA que había hecho aún estaba lejos de respetar los timmings documentados en su libro, ya que era poco menos que una prueba de concepto, y además la salida que implementé es VGA, no TV, por lo que los patrones de contención son muy diferentes.

Cuando vuelva a tener tiempo y termine su descripción, añadiré lo necesario para que además disponga de scroll hardware de la forma en que tú has descrito, ULA+ "oficial" (en la FPGA no hay problema por coger señales del bus de dirección) y también querría añadirle posibilidad de una "raster interrupt" como tiene el SAM.


Estoy de acuerdo contigo en que se añada raster interrupt. Creo que el primer objetivo es tener una implementación en VHDL o Verilog de la ULA sin añadidos y que sea fidedigna, luego ya todo vendrá por su peso. Para llegar a esto es necesario la colaboración de varias personas. Yo tengo una plaquita OLS muerta de risa y puedo ayudar en pruebas y tal, pero el diseño tendría que partir de gente más experimentada.

Si nadie ha conseguido hasta ahora reemplazar la ULA (me refiero físicamente), hablar de cosas como ULA+ y scroll por hardware está a años luz de conseguirse.
Imagen

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Scroll por hardware

Mensaje por antoniovillena » Dom Oct 30, 2011 10:04 pm

mcleod_ideafix escribió:Ojo con eso. Las líneas A0-A6 sólo están disponibles tras el multiplexor, y ahí están compartidas con el bus de direcciones de la VRAM. ¿Qué pasaría si accedes a uno de tus nuevos puertos mientras la ULA está enviando por esas mismas líneas (en la ULA original son de salida) una dirección de VRAM mientras se lee la pantalla? Pues que para que no haya problemas de pantalla, todos tus accesos a puertos generarán contienda.
Este es un problema que también existe en la ULA+ y no sé de hecho si existe un patrón de contienda documentado para esta nueva funcionalidad.


Es cierto, aunque tampoco es tan grave, porque la ULA controla dicho multiplexor y por tanto tiene acceso a todo el bus de direcciones en modo lectura. Sí hay contienda supongo que lo habrán tenido en cuenta.

mcleod_ideafix escribió:En cuál gatearray? En el de 48 pines del 128K/+2 gris? No, ahí están las mismas que en la ULA original, y en el del +2A/+3 sí que están pero... de zócalo nada de nada. Es de hecho la única ULA que tiene todas las señales que necesita la implementación actual de la ULA+, y es también la única ULA para la cual, seguramente, jamás haya un reemplazo interno directo, y que sea fácil de instalar.


Me refería al +2A, pero en este caso habría que hacerlo como decías antes, eliminar el chip, comprobar que no hagan contacto los pines y hacer poner el ULA+ como tarjeta de expansión.

Como he dicho arriba creo que están todas las señales (aunque 14 de los 16 bits de direcciones estén multiplexados) y por tanto se puede implementar la ULA+. Si estoy equivocado dímelo.

mcleod_ideafix escribió:La CPLD más grande que conozco es la XC95288XL, que dispone de 288 bits de memoria (biestables). Haciendo un poco de memoria... la ULA original usa dos contadores de 10 bits cada uno. Eso hacen 20 biestables. Hay una máquina de estados que usa al menos 4 biestables (aunque quizás puedan derivarse de los 4 bits menos significativos del contador de pixeles). Luego tienes un registro de 3 bits para almacenar el valor del borde. Otros dos para MIC y EAR. Un latch que almacena 8 píxeles y otro que almacena el atributo actual. Otro par de latches que almacenan los siguientes 8 píxeles y el siguiente atributo; estos hacen en total 32 biestables.
Sumándolo todo, tienes una ocupación mínima de 20+4+3+2+32=61 biestables. Pero es que en una CPLD, si una macrocelda se usa para contener parte de un circuito combinacional, el biestable asociado a esa macrocelda se pierde (se bypassea), así que el número disponible de biestables es menor de 288. Incluso suponiendo que no fuera así, el número de biestables que tendríamos disponibles para hacer CLUT's sería de 288-61=227, o unos 28 bytes, así que sí, en teoría, una paleta de 16 colores sí cabría en una CPLD, pero hasta que no se escriba y se sintetice la descripción, no se sabrá.


Bueno no está mal exponer estos números. Habría que ver lo que sobra de esta CPLD al implementar la ULA a secas, y dependiendo de esto decidir qué se puede meter. Aunque no quepa todo quizás haya múltiples posibilidades: por poner un ejemplo si no cabe la ULA+ de 16 colores y el scroll hardware a la vez, tal vez codificando cada color con 6 bits y eliminando el scroll vertical salen los números.

mcleod_ideafix escribió:De hecho, es lo mismo que cuenta el propio Chris Smith en la FAQ de la ULA+:


Voy a estudiar los esquemas de Harlequin, que por cierto tienen fecha de 2007/2008. Si por ejemplo hago un cambio en estos circuitos, ¿te valdría para algo? ¿o es mejor trabajar directamente con código VHDL o Verilog?
Imagen

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Scroll por hardware

Mensaje por antoniovillena » Dom Oct 30, 2011 10:18 pm

flopping escribió:que yo sepa ya se ha conseguido meter una ULA normal, incluso todo un Spectrum


Ah pues lo de la ULA no lo sabía. Si te refieres a reemplazar una ULA físicamente con CPLD estoy interesado, porque sería el punto de partida de otras cosas (ULA+, raster interrupt, scroll hardware).

Respecto a tus otras dudas, los juegos soportados por ULA+ están en su web. Para el resto de spectrum lo que he dicho antes, quitas el gate array y le pones el reemplazo de ULA en el bus de expansión. Creo que McLeod ha explicado bastante bien las dificultades principales del ULA+ (en un CPLD sólo no cabe, si le tienes que añadir SRAM complicas la circuitería y en FPGA, aparte de que sale más caro, necesita también circuitería adicional, como una Flash ROM)
Imagen

Avatar de Usuario
flopping
Nonamed
Mensajes: 1093
Registrado: Vie Jul 16, 2010 9:54 am

Re: Scroll por hardware

Mensaje por flopping » Dom Oct 30, 2011 11:59 pm

Pues mcleod_ideafix implemento todo un spectrum, creo que empezo por hacer una ula y vio mas factible el meter todo un spectrum, o eso creo, de todas formas el lo explicara mejor.

De todas formas ya hay varios intentos y creo que alguno lo ha conseguido, en la misma web del harlequin hay una ULA clonada con CPLD o FPGA, ahora no lo recuerdo muy bien, y buscando un poco se encuentran mas paginas de gente que lo ha conseguido, tambien es verdad que el codigo no es publico, pero supongo que pidiendoselo a sus creadores, no tengan problema en compartirlo, todo es cuestion de preguntar.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, debido a la esquizofrenia paranoide que tengo.
(C) 1982-2016, 34 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente"

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Scroll por hardware

Mensaje por mcleod_ideafix » Lun Oct 31, 2011 2:28 am

flopping escribió:Yo lo que no entiendo es si ya hay emuladores de Spectrum con ULA+ y hay documentacion sobre ello, ¿como es que no se ha implementado ya en una FPGA o CPLD?, que yo sepa ya se ha conseguido meter una ULA normal, incluso todo un Spectrum, vale Mcleod, quiza no se perfecto en timings y demas, pero se ha podido meter, asi que no entiendo como hay tanto listo en los foros y nadie ha podido implementar esa ULA+


Hasta hace un año y pico no se ha podido tener documentación fidedigna de cómo funciona la ULA, gracias a Chris Smith. Es cierto que antes de eso alguien se lo podría haber currado a base de consultar la documentación sobre contienda de memoria que hay en la wiki técnica del Spectrum, o mirando esquemáticos de clones, o consultando toda la documentación que el propio Chris escribió sobre el Harlequin, pero no cabe duda que tener todo lo que hace falta en un solo libro es mucho más cómodo.

Por otra parte... me da a mi que no hay tanto listo (de los de verdad) en los foros, o bien que los listos listos están demasiado ocupados como para cacharrear con lógica programable y se conforman con implementar timmings perfectos en emuladores.

Luego hay casos en que alguien presenta un diseño completo, acabado, como es el ZX Badaloc reloaded, con soporte de +3E incluso a través de tarjeta SD... pero sólo da el "ejecutable" y ni mú de los fuentes. El ZX Badaloc reloaded lo pude cargar en mi entrenadora FPGA porque tuve la potra inmensa de tener el mismo entrenador que el italiano éste, pero resulta que ahora tengo una placa Altera DE-115, en la que me cabe el equivalente a 10 ZX Badaloc's, que me implementa una VGA como Dios manda sin hacer las chapucillas a la placa que demanda el ZX Badaloc para tener brillo, en la que tengo un zócalo SD/MMC, entrada y salida de sonido, etc, y resulta que no puedo sintetizar el Badaloc porque no tengo el código fuente :(

Igual lo único que le pasa a Alessandro Poppi (creo que se llama así) es que no considere que su código está finalizado y, al igual que estoy haciendo yo, no lo libere hasta que esté "maduro".
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Scroll por hardware

Mensaje por mcleod_ideafix » Lun Oct 31, 2011 2:44 am

Sobre la ULA que implementé... bueno, pues esto fue lo que hice en un primer intento:

Este es el módulo principal, se llama "ULA" a secas. Tiene como entrada únicamente un reloj de 7MHz, y como salida, las señales RGB y sincronismos. La temporización es compatible PAL. Esta ULA no usa memoria, simplemente muestra un patrón repetitivo de pixeles y colores que genera ella misma:

Código: Seleccionar todo

module ula(
    input clk7,
    output r,
    output g,
    output b,
    output hl,
    output hsync,
    output vsync
    );

   wire [8:0] hc;
   wire [8:0] vc;
   wire enpaper;
   wire enborder;
   wire blanking;
   
   hcounter hcont(
      .clk7(clk7),
      .c(hc)
      );
      
   vcounter vcont(
      .clk(~hsync),
      .c(vc)
      );
      
   syncs sync(
      .hc(hc),
      .vc(vc),
      .hsync(hsync),
      .vsync(vsync),
      .enpaper(enpaper),
      .enborder(enborder),
      .blanking(blanking)
      );
      
   video_output video(
      .vsync(vsync),
      .blanking(blanking),
      .enborder(enborder),
      .enpaper(enpaper),
      .pixel(hc[3]),
      .attr({1'b0,vc[6],~vc[5:3],vc[5:3]}),
      .bordercolor(3'b100),
      .r(r),
      .g(g),
      .b(b),
      .hl(hl)
      );
endmodule


Como se ve, este módulo de alto nivel sólamente contiene instanciaciones a otros módulos más pequeños. Estos son los dos primeros, que implementan el contador de píxeles (hcont) y el de líneas (vcont).

Código: Seleccionar todo

module hcounter(
    input clk7,
    output [8:0] c
    );

   reg [8:0] cnt = 9'b000000000;
   assign c = cnt;
   
   always @(posedge clk7)
      if (cnt==447)
         cnt <= 0;
      else
         cnt <= cnt + 1;
endmodule

module vcounter(
    input clk,
    output [8:0] c
    );

   reg [8:0] cnt = 9'b000000000;
   assign c = cnt;
   always @(posedge clk)
      if (cnt==311)
         cnt <= 0;
      else
         cnt <= cnt + 1;
endmodule


El módulo "syncs" genera algunas señales interesantes, como por ejemplo si estamos en zona de border, paper, retrazo horizontal, etc, según los valores de los contadores X,Y. Este módulo (y los anteriores) no hubiera sido posible de no ser por la información del libro de Chris Smith.

Código: Seleccionar todo

/* Implementa algunas señales de sincronismo y generación de video de acuerdo con las tablas 11-1 y 11-2 */
`define LBORDER2_START 0
`define LBORDER2_END 15
`define PAPER_START 16
`define PAPER_END 271
`define RBORDER_START 272
`define RBORDER_END 319
`define HSYNC_START 344
`define HSYNC_END 375
`define HBLANK_START 320
`define HBLANK_END 415
`define LBORDER1_START 416
`define LBORDER1_END 447
`define VSYNC_START 248
`define VSYNC_END 251
`define VBLANK_START 248
`define VBLANK_END 255
`define TBORDER_START 256
`define TBORDER_END 311
`define DBORDER_START 192
`define DBORDER_END 247

module syncs(
    input [8:0] hc,
    input [8:0] vc,
    output hsync,
    output vsync,
    output enpaper,
    output enborder,
    output blanking
    );

   assign enpaper = (hc>=`PAPER_START && hc<=`PAPER_END && vc>=0 && vc<=191);
   assign enborder = (hc>=`LBORDER1_START && hc<=`LBORDER1_END) ||
                     (hc>=`LBORDER2_START && hc<=`LBORDER2_END) ||
                     (hc>=`RBORDER_START && hc<=`RBORDER_END) ||
                     (vc>=`TBORDER_START && vc<=`TBORDER_END) ||
                     (vc>=`DBORDER_START && vc<=`DBORDER_END);
   assign hsync = !(hc>=`HSYNC_START && hc<=`HSYNC_END);
   assign vsync = !(vc>=`VSYNC_START && vc<=`VSYNC_END);
   assign blanking = (hc>=`HBLANK_START && hc<=`HBLANK_END) || (vc>=`VBLANK_START && vc<=`VBLANK_END);
endmodule


Por último, el módulo "video_output" envía por las salidas RGB las señales pertinentes, según aquello que se esté generando en cada momento:

Código: Seleccionar todo

module video_output(
    input vsync,
    input blanking,
    input enborder,
    input enpaper,
    input pixel,
    input [7:0] attr,
    input [2:0] bordercolor,
    output r,
    output g,
    output b,
    output hl
    );

   wire pixelintrn;
   reg [4:0] flashcnt = 5'b00000;
   
   always @(posedge vsync)
      flashcnt <= flashcnt + 1;
   assign pixelintrn = (attr[7])? flashcnt[4]^pixel : pixel;
   
   wire [2:0] pixelcolor;
   assign pixelcolor = (pixelintrn)? attr[2:0] : attr[5:3];
   
   assign r = (blanking)? 1'b0 : (enborder)? bordercolor[1] : (enpaper)? pixelcolor[1] : 1'b0;
   assign g = (blanking)? 1'b0 : (enborder)? bordercolor[2] : (enpaper)? pixelcolor[2] : 1'b0;
   assign b = (blanking)? 1'b0 : (enborder)? bordercolor[0] : (enpaper)? pixelcolor[0] : 1'b0;
   assign hl = (blanking | enborder | ~enpaper)? 1'b0 : attr[6];
endmodule
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Scroll por hardware

Mensaje por antoniovillena » Lun Oct 31, 2011 4:37 pm

Gracias por publicar tu código McLeod, a ver si cunde el ejemplo porque el único proyecto hardware abierto, al menos que yo conozca, es el Spectrum2010.

Lo que no acabo de comprender es a donde se quiere llegar con el ULA+. Porque según su web, Chris es el único que dispone de una implementación fidedigna en CPLD de un reemplazo de la ULA, y desde 2008. No sé si algún día publicarán el código fuente, pero desde luego si no lo han hecho en tres años no tengo muchas esperanzas. Parece que no quieren vender reemplazos de ULA, sino directamente de ULA+, pero incluso si es así están tardando demasiado en implementar ULA+. Igual me equivoco y quieren compartir los fuentes, pero no estaría de más intentar un reemplazo alternativo totalmente abierto.
Imagen

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Scroll por hardware

Mensaje por mcleod_ideafix » Lun Oct 31, 2011 5:15 pm

antoniovillena escribió:Parece que no quieren vender reemplazos de ULA, sino directamente de ULA+, pero incluso si es así están tardando demasiado en implementar ULA+. Igual me equivoco y quieren compartir los fuentes, pero no estaría de más intentar un reemplazo alternativo totalmente abierto.


No sé... creo que la cosa es mucho más sencilla que todo eso: Chris ahora mismo es el único que tiene implementada una ULA 100% compatible, y ha expresado su deseo de diseñar un reemplazo, pero es que... ¡las cosas de palacio van despacio! Desde que comenzó el Harlequin hasta que dijo que igual publicaba todo lo que sabía en un libro pasaron.... ¿4, 5 años? Desde entonces hasta que salió el libro pasaron otros 2-3 años...

Esto es un hobby, y este hombre tendrá cosas en las que ocuparse para ganarse la vida, así que cuando hay tiempo, se pone. Escribir una descripción en HDL de la ULA o la ULA+ se tarda poco. Afinarla se tarda más o menos según tu pericia, pero cosas las dos que pueden hacerse a coste 0 de material (sup. que tengas una entrenadora de FPGA disponible). Otra cosa muy distinta es armarse de "todo" para diseñar un reemplazo, con su placa y todo. Eso ya no es a coste 0 de material, así que para ponerse con ello no sólamente basta tiempo: hace falta dinero.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Scroll por hardware

Mensaje por antoniovillena » Lun Oct 31, 2011 5:28 pm

McLeod mira estos enlaces:

http://www.zxdesign.info/ULAStableRunning.shtml
http://www.zxdesign.info/ulaReplacementWorks.shtml

El reemplazo existe desde Mayo del 2008. Y es 100% compatible.
Imagen

Avatar de Usuario
flopping
Nonamed
Mensajes: 1093
Registrado: Vie Jul 16, 2010 9:54 am

Re: Scroll por hardware

Mensaje por flopping » Lun Oct 31, 2011 5:34 pm

Yo sigo sin entender, que interes tiene la gente en desarrollar algo y luego esconderlo, como si fuera algo secreto, si a fin de cuentas es solo un reto personal, ya que dudo que alguien gane dinero con ello, bueno quiza algo si se pueda ganar, pero no como para vivir de ello, no creo que de para tanto, si al final somos 4 pirados los que estamos interesados en esos cacharros.

Yo entiendo que el codigo no este acabado, tenga fallos o demas cosas, pero si se publican las fuentes, mucha gente puede ayudar a acabar y perfeccionar esas fuentes, hay veces que uno no sabe empezar o no tiene una idea clara, pero si ya hay algo empezado o medio acabado, muchas veces, surge la inspiracion y esa persona que no sabia como hacer eso, de repente ve como mejorar o acabar algo ya hecho y a veces incluso rehacerlo desde cero, por eso a veces es bueno publicar los avances de alguien, ya que siempre te pueden ayudar o dar ideas, vale tambien hay gente que se aprovecha del trabajo de los demas, pero en este caso no creo que una maquina de hace casi 30 años, de mucho dinero.

Como he comentado anteriormente hay mucho listo que solo hace que decir cosas, yo tambien se decir cosas que quiero que tenga esa ULA+ o una ULA normal, pero eso es muy facil, lo dificil es hacerlo efectivo, por eso digo que hay mucho listillo, que no dicen mas que palabras vacias, pero no hacen nada.

Yo admiro mucho el trabajo de diseño e implementacion que hace la gente, pues es muy complivado y muy trabajoso, maxime cuando no existe mucha informacion al respecto, por lo que tengo visto, en España y en general los españoles estan muy metidos en harina y desarrollan bastante mas que muchos extranjeros, que solo hacen que decir, bla, bla, bla...

Ojala que la gente se de cuenta que hacer las cosas individualmente, esta muy bien, como satisfaccion personal, pero si dejas la puerta abierta a que te ayuden, seguro que la cosa sale mucho mejor y en menos tiempo, si los que saben del tema de la ULA y ULA+ se organizaran y desarrollaran juntos, seguro que esos proyectos estarian ya realizados y los podriamos disfrutar todos, pero parece que existe un secretismo total sobre lo que se hace y no entiendo el por que, pero bueno espero que algun dia no muy lejano la gente se de cuenta de que eso es un error y se abran mas a compartir y a desarrollar entre todos, ¿no os parece un razonamiento logico?.

En fin, espero que por lo menos a nivel de usuarios españoles cunda el ejemplo de Mc_leod que si se lo pides te ofrece ayuda y pone a disposicion de todos muchos de sus diseños y trabajos, sin ningun animo de lucro y para que la gente aprenda y entienda muchas veces lo que tiene entre manos, yo he aprendido de el algunas cosas y espero seguir aprendiendo, muchas gracias a todos los que haceis posible el sueño de tener un spectrum mejorado y mas acorde a los tiempos que corren, un gran ejemplo de esto lo tenemos en el divide, un excelente interface a disposicon de quien lo quiera y mejorable por quiebn quiera, tal como ha hecho y sigue haciendolo velesoft, una persona estupenda tambien, pues pone sus diseños y trabajos a libre disposicion de quien los necesite, ojala cundiera el ejemplo.

Pues nada mas, no me quiero enrollar mas, ya que podria estar asi horas, asi que seguid asi muchachos, que con gente como vosotros, los demas aprendemos y mejoramos dia a dia, gracias y salu2.

Pd. Ojala se implementara ese scroll por hardware y esa ULA+ incluso con el scroll por hardware, yo poco puedo ofrecer de programacion, soy mas de hardware, pero si se necesita mi ayuda, la pongo a disposicion e intentaria ayudar en lo que pudiera.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, debido a la esquizofrenia paranoide que tengo.
(C) 1982-2016, 34 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente"

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Scroll por hardware

Mensaje por mcleod_ideafix » Lun Oct 31, 2011 6:33 pm

antoniovillena escribió:McLeod mira estos enlaces:


Los conozco: son los prototipos de la ULA que Chris hizo en una XC95144XL. Son eso, prototipos. No funcionan como reemplazos directos de la ULA. Es más: comentaba que había un problema de ruido en las pistas y que hacía que se bloqueara el equipo cada dos por tres.

Para que eso que has visto se convierta en un reemplazo directo de la ULA aún faltaría bastante:
- Resolver los problemas de ruido.
- Añadir la circuitería para obtener una señal YUV "trucada" tal y como espera el codificador LM1889.
- Reducir toda la circuitería para que quepa en el espacio reducido de la carcasa de un gomas.

De estos tres puntos, el 2 es el más truculento, ya que el gomas y el Plus usan una señal YUV no estándar: la señal Y está invertida, y una de las señales U ó V, no sé cuál es, se invierte en líneas alternas. Esto se hizo así por una razón (otra más) de abaratamiento: resulta que los codificadores NTSC eran más baratos que los PAL (si es que los había en formato chip en aquella época), así que en Sinclair usaron un codificador NTSC "overclockeado" de 3,5 a 4,43MHz. La diferencia entre NTSC y PAL es que, además de que la frecuencia de color es distinta, las señales de color van invertidas en líneas alternas. Como el codificador NTSC no hace eso, pues la ULA le da ya las señales invertidas cuando deben estarlo, así que puedes usar un codificador NTSC para hacer todo el trabajo.
Ah! Y todo esto ya es más complicado de meter en una CPLD (por no decir imposible) ya que se trata de electrónica analógica; cosa que la ULA sí podía hacer, pero una CPLD o una FPGA no (no sin ayuda).

En resumen: lo que tienes ahí es una prueba de concepto de que la versión en CPLD de la ULA funciona en un Spectrum real. Lo que has visto NO ES aún un reemplazo de la ULA.

De hecho, si yo me planteara diseñar un reemplazo para la ULA (no la ULA+) seguramente pasaría de la señal YUV original y sacaría RGB y con un AD729, señal de video compuesto. Claro que eso significaría que el cacharrito que hiciera no bastaría sólamente con pincharlo en lugar de la ULA: habría al menos que soldar un cablecillo con la señal de video compuesto hasta la entrada del modulador... pero entonces ya no sería un reemplazo de "quita y pon" y lo de soldar echaría para atrás a algunos usuarios.

Pero por otra parte... lo de que estén esperando a tener la ULA+ hecha y vender ese diseño en lugar de la ULA estándar... pues tiene su lógica, sí. Me pregunto qué pasaría si alguien mañana sacara un reemplazo para la ULA como el que acabo de describir, sin ULA+, pero ULA al fin y al cabo... ¿aparecerían por arte de magia todo el material, esquemas y código que no se ha publicado, clamando que "ellos" lo consiguieron antes? (si alguien no sabe por dónde voy... que miren el hlo de ZdP de cuando conseguí implementar el chip ACID en una CPLD :D )
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
flopping
Nonamed
Mensajes: 1093
Registrado: Vie Jul 16, 2010 9:54 am

Re: Scroll por hardware

Mensaje por flopping » Lun Oct 31, 2011 7:07 pm

mcleod_ideafix escribió:
De hecho, si yo me planteara diseñar un reemplazo para la ULA (no la ULA+) seguramente pasaría de la señal YUV original y sacaría RGB y con un AD729, señal de video compuesto. Claro que eso significaría que el cacharrito que hiciera no bastaría sólamente con pincharlo en lugar de la ULA: habría al menos que soldar un cablecillo con la señal de video compuesto hasta la entrada del modulador... pero entonces ya no sería un reemplazo de "quita y pon" y lo de soldar echaría para atrás a algunos usuarios.

Pero por otra parte... lo de que estén esperando a tener la ULA+ hecha y vender ese diseño en lugar de la ULA estándar... pues tiene su lógica, sí. Me pregunto qué pasaría si alguien mañana sacara un reemplazo para la ULA como el que acabo de describir, sin ULA+, pero ULA al fin y al cabo... ¿aparecerían por arte de magia todo el material, esquemas y código que no se ha publicado, clamando que "ellos" lo consiguieron antes? (si alguien no sabe por dónde voy... que miren el hlo de ZdP de cuando conseguí implementar el chip ACID en una CPLD :D )


Lo de usar RGB en vez de YUV es una muy buena mejora, y como bien dices mas facil de implementar, creo que lo de soldar aunque solo fuera un cable, no seria gran problema, mucha gente sabe soldar y los que no, conocen a alguien que se lo haria, por lo que no seria un gran problema, si eso se hiciera seria fantastico.

Como bien dices, en cuanto alguien saca algo nuevo, los listos de turno empiezan a decir que si yo lo tenia antes, que el mio es mejor y volvemos otra vez al bla, bla, bla....¡JODER si tan bueno era y lo tenias hace tiempo por que cojon.. no lo has sacado antes!, en fin que como bien dices Mc_leod, siempre hay alguien que no hace mas que intentar, que no siempre se consigue, echar por tierra tu trabajo, pero bueno listillos y envidiosos hay en todas partes, es algo con lo que tenemos que vivir, aunque si sacaras un reemplazo de una ULA, no creo que salieran muchos esquemas ni gente diciendo que eso ya lo tenian, como bien sabes, pues lo he dicho en alguna ocasion, uno de mis proyectos, de momento es solo una idea, es hacer una ula con electronica discreta, dificil, si mucho, que seria voluminosa la placa, tambien lo se, pero para eso existen los smd y un largo etc de problemas, pero es mi idea y mi ilusion, quiza no pueda hacerlo nunca o quiza si, pero por lo menos lo intentare, tu idea es la implementacion con CPLD o FPGA, que como bien sabes no estoy en contra, al reves pienso que sera mas facil y factible hacerlo asi, pero son proyectos distintos con un fin comun, un reemplazo de la ULA cuasi-directo o directo, pero para eso aun queda mucho, con tu capacidad es mas factible que implementes una ULA antes que cualquier otro la desarrolle, pues no veo yo que nadie tenga en mente ese reemplazo y mucho menos una ULA+, en fin, paciencia y que cada uno desarrolle y saque a la luz lo que crea conveniente, pero es un error el esconder informacion o avances en este tipo de desarrollos o proyectos, maxime cuando esta industria esta obsoleta y como he comentado somos 4 gatos los interesados en maquinas antiguas, no creo que nadie haga un dineral vendiendo ULA´s o ULA's+, quiza es por eso el que no se ha desarrollado aun, por que no hay gente altruistas, solo intereses en hacer dinero, es triste pero creo que es asi.

Bueno siento otra vez el rollo que he soltado, pero es que estos temas me ponen enfermo, yo que siempre he dispuesto mi informacion y mis conocimientos sin ningun tipo de interes y viendo lo que hay por hay, se le quitan a uno las ganas de hacer nada, bueno pues nada gracias por aguantar este discurso, salu2.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, debido a la esquizofrenia paranoide que tengo.
(C) 1982-2016, 34 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente"

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Scroll por hardware

Mensaje por antoniovillena » Lun Oct 31, 2011 11:22 pm

- Resolver los problemas de ruido.
- Añadir la circuitería para obtener una señal YUV "trucada" tal y como espera el codificador LM1889.
- Reducir toda la circuitería para que quepa en el espacio reducido de la carcasa de un gomas.


Los problemas de ruído parece que están resueltos en la última versión. Además dice que ha podido probar 4 juegos sin ningún problema.

Lo de reducir el espacio para que quepa en un gomas es complicadete por el poco espacio que hay, aunque supongo que en modelos plus y 128K se podría hacer. Se supone que una vez esté todo testeado se pueden encargar placas pequeñas con el CPLD ya soldado y ocupando un mínimo espacio, algo parecido a los BASIC STAMP.

El problema de la circuitería analógica es lo que queda por resolver. Las salidas YUV a generar son cuasidigitales, fíjate en las señales leídas en el osciloscopio: http://www.speccy.org/trastero/cosas/dr ... en_mal.htm.

Así que si no me equivoco se puede implementar completamente con CPLD usando 6 pines para generar las 3 señales (conversores DAC 2 bit en escalera R-2R). Vamos que con unas pocas resistencias SMD se soluciona sin agrandar la placa.

En lo último tienes toda la razón. Vamos que aparecerían por arte de magia todos los diseños que están sin publicar. Pero bueno peor es no hacer nada y tirar a la basura todos los spectrum con ULAs averiadas.

En resumen, aunque la versión que muestra Chris no sea un reemplazo perfecto, le falta muy poco para serlo y si ha llegado tan lejos me extraña que no lo haya rematado.

Y a flopping, a ver a mí no me molesta el hecho de que quieran sacarle beneficio económico. Lo que me mosquea es el vaporware que están generando con lo del ULA+, cuando ya podrían estar disponibles remplazos ULA normales. Vamos que estoy seguro que si Chris publica el código VHDL de dicho experimento, en poco tiempo habría un reemplazo disponible. Y hay empresas por internet que te venden placas montadas, por lo que si se pide un lote entre varios, casi seguro que por menos de 10 euros es posible disponer del reemplazo.
Imagen

Avatar de Usuario
flopping
Nonamed
Mensajes: 1093
Registrado: Vie Jul 16, 2010 9:54 am

Re: Scroll por hardware

Mensaje por flopping » Mar Nov 01, 2011 12:14 am

No, si a mi me parece perfecto que se quiera recompensar el trabajo de uno mismo vendiendo lo que tanto trabajo le ha costado diseñar, a un precio razonable claro, si no hay tenemos el libro de cris smith sobre la ULA, lo que no me parece tan normal es que si no se sacan un paston, no hay nada que vender, ni diseñar, y muchas veces ni se intenta.

Es evidente que quien quiera ganarse la vida con esto, lo tiene crudo, pues no hay mercado, por eso es normal que la gente lo haga por reto personal y a ratos perdidos, como si fuera un hobby, pero es que hay mucho listo de boca, que dice y luego no hace nada, eso si que me fastidia, y como comentaba antes, si hubiera un gran mercado y una ULA ó ULA+ se pudiera vender bien, seguro que la gente se daba de ostias por sacar su diseño antes que nadie, pero mientras eso no sea a si, ni sera, pues no hay gente suficiente, tendremos que conformarnos con soñar e ir recogiendo las migajas que van soltando poco a poco, solo espero que algun dia, no muy lejano por favor, tengamos el pan entero, ya que si no al final la gente perdera la ilusion por sus maquinas y eso que aqui solo estamos hablando de la ULA del spectrum, pero hay muchas mas maquinas que tienen ULA´s, ASIC o circuitos integrados especificos imposibles de encontrar hoy dia en tiendas, siempre se podran implementar si se conoce su descripcion y funcionamiento, pero creo que muchos de ellos se perderan por falta de ganas o de vision de negocio, si no hay dinero de por medio, mucha gente no mueve un dedo, pero bueno eso es lo que hay, habra que conformarse con la gente que hace cosas desinteresadamente, que la hay y ademas muy buena, sin ir mas lejos Mc_leod y antoniovillena, por poner un par de ejemplos y valga la "rebuznancia" que cunda el ejemplo, salu2.
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, debido a la esquizofrenia paranoide que tengo.
(C) 1982-2016, 34 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente"

Z80user
Manic Miner
Mensajes: 215
Registrado: Vie Jun 08, 2007 9:42 am
Ubicación: En un lugar de la mancha
Contactar:

Re: Scroll por hardware

Mensaje por Z80user » Mar Nov 01, 2011 12:27 am

En el SpeccyBob, que creo que es anterior al badalog (al menos lo descubri antes) estan los esquemas, para hacerlo con logica de la serie 74...
Hace poco, encontre la version de 128KB del SpeccyBob, el caso es que me puse mas o menos a escribir el codigo para describir el funcionamiento, con ecuaciones, y la verdad, no me salieron demasiados flip flops, al menos no demasiados, como para escribir la parte "grafica", y los divisores de frecuencia, que activan las diversas señales, aunque no llege a escribir los flip flop tipo JK, el mayor problema, era que ya me estaba quedando sin patillas, de las 38 disponibles.
Lo hize solo, como posibilidad, de comprarme un chip para poder programarlo y ver si era factible hacer el Speccybob con mucha menos circuiteria, y escribir lo mas complicado y que mas chips tenia e integrarlo en el mismo chip.
Pero no tengo, el suficiente material, como para poder hacerlo completamente, tengo que buscar una tienda en donde poder comprar las piezas, y hacer la "lista de la compra". Lo que me faltaria es tiempo para poder hacerlo :-)
Asi de hardware me gustaria hacer algo, pero por falta de tiempo, siempre lo voy dejando, en la uni aprendi VHDL, y los ficheros de programacion de las GALs de DivIDE son faciles de leer (el que contienen unicamente 0 y 1)
---
Como ULA+ o similar, yo lo haria mas en placa de expansion, con memoria RAM, en la que se volcase el contenido de la memoria fisica del Spectrum en un chip de 16KB de RAM, para guardar la memoria de video basica y la Shadow.
Tendria que tener el generador de reloj.
Generador de interupciones cada 69888 o 70908 T-States Spectrum 48K/128K (sin/con shadow ram, por esto son las 16 KB).
Lectura de teclado (40 flip flops) con ayuda de un PIC para leer desde un puerto PS/2 (por aprobechar software)
Mapeado de puertos, de escritura y lectura solo el #FE, para leer desde cinta y teclado unicamente.
La memoria en la placa, seria una copia de la memoria en el Spectrum.

*** esto para usarlo en equipos con ULA dañada.

La idea de poner el generador de interupciones seleccionable, es para poder utilizar programas para un 128K en un 48K, con ciertas limitaciones, maximo 48K de memoria. (Otra idea peregrina, como la del scroll :-D )
-------
El por lo que no vea bien la gente el usar el scroll por hardware, puede ser porque en un Spectrum fisico, no se puede implementar facilmente.
La ULA+, comparada con la ULA, solo mejora en un emulador, en un Spectrum fisico, no hay variaciones entre utilizar un programa para una ULA o para una ULA+, simplemente ignora lo que se le manda a la ULA+, pero sigue siendo jugable.
No he mirado la documentacion de la ULA+, pero por lo que se, es como decirle al emulador, que cambie los colores que tiene que mostrar, por los que el programador, ha dicho.
Viene a ser lo que en PC a un RAMDAC, que tenian las primeras VGA, o el cambio de EGA/CGA a VGA, el MCGA no se de cabeza en que lugar quedaba.

Los 24 bytes que dices, se podrian omitir, haciendo que la ultima columna, no se lea, he visto el "efecto mario" pero no me he percatado del todo, del efecto.
La mejor manera que veo de implementarlo, es poner un retardo en lo que tardan dos bytes en ser interpretados
Como lo hace el SpeccyBob
paso 1 = Leer atributos
paso 2 = Leer bitmap y pasar el bitmap y los atributos, para interpretar
paso 3 a 8 = no hacer nada
Como lo deberia hacer el Scroll por hardware
paso 1 = Leer atributos
paso 2 = Leer bitmap
paso 3 = pasar el bitmap y los atributos, para interpretar
paso 4 a 8 = no hacer nada

Los tiempos de hardware, serian identicos, con este cambio (en la parte del Spectrum), en la pantalla estarian desplazados a la derecha (de 0 a 7 pixels)
Lo mas importante, la diferencia entre utilizar el hardware, y no utilizarlo, es que el Scroll, se mueve mas bruscamente.
Para que la gente vea la diferencia, programa el "efecto mario", en modo rotativo, es decir que haga un scroll completo con y sin el efecto (para ver la diferencia entre ambos), asi la gente no podra decir que es algo complicado de entender, y los "puristas" podran verlo como algo adicional como la ULA+
Si esta el SH, tendremos un Scroll suave. Si no esta el SH, tendremos un Scroll brusco.
Algo parecido al ULA+
Si esta renemos X colores mas al gusto en el Spectrum, si no lo esta tenemos los de siempre.
Si vas a tirar Hardware, primero pregunta si alguien lo puede recuperar.
No abandones un ordenador en un vertedero, donalo a alguien.

Responder

¿Quién está conectado?

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