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?!?!!?
![enamorado [amor]](/images/smilies/nuevos/enamorado.gif)
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.