03-“Hola Mundo”

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×8 píxels. Cada carácter es un tile de 8×8 píxels. Por tanto podemos decir que para la Megadrive, un carácter no es más que un tile (con el dibujo de la letra). 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