Arcades en ZXUNO

Cores de los que existe documentación pero no se ha intentado aún portarlos al ZX-Uno / Cores for which documentation or source code exists, but no ports have been attempted to the ZX-Uno yet
Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Arcades en ZXUNO

Mensaje por jepalza » 06 Nov 2015, 08:59

Ya hemos visto que Quest se ha dedicado a meter todos los sistemas 8 bits que ha podido, dejando poco para la imaginación. (solo se ha dejado uno en el tintero , el CPC, que si nos ponemos a la par, seguro que lo sacamos ;-) )

Así que, ni corto ni perezoso, me he dedicado a meter todos los arcades que he podido encontrar. No son muchos (solo 7 u 8) pero algunos tienen su variante hardware compatible, con lo que el número de juegos crece hasta unos 15 en total (por ejemplo, el PACMAN admite a su vez el PENGO).

Aún está MUY verde, necesito muchos días o semanas para completar el trabajo, pero ahí ando, poco a poco. Ya he logrado meter el SPACE INVADERS , el PACMAN y el GALAXIAN. Ademas, en su día ya hice el LADY BUG, pero lo he retomado, para que admita otros como el SNAPJACK). Tengo en el tintero el hardware del FROGGER, y varios mas.

En realidad, lo de adaptar un arcade a otro, no es ningún misterio, en muchos casos, solo es probar las nuevas roms de la variante, y ver dónde falla, que en casos muy simples, puede ser que el mando funciona al revés, o que el "insert coin" está cambiado con el "test board" o cosas de esas, pero en lo básico, la mayoría de las veces está funcionando sin apenas cambios. El caso mas complicado es el del PENGO, que cambian varias cosas, pero hay guias suficientes (y cores ya diseñados para el Papilio, en los que me baso actualmente) que ayudan bastante.

Tengo problemas importantes con los pines, por que algunos juegos necesitan un botón de disparo (galaxian, space invaders) pero también uno para la moneda y otro para comenzar el juego. En estos casos estoy probando a que se inicie el juego nada mas meter moneda (en el PACMAN ya lo he logrado) ahorrando un botón, con lo cual, con el mando del ZXUNO, tenemos la cruceta, el botón de disparo y el de "meter moneda+start". Es que, sino consigo hacer esto, sería obligatorio meter un PIN externo con un botón extra, y eso lo hace incómodo y poco natural.

En otros casos, como el del GALAXIAN, la imágen me sale duplicada, y aún no he dado con el fallo (¿alguien sabe por qué es? :?: )

También tengo que resolver el tema de los colores en varios juegos, por que la mayoría hace uso de 4bits de color, y nosotros solo tenemos 3, con lo cual, las imágenes salen "lechosas" (se ve en las fotos con exceso de iluminación).

Uno de los problemas de los arcades que he elegido (no ha sido por gusto, es lo que hay por la red) es que son el 95% de pantalla vertical, por lo que hay que girar el monitor. Como véis en las fotos, yo no tengo problema, tengo un minimonitor de 640x480 que permite ponerse en vertical.

En definitiva, cuando tenga varios ya hechos, publicaré los cores, y un fichero BAT para meter las ROM , ya que es ilegal publicarlas (a no ser que alguien diga lo contrario)

Imagen

Imagen

Nota: el space invaders sale girado 180º, es que no me apatecía dar la vuelta a la pantalla
Imagen

Avatar de Usuario
Quest
Mensajes: 900
Registrado: 27 Sep 2015, 00:20

Re: Arcades en ZXUNO

Mensaje por Quest » 06 Nov 2015, 09:37

Gracias, jepalza :)

El de PACMAN lo porté en verano, pero no lo subí, porque pensé que no merecía la pena al ser un vertical y estar en VGA. Es casi imposible jugar sin girarlo, y lo normal es que se tenga conectado el zx-uno a una TV (posiblemente grande). Si consigues "darle la vuelta", lo que imagino que será un quebradero de cabeza por tener que cambiar todo el código de generación de pantalla (y probablemente escalar), y de paso que salga por RGB 15khz / csync, entonces sería genial.

Como yo no tenía ni idea de hacer eso , pues... :silbando:
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

enkonsierto
Mensajes: 80
Registrado: 25 Oct 2015, 07:49

Re: Arcades en ZXUNO

Mensaje por enkonsierto » 06 Nov 2015, 09:40

el bomb jack por favor!!!

http://papilio.cc/index.php?n=Playground.BombJack

Si te digo la verdad, a mi no me importa que la imagen salga en vertical. Es más fiel al arcade.

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Arcades en ZXUNO

Mensaje por jepalza » 06 Nov 2015, 10:03

enkonsierto escribió:el bomb jack por favor!!!

http://papilio.cc/index.php?n=Playground.BombJack

Si te digo la verdad, a mi no me importa que la imagen salga en vertical. Es más fiel al arcade.
Lo tengo ya portado, pero los gráficos no salen. Solo se ven los bloques de color que los contienen, por eso no he puesto foto.
La lista completa de los que ya he probado es esta:
(pero solo funcionan bien el PACMAN, el INVADERS, EL PENGO, el LADYBUG y el GALAXIAN (con doble imágen) , el resto fallan por algo gordo por ahora)

LADYBUG
--LADY BUG
--DORODON
--SNAPJACK
--COSMIC AVENGER

PACMAN
--PACMAN
--CRUSH 2
--GORKANS
--LIZWIZ
--PENGO (HARDWARE MODIFICADO)

SPACE INVADERS
--SPACE INVADERS
--ALIEN INVADERS
--SEARTH INVADERS

STERN SCRAMBLE
--STERN SCRAMBLE
--AMIDAR (Plays OK but no sound)
--FROGGER (SEGA)
--STERN THE END (The game plays but there is no sound and the player's missile is invisible)
--THE END (The game plays but there is no sound and the player's missile is invisible)

GALAXIAN
--MR. DO'S NIGHT (SE QUEDA EN EL ARRANQUE)
--MOONCRESTA

VARIOS INDEPENDIENTES:
--BOMBJACK
--PHOENIX
--GALAGA


EDITO: ya he logrado que funcione BIEN el GALAXIAN (¡¡¡¡¡ "MI" juego favorito desde crío!!! :chocala!: )

enkonsierto
Mensajes: 80
Registrado: 25 Oct 2015, 07:49

Re: Arcades en ZXUNO

Mensaje por enkonsierto » 06 Nov 2015, 10:37

Fabulosas noticias. :D Y gran lista de arcades.
Imagino que poco a poco se podrán solucionar los problemas.

Avatar de Usuario
mcleod_ideafix
Mensajes: 828
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Arcades en ZXUNO

Mensaje por mcleod_ideafix » 06 Nov 2015, 18:05

Para el tema de los 4 bits de color: debería bastar con usar los 3 bits más significativos de esos 4, descartando el menos significativo.
Para el tema de la doble imagen: tiene toda la pinta de que la sección de video de ese core está generando una señal con timings VGA. De hecho, una imagen así es lo que verías si usas tu core de Spectrum con VGA, pero conectando la salida a un euroconector en lugar de a un monitor VGA.

Y ahora aparte de todo esto..... jooooooooer! Nada menos que 15 arcades! La leche! Mira: se me ocurre que podrías usar un core de teclado PS/2 y detectar sólo las teclas que te interesan.

Hay un core PS/2 sencillo en el core testpines, dentro de la carpeta spectrum_v2_spartan6. El fichero que necesitas es ps2_port.v

En sistema.v tienes un ejemplo de como podría usarse. En concreto, me refiero a esta porción de código:

Código: Seleccionar todo

    wire [7:0] tecla;
    wire nueva_tecla, soltada, extendida;
    
	ps2_port el_teclado (
		.clk(clk),
		.enable_rcv(1'b1),
		.ps2clk_ext(clkps2),
		.ps2data_ext(dataps2),
		.kb_interrupt(nueva_tecla),
		.scancode(tecla),
		.released(soltada),
		.extended(extendida)
    );
Ahora, para convertir pulsaciones de tecla en señales de moneda, player 1, etc, de la recreativa, haz tal que así: voy a suponer que esas señales son activas a nivel bajo.

Código: Seleccionar todo

// Registros que conectaremos a las señales de echar moneda, player 1 y player 2. Por defecto valen 1 (inactivos)
reg coin = 1'b1;
reg player1 = 1'b1;
reg player2 = 1'b1;

// Instancio el teclado
wire [7:0] tecla;
wire nueva_tecla, soltada, extendida;
    
ps2_port el_teclado (
	.clk(clk),
	.enable_rcv(1'b1),
	.ps2clk_ext(clkps2),
	.ps2data_ext(dataps2),
	.kb_interrupt(nueva_tecla),
	.scancode(tecla),
	.released(soltada),
	.extended(extendida)
);

// Cambio los valores de los registros en función de la tecla pulsada o soltada.
// Usaré: '1' para player1, '2' para player2, y el '5' para echar moneda (como en el MAME)
// Los scan codes de estas teclas son:
// Tecla 1: 0x16
// Tecla 2: 0x1E
// Tecla 5: 0x2E
// Consultar: http://www.computer-engineering.org/ps2keyboard/scancodes2.html

always @(posedge clk) begin
  if (nueva_tecla == 1'b1) begin
    // PLAYER 1
    if (extendida == 1'b0 && tecla == 8'h16) begin
      if (soltada == 1'b0)
        player1 <= 1'b0;  // si se pulso 1, activo player1
      else
        player1 <= 1'b1; // si se soltó 1 lo desactivo
    end
    // PLAYER 2
    if (extendida == 1'b0 && tecla == 8'h1E) begin
      if (soltada == 1'b0)
        player2 <= 1'b0;  // si se pulso 2, activo player2
      else
        player2 <= 1'b1; // si se soltó 2 lo desactivo
    end
    // COIN
    if (extendida == 1'b0 && tecla == 8'h2E) begin
      if (soltada == 1'b0)
        coin <= 1'b0;  // si se pulso 5, activo coin
      else
        coin <= 1'b1; // si se soltó 5 lo desactivo
    end
  end
end
Es más: podrías prescindir del joystick y usar sólo el teclado para jugar, añadiendo los cursores y la tecla CTRL izquierda para jugar, como el MAME, simplemente añadiendo un IF por cada tecla. Por ejemplo, para la tecla cursor arriba, que es una tecla extendida (comienza por el código E0) harías esto:

Código: Seleccionar todo

    // ARRIBA (código E0 75)
    if (extendida == 1'b1 && tecla == 8'h75) begin
      if (soltada == 1'b0)
        up <= 1'b0;  // si se pulso cursor arriba, activo señal ARRIBA
      else
        up <= 1'b1; // si se soltó cursor arriba, la desactivo
    end
Todo lo anterior, para que esté de acuerdo a la filosofía del diseño hardware modular, lo pondrías en un módulo que tuviera como entradas las señales del teclado, y como salidas las señales de control (arriba, abajo, player1, coin, disparo, etc) al resto del diseño. Algo así (para un control completo):

Código: Seleccionar todo

module control_por_teclado (
  input wire clk,
  input wire clkps2,
  input wire dataps2,
  output reg up,
  output reg down,
  output reg left,
  output reg right,
  output reg fire1,
  output reg fire2,
  output reg coina,
  output reg coinb,
  output reg player1,
  output reg player2,
  output reg testmode
  );

  // Como las salidas son "reg" ya cuentan como registros. No hay que volver a definirlas, pero sí darles un valor inicial a "desactivado"
  initial begin
    up = 1'b1;
    down = 1'b1;
    left = 1'b1;
    down = 1'b1;
    left = 1'b1;
    right = 1'b1;
    fire1 = 1'b1;
    fire2 = 1'b1;
    coina = 1'b1;
    coinb = 1'b1;
    player1 = 1'b1;
    player2 = 1'b1;
    testmode = 1'b1;
  end

  // Aqui instancias el teclado.....


  // Y aquí pones tu always @(posedge...) con los IF's uno para cada tecla que quieras controlar


enmodule

http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Arcades en ZXUNO

Mensaje por jepalza » 06 Nov 2015, 19:37

Gracias por las explicaciones, Mcleod_Ideafix, miraré el tema del PS2, y veré de dejar ambos sistemas, el teclado y el mando. Lo de la VGA del Galaxian lo he resuelto, pero si te soy sincero, no sé como. Me he puesto a toquetear todo lo que veía que hacía relación con el vídeo, y en una de esas pruebas, he conseguido que funcione.

Lo de los colores, he visto dos métodos, uno quita el bit mas significativo, y el otro el menos. Yo por ahora, estoy quitando el mas significativo, y no parece mal resultado. Mis ojos no están entrenados para distinguir faltas en los colores.

Tengo listo un arcade que voy a publicar en breve, con ROMs incluídas, ya que, según he leído, su autor dió permiso para ello. De ese modo, ya se puede jugar a un arcade directamente. El resto, a pesar de que tengo ya funcionando varios, necesito calma para hacer unos BAT para pegar las ROMS en el sitio adecuado, y lleva mucho tiempo ir una a una cada variante. Ya lo iré haciendo día a día, y cuando tenga varios, los pondré.

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Arcades en ZXUNO

Mensaje por jepalza » 07 Nov 2015, 10:04

Os dejo aquí adjunto, el BIT y el MCS del único juego que por ahora se puede distribuir sin problemas legales, el "MR. Do's! Nighmare", que es una versión "homebrew" moderna de la saga "Mr. Do's!" pero usando el hardware del Galaxian.
En este enlace se permite su distribución:
http://www.gadgetfactory.net/2012/06/cr ... io-arcade/

EL juego lo he trampeado para que se inicie nada mas meter moneda. Se necesita un mando de dos botones.
Imagen
Adjuntos
mrdo_nightmare.rar
(171.47 KiB) Descargado 173 veces

Avatar de Usuario
Hark0
Mensajes: 683
Registrado: 27 Sep 2015, 00:31
Ubicación: Cornellà de Llobregat - BCN
Contactar:

Re: Arcades en ZXUNO

Mensaje por Hark0 » 10 Nov 2015, 06:48

1942 por favoooor :maestro: :maestro: :maestro: :maestro:
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
Radastan
Mensajes: 386
Registrado: 05 Oct 2015, 14:39

Re: Arcades en ZXUNO

Mensaje por Radastan » 10 Nov 2015, 08:52

Ya puestos el Black Tiger, que está basado en Z80. Si prescindes del sonido sólo te hace falta un core de Z80, el sonido ya necesito de otro más.

Responder