Início > games, programação, tutorial > devkitPSP no Code::Blocks (Windows e Linux)

devkitPSP no Code::Blocks (Windows e Linux)

Decidi escrever esse post como uma referência para configurar o Code::Blocks para Windows e para Linux para usar a toolchain do devkitPro para PSP, já que os tutoriais que encontrei estavam confusos ou incompletos. Para quem prefere usar o MinPSPw, o site do desenvolvedor contém informações sobre como usar o plugin para Eclipse. Para quem prefere usar Linux, siga o Getting Started do devkitPSP na página do devkitPro. Este post é baseado no tutorial postado no fórum OneHitGamer pelo usuário Jojo.du.27.

Um aviso importante!

Na data da escrita desse post, o devkitPro (versão 1.5.1) estava com um problema de instalação no Windows 7 64-bit, sobrescrevendo a variável de ambiente path. Recomenda-se, neste caso, fazer uma cópia do conteúdo do path e depois adicionar ao final do path sobrescrito. No Windows XP 32-bit não detectei o mesmo problema.

Update: O problema foi corrigido na versão 1.5.3 do devkitPro =)

Configurando o uso do toolchain para PSP

Estou assumindo que você usou os caminhos padrões para instalação do Code::Blocks e do devkitPro. Abra o Code::Blocks e vá para o menu “Settings”, opção “Compiler and debugger…”. O GNU GCC Compiler deve estar selecionado por padrão. Clique em “Copy” e renomeie (para referência, estou usando o nome PSPDevKit).

Na mesma janela, na aba “Search directories”, na sub aba “Compiler”, adicione os seguintes caminhos para os includes:

Windows:

C:\devkitPro\devkitPSP\include
C:\devkitPro\devkitPSP\psp\include
C:\devkitPro\devkitPSP\psp\sdk\include

Linux:

$DEVKITPSP/include
$DEVKITPSP/psp/include
$DEVKITPSP/psp/sdk/include

Na mesma janela, na aba “Search directories”, na sub aba “Linker”, adicione os seguintes caminhos para as libs:

Windows:

C:\devkitPro\devkitPSP\lib
C:\devkitPro\devkitPSP\psp\lib
C:\devkitPro\devkitPSP\psp\sdk\lib

Linux:

$DEVKITPSP/lib
$DEVKITPSP/psp/lib
$DEVKITPSP/psp/sdk/lib

Na aba “Linker”, adicione em “Other linker options” os seguintes parâmetros:

-lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lpsplibc -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel

Na mesma janela, clique na aba “Toolchain executables” e configure da seguinte forma:

Compiler's instalation directory: (Windows: C:\devkitPro\devkitPSP\) (Linux: $DEVKITPSP)
C compiler: psp-gcc.exe
C++ compiler: psp-g++.exe
Linker for dynamic libs: psp-g++.exe
Linker for static libs: psp-ar.exe
Debugger: psp-gdb.exe
Resource compiler e Make program devem ficar em branco.

Clique em Ok para fechar a janela.

Testando a configuração

Crie um novo projeto, selecionando “Console aplication” como build target. Nomeie como desejar e como compilador (última tela do wizard), selecione o PSPDevKit.

Edite o arquivo main.cpp para o seguinte código:

#include <pspkernel.h>
#include <pspdebug.h>
#include <pspctrl.h>

#define printf pspDebugScreenPrintf

PSP_MODULE_INFO("Test", 0, 1, 1);

// Exit callback
int ExitCallback(int Arg1, int Arg2, void *Common)
{
   sceKernelExitGame();
   return 0;
}

// Callback thread
int CallbackThread(SceSize Args, void *Argp)
{
   int CallbackId;

   CallbackId = sceKernelCreateCallback("Exit Callback", ExitCallback, NULL);
   sceKernelRegisterExitCallback(CallbackId);

   sceKernelSleepThreadCB();

   return 0;
}

// Sets up the callback thread and returns its thread id
int SetupCallbacks(void)
{
   int ThreadId = 0;

   ThreadId = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);

   if (ThreadId >= 0)
   {
      sceKernelStartThread(ThreadId, 0, 0);
   }

   return ThreadId;
}

int main(int argc, char ** argv)
{
   pspDebugScreenInit();
   SetupCallbacks();

   printf("Hello World \n");

   sceKernelSleepThread();

   return 0;
}

Vá para o menu “Project”, opção “Settings”. Na aba “Targets”, modifique a extensão do arquivo gerado para .elf e desmarque a checkbox “Auto-generate filename extension”. Faça isso tanto para o target Debug quanto para Release.

Para evitar reconfigurar todo novo projeto, pode-se salvar a atual configuração como um template, indo no menu “File”, opção “Save project as template”.

Clique na engrenagem para compilar o projeto.

Preparando o elf para ser carregado

Siga para o diretório onde o arquivo .elf foi gerado na compilação (lembre-se de verificar se foi em modo Debug ou Release). Crie um arquivo .bat com os seguintes comandos neste diretório, modificando onde está test.elf e test.sfo para o arquivo gerado na compilação do projeto:

Windows:

"C:\devkitPro\devkitPSP\bin\mksfo.exe" test test.sfo
"C:\devkitPro\devkitPSP\bin\psp-fixup-imports.exe" test.elf
"C:\devkitPro\devkitPSP\bin\psp-strip.exe" test.elf -o stripped.elf
"C:\devkitPro\devkitPSP\bin\pack-pbp.exe" EBOOT.PBP test.sfo NULL NULL NULL NULL NULL stripped.elf NULL
del test.sfo
del stripped.elf
pause

Linux (assumindo shell bash):

eval $DEVKITPSP/bin/mksfo test test.sfo
eval $DEVKITPSP/bin/psp-fixup-imports test.elf
eval $DEVKITPSP/bin/psp-strip test.elf -o stripped.elf
eval $DEVKITPSP/bin/pack-pbp EBOOT.PBP test.sfo NULL NULL NULL NULL NULL stripped.elf NULL
rm test.sfo stripped.ef

Rode o arquivo de script para gerar o arquivo EBOOT.PBP. Na primeira linha, test (sem extensão) pode ser modificado para o nome da sua aplicação (sem espaços e acentos. Recomendo passar o nome como argumento do script).

Testando o arquivo gerado

Use um emulador (recomendo o PSPEmu no Windows. No meu box Linux — um CentOS 6.4 64-bit — consegui rodar com a jpcsp versão 3129) para carregar o arquivo EBOOT.PBP (ou o test.elf) e em caso de sucesso, a mensagem “Hello world” estará escrita na tela.

Anúncios
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

E o seu comentário?

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: