¡Concurso clásico!

Pues bien, viendo que aquí se hace algún que otro concurso de programación, he decido algo que nadie ha querido hacer por ahora. Un concurso de programación de juegos para consolas clásicas.

Estas son las bases:

- El juego ha de ser programado para uno de estos sistemas:
- Atari 2600.
- MSX.
- Nintendo Entertaiment System.
- SEGA Master System.
- SEGA Mega Drive, se puede usar también MegaCD y 32X conjuntamente.
- Nintendo 64.
- Super Nintendo Entertaiment System.
- Neo-Geo AES / MVS / CD.
- SEGA Saturn.
- Sony PlayStation.
- Nintendo GameBoy DMG.
- SEGA GameGear.

- El juego se ha de programar en lenguaje ensamblador ó en C. Es decir, no podemos usar BASIC, ni otras cosas raras.

- El juego ha de funcionar sin ningún problema por lo mínimo en los tres emuladores más importantes de su sistema.

- El juego no ha de usar ningún tipo de hardware adicional (referiendome a cartuchos adicionales, chips DSP, etc... No 32X, 64DD, etc...).

Bueno, ¡a ver quién se anima!

Saludos :)

Si tenéis alguna sugerencia la decís.
Me parece una buena idea, pero voy a hacer un par de sugeréncias:

1.La gente que trabaja gratis no abunda y si con premios hay poca participación en concursos de programación... sin premio no quiero pensarlo xDD

2.Poner los 3 emuladores que se usarán con cada consola (hay emulador de la Saturn?!?!!? [amor] ahora lo buscaré xD)

3.Ofrecer links a páginas con info de cómo programar para las consolas y cómo compilar las roms

Esas eran mis sugeréncias, espero que salga adelante la idea y mucha gente participe (como en alguna rule SDL o algo similar ahi estaré xD). Suerte!
yo creo que ni aún con premios... pero bueno por intentarlo lo ideal sería difundirlo más
Yo la verdad, creo que la gracia de programar para consolas es poder ejecutar los programas en ellas, y como ya no dispongo de ninguna de las citadas, pues pienso que para programar para un emulador , programo mejor para la plataforma que ejecuta el emulador y puedo hacer mejores cosas.

Vamos que veo una tontería lidiar con las limtaciones de la consola que sea para después ejecutarlo en el pc.

Esa es mi opinión, pero de todas maneras es una buena iniciativa.
zestt escribió:Me parece una buena idea, pero voy a hacer un par de sugeréncias:

1.La gente que trabaja gratis no abunda y si con premios hay poca participación en concursos de programación... sin premio no quiero pensarlo xDD

2.Poner los 3 emuladores que se usarán con cada consola (hay emulador de la Saturn?!?!!? [amor] ahora lo buscaré xD)

3.Ofrecer links a páginas con info de cómo programar para las consolas y cómo compilar las roms

Esas eran mis sugeréncias, espero que salga adelante la idea y mucha gente participe (como en alguna rule SDL o algo similar ahi estaré xD). Suerte!


Como premio yo creo que estaría bien, si el juego es para una consola de cartucho, un cartucho con el juego para tenerlo físicamente :)

Los emuladores que se usen es cosa tuya, eso no es más que para comprobar que esté bien programado, si funciona en la consola real ya no es necesario probar emuladores (Satourne, SSF, y el otro no recuerdo el nombre ;)).

Se supone que has de saber programar para la consola para la que vas a hacer el juego. Hombre, creo yo, y si no, menos Nintendo 64, con buscar en Google nombre dev ya sobra (genesis dev, msx dev, gb dev, etc...).

Yo voy a utilizar la Mega Drive, ahora en un momento posteo lo que llevo escrito (muy poco xDD), unas utilidades para diversas funciones de la MD. Un problema es que la MD no tiene ningún header y has de hacerlo todo tú.

Bueno, saludos.


EDIT: Aquí esas pequeñas utilidades, para que todos las usen en su código ;)

/*
   Bleach the last fighter para Mega Drive
   (C) Andoba 2007 (Cesar Gonzalez Segura)
   Compilando con XGCC
   Bleach (C) Kite Tubo, Jump Magazine.
   Mega Drive (C) Sega Enterprises Ltd.
*/

#include "bleach.h"


void InitVDP()
{
   register unsigned short pw;
   pw = (unsigned short *) 0xC00000;
   
   *pw = 0x8014;
   *pw = 0x8174;
    *pw = 0x8238;
    *pw = 0x8338;
    *pw = 0x8406;
    *pw = 0x857F;
    *pw = 0x8600;
    *pw = 0x8700;
    *pw = 0x8800;
    *pw = 0x8900;
    *pw = 0x8a08;
    *pw = 0x8b00;
    *pw = 0x8c00;
    *pw = 0x8d08;
    *pw = 0x8e00;
    *pw = 0x8f02;
    *pw = 0x9000;
    *pw = 0x9100;
    *pw = 0x929f;
}




void InitJoypad(unsigned short cm_1)
{
   register unsigned char *pb;
   
   if (cm_1 == 0x01)
   {
      pb = (unsigned char *) 0xA10009;
      *pb = 0x40;
      pb += 2;
      *pb = 0x40;
      pb += 2;
      *pb = 0x40;
      break;
   }
   else if (cm_1 == 0x02)
   {
      pb = (unsigned char *) 0xA1000B;
      *pb = 0x40;
      pb += 2;
      *pb = 0x40;
      pb += 2;
      *pb = 0x40;
      break;
   }
   else if (cm_1 == 0x03)
   {
      pb = (unsigned char *) 0xA10009;
      *pb = 0x40;
      pb += 2;
      *pb = 0x40;
      pb += 2;
      *pb = 0x40;
      
      pb = (unsigned char *) 0xA1000B;
      *pb = 0x40;
      pb += 2;
      *pb = 0x40;
      pb += 2;
      *pb = 0x40;
      break;
   }
}




unsigned char CheckJoypad(unsigned short cm_1)
{
   register unsigned char *pb;
   
   if (cm_1 == 0x01)
   {
      register unsigned short i, j;
      
      pb = (unsigned char *) 0xa10003;
      
      *pb = 0x40;
      asm("nop");
      asm("nop");
      i = *pb & 0x3f;
      
      *pb = 0;
      asm("nop");
      asm("nop");
      j = (*pb & 0x30) << 2;
      
      return(~(i | j));
   }
   else if (cm_1 == 0x02)
   {
      register unsigned short i, j;
      
      pb = (unsigned char *) 0xa10005;
      
      *pb = 0x40;
      asm("nop");
      asm("nop");
      i = *pb & 0x3f;
      
      *pb = 0;
      asm("nop");
      asm("nop");
      j = (*pb & 0x30) << 2;
      
      return(~(i | j));
   }
}




void ResetPSG()
{
   register unsigned char *pb;
   pb = (unsigned char*) 0xC00011;
   
   *pb = 0x9F;
   *pb = 0xBF;
   *pb = 0xDF;
   *pb = 0xFF;
}




void PSG_SetFreq(unsigned short cm_1, unsigned short cm_2)
{
   register unsigned char *pb;
   pb = (unsigned char *) 0xC00011;
   
   *pb = 0x80 + cm_2 << 5 + cm_1 & 0x0F;
   *pb = cm_2 >> 4;
}




void PSG_SetVol(unsigned short cm_1, unsigned short cm_2)
{
   register unsigned char *pb;
   pb = (unsigned char *) 0xC00011;
   
   *pb = 0x90 + cm_2 << 5 + 0x0F - cm_1;
}




void SRAM_SaveData(unsigned char cm_1, unsigned char cm_2)
{
   register unsigned char *pb;
   pb = (unsigned char *) cm_2;
   
   *pb = cm_1;
}




unsigned char SRAM_ReadData(unsigned char cm_1)
{
   register unsigned char *pb;
   pb = (unsigned char *) cm_1;
   unsigned char dt = (unsigned char *) 0xE00100;
   
   dt = pb;
   return dt;
}




void VDP_WaitForVBlank()
{
   unsigned char *vtimer;
   unsigned char *x;
   
   x = vtimer;
   
   #if 0
   while (x == vtimer);
   #else
   x = 20;
   while (--x > 20);
   #endif /* 0 */
}



/*
   Bleach the last fighter para Mega Drive
   (C) Andoba 2007 (Cesar Gonzalez Segura)
   Compilando con XGCC
   Bleach (C) Kite Tubo, Jump Magazine.
   Mega Drive (C) Sega Enterprises Ltd.
*/


#define PORT_A     0x01
#define PORT_B     0x02
#define PORT_BOTH    0x03


/*
  Nombre: InitVDP()
  Descripción: inicializa el VDP.
  Devuelve: nada.
  Notas: DMA no soportado.
*/
void InitVDP();

/*
  Nombre: InitJoypad()
  Descripción: inicializa el mando indicado.
  Devuelve: nada.
  Parámetros: cm_1, 0x01 si pad 1, 0x02 si pad 2, 0x03 si los dos.
  Notas: pad 3 no soportado. Pad de 6 botones no soportado.
*/
void InitJoypad(unsigned short cm_1);

/*
  Nombre: CheckJoypad()
  Descripción: chequea el estado del joypad
  Devuelve: estado.
  Parámetros: cm1, 0x01 si pad 1, 0x02 si pad 2.
  Notas: mismas que InitJoypad().
*/
unsigned char CheckJoypad(unsigned short cm_1);

/*
  Nombre: ResetPSG()
  Descripción: reinicia el PSG.
  Devuelve: nada.
*/
void ResetPSG();

/*
  Nombre: PSG_SetFreq()
  Descripción: fija la frecuencia del PSG.
  Devuelve: nada.
  Parámetros: cm_1, frecuencia, cm_2, canal.
*/
void PSG_SetFreq(unsigned short cm_1, unsigned short cm_2);

/*
  Nombre: PSG_SetVol()
  Descripción: fija el volumen del PSG.
  Devuelve: nada.
  Parámetros: cm_1, volumen, cm_2, canal.
*/
void PSG_SetVol(unsigned short cm_1, unsigned short cm_2);

/*
  Nombre: SRAM_SaveData()
  Descripción: guarda un dato en la SRAM.
  Devuelve: nada.
  Parámetros: cm_1, banco, cm_2, dato.
*/
void SRAM_SaveData(unsigned char cm_1, unsigned char cm_2);

/*
  Nombre: SRAM_ReadData()
  Descripción: lee un dato de la SRAM.
  Devuelve: el dato leído.
  Parámetro: cm_1, banco a leer.
*/
unsigned char SRAM_ReadData(unsigned char cm_1);

/*
  Nombre: VDP_WaitForVBlank()
  Descripción: espera la sincronización vertical.
  Devuelve: nada.
*/
void VDP_WaitForVBlank();


Yo la verdad, creo que la gracia de programar para consolas es poder ejecutar los programas en ellas, y como ya no dispongo de ninguna de las citadas, pues pienso que para programar para un emulador , programo mejor para la plataforma que ejecuta el emulador y puedo hacer mejores cosas.

Vamos que veo una tontería lidiar con las limtaciones de la consola que sea para después ejecutarlo en el pc.

Esa es mi opinión, pero de todas maneras es una buena iniciativa.


Vuelvo a decir, no has de correrlo en un emulador, es para compraobar que funcione bien. Si puedes correrlo en la consola original, pues mejor qué mejor.
andoba escribió:
Yo la verdad, creo que la gracia de programar para consolas es poder ejecutar los programas en ellas, y como ya no dispongo de ninguna de las citadas, pues pienso que para programar para un emulador , programo mejor para la plataforma que ejecuta el emulador y puedo hacer mejores cosas.

Vamos que veo una tontería lidiar con las limtaciones de la consola que sea para después ejecutarlo en el pc.

Esa es mi opinión, pero de todas maneras es una buena iniciativa.


+1
La gente es un poco tiquismiquis... los programadores de PSP y DS claman al cielo por un buen emulador para cargar sus aplicaciones y cuando son plataformas como esta a ninguno le interesa.... ¡existen cartuchos flash!!, se podría dar al ganador un cartucho flash como premio...

Eso si, el concurso tiene que tener un tiempo y unas normas estrictas.

Además de un jurado (Pej:10personas, 5 programadores y 5 jugadores normales).

Si tomara color este proyecto no estaría mal ;-)
6 respuestas