Criando Menu com OSLib

Hoje mostrarei com criar um menu simples utilizando a biblioteca OSLib.

O resultado final que teremos é este:
Menu OSLib

Entendo este fonte você estará apto a trabalhar com imagens, texto em console, movimentação de imagem, controles.
Eis o codigo fonte:

main.c

/*
Exemplo de menu utilizando OSLib
Autor : Ney Estrabelli
Data  : 10/02/07
*/

#include 

PSP_MODULE_INFO("Tutorial Menu by Old!", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

void menu();

int main()
{
oslInit(0);  //inicia a biblioteca
oslInitGfx(OSL_PF_8888, 1); // seta o tipo de grafico
oslSetTransparentColor(RGB(255,0,255)); // seta a cor transparente
oslInitConsole();  // inicia o texto em console
menu();            // chama a função menu
oslEndGfx();      // finaliza os gráficos
oslQuit();       //  finaliza a biblioteca
return 0;
}

void menu(){
OSL_IMAGE  *textos, *bg; //definimos os ponteiros para imagens
//carregamos as imagens
textos   = oslLoadImageFile("./imagens/textos.png", OSL_IN_RAM, OSL_PF_5551);
bg       = oslLoadImageFile("./imagens/bg.png", OSL_IN_RAM, OSL_PF_5551);
textos->x = 260;     //definimos a posição x da imagem de textos
textos->y = 100;     //definimos a posição y da imagem de textos
bg->x = 252;         //definimos a posição x da imagem bg
bg->y = 72;          //definimos a posição y da imagem bg
int posMenu = 0;     //variavel de posição do menu
while (!osl_quit)
{
oslStartDrawing(); //iniciamos o desenho em tela
oslDrawGradientRect(0,0,480,272,RGB(0,0,0),RGB(255,255,255),RGB(255,255,255),RGB(0,0,0)); //desenha o fundo com gradiente preto e branco
oslDrawImage(bg);       //desenhamos o bg
oslDrawImage(textos);   //desenhamos os textos
oslReadKeys();            //inciamos os botoes
oslPrintf_xy(0, 0, "y = %i", bg->y);           //escrevemos a posição y da imagem bg
oslPrintf_xy(0, 20, "posMenu = %i", posMenu); //escrevemos a posição do menu
if (osl_keys->pressed.down) { //se for pressionado para baixo
switch(posMenu) { //verficamos a posição do menu
case 0:
bg->y = 115;  //desenhamos bg embaixo de instrucoes
posMenu = 1;  //setamos  a posição do posMenu para 1
break;
case 1:
bg->y = 155;  //desenhamos bg embaixo de opcoes
posMenu = 2;  //setamos  a posição do posMenu para 2
break;
case 2:
bg->y = 198;  //desenhamos bg embaixo de creditos
posMenu = 3; //setamos  a posição do posMenu para 3
break;
case 3:
bg->y = 198;  // mantemos o bg desenhado em creditos / aqui poderia voltar para 72
posMenu = 3; //mantemos o valor / aqui poderia voltar para 0
break;
}
}
if (osl_keys->pressed.up) { //se for pressionado para cima
switch(posMenu) { //mesma checagem anterior, porém ao apertar para cima
case 0:
bg->y = 72;
posMenu = 0;
break;
case 1:
bg->y = 72;
posMenu = 0;
break;
case 2:
bg->y = 115;
posMenu = 1;
break;
case 3:
bg->y = 155;
posMenu = 2;
break;
}
}
if (osl_keys->pressed.select) {       //se for pressionado select, tira uma screenshot
oslWriteImageFile(OSL_SECONDARY_BUFFER, "screenshot.png", 0); //grava a screenshot
}
if (osl_keys->pressed.start) oslQuit();    //se for pressionado start sai do programa, voltando pro XMB
oslEndDrawing(); //finaliza a função de desenhar na tela
oslSyncFrame(); //sincroniza os frames
}

}

o makefile:

TARGET = main
OBJS = main.o

INCDIR =
CFLAGS = -G4 -Wall -O2
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LDFLAGS =
STDLIBS= -losl -lpng -lz \
-lpspsdk -lpspctrl -lpspumd -lpsprtc -lpsppower -lpspgu -lpspaudiolib -lpspaudio -lm
LIBS=$(STDLIBS)$(YOURLIBS)


EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = "Exemplo Menu"


PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

Como de costume, não irei explicar passo a passo pois o código fonte já está muito bem comentado, caso você tenha alguma dúvida, não deixe de perguntar, mais info sobre a biblioteca consulte : Documentação OSLib-pt-BR

Para baixar os arquivos de exemplo(source) + versão para rodar no psp com firmware custom OE****

Menu OSLib by Old!