03-Aventuras en Megadrive: “Hola Mundo”

ANTES DE PROGRAMAR, UN POCO DE TEORÍA

Como cualquier programa en C, la función main es llamada nada más comenzar:

int main( )
{
	return(0); }
#include <genesis.h>

Pero incluso antes de llamar a main, el SGDK puede hacer todo esto por ti:

  • Poner los valores del VDP a los valores por defecto.
  • Limpiar la VRAM.
  • Cargar 4 paletas de colores: gris, roja, verde y azul.
  • Cargar una fuente por si quieres mostrar texto.
  • Inicializar la entrada de los controles.
  • Resetear el sonido y carga un controlador de 2 canales PCM.

Para hacer esto, no te olvides de incluir la cabecera #include < genesis.h >
Vamos a escribir un texto en pantalla:

#include <genesis.h>

int main()
{
	VDP_drawText("¡Hola Mundo!", 10, 13);
	return(0);
}

Escribir un texto es tan fácil como usar la función

VDP_drawText(mi_texto,x,y).

Al contrario que en un programa actual, X e Y se expresan en tiles y no en píxels.
1 tile = 8 píxels. Cada carácter es un tile de 8×8 píxels. Más tarde aclararemos este concepto.

Sin embargo este programa es incorrecto, al menos para la MD. Aunque en C toda función debe devolver un valor (de ahí el return), para una consola de 16bits no tiene sentido, significaría que se ha terminado el juego. Veamos…

#include <genesis.h>

int main()
{
	VDP_drawText("¡Hola Mundo!", 10, 13);

	while(1)
	{
		//leer controles
		//mover sprites
		//actualizar marcadores
                //etc
		//dibujar pantalla
	}
	return (0);
}

Perfecto.  Tenemos un bucle infinito donde en cada frame leemos los controles, movemos los sprites… y finalmente actualizamos la pantalla. Las antiguas TVs de tubo se actualizaban 50 (PAL) o 60 (NTCS) veces por segundo, tenemos que tener esto en cuenta.

Para ello el SGDK nos proporciona la función VDP_waitVSync(). Esta función hace esperar a la MD el momento correcto. Así que el programa 100% MD sera

#include <genesis.h>

int main()
{
	VDP_drawText("¡Hola Mundo!", 10, 13);

	while(1)
	{
		//leer controles
		//mover sprites
		//actualizar marcadores
                //etc
		//dibujar pantalla
                
                //espera el refresco de pantalla
                VDP_waitVSync();
	}
	return (0);
}

Vamos a probarlo. Abrimos en CB el proyecto que iniciamos en el post anterior.

File / New / Empty File (contestamos que a “añadir el archivo al proyecto”), lo salvamos como main.c

Copiamos/Pegamos el código anterior. Pulsamos Control+F9 para compilar:

tutorial-10

Vamos a probarlo en un emulador de MD. Recomendado GensKmod. Abrimos el emulador y cargamos el archivo rom.bin de la carpeta out.

tutorial-11

 

Anuncios