› Foros › Multiplataforma › Desarrollo
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?!?!!? 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!
/*
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.
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.