Больше полугода назад у меня появилась игровая консоль Sony Playstation Portable (или просто PSP). Надо сказать, что игры на ней отменные, консоль можно взять в любую поездку и приятно скоротать время в дороге. Как разработчику мне всегда было интересно, как же писать приложения для PSP, я видел множество свободнораспространяющихся приложений, таких как PSP WiFile Transfer, Bookr и даже порты OpenSource игр, например OpenTTD, а недавно у меня появилось немного свободного времени, чтобы заняться вопросом разработки для PSP более подробно, поэтому я поискал информацию по данному вопросу и, как оказалось, программировать для PSP не так уж и сложно.
Итак, в данной статье мы рассмотрим настройку среды разработки для PSP на языках программирования Си и Си++ и написание простейшей классической программы Hello world.
Что же мы имеем изначально:
1. дистрибутив Ubuntu 9.04
2. доступ в интернет (придется скачивать исходные коды библиотек, необходимых для разработки PSP программ)
3. свободное время порядка 3 — 4 часов (библиотеки собираются из исходных кодов, поэтому компиляция занимает несколько часов)
Первое что нам потребуется — установить subversion:
sudo aptitude install subversion
Теперь можно получить последние исходные коды psptoolchain (кросскомпилятора для PSP)
svn co svn://svn.ps2dev.org/psp/trunk/psptoolchain
В полученной папке есть readme файл для всех и специально для дистрибутива Ubuntu (замечу, что psptoolchain можно собрать в любом linux дистрибутиве, а так же cygwin-е). В readme файле для дистрибутива Ubuntu написано что для сборки psptoolchain необходимо удовлетворить зависимости с помощью следующей команды:
sudo apt-get install build-essential autoconf automake bison flex \
libncurses5-dev libreadline-dev libusb-dev texinfo libgmp3-dev \
libmpfr-dev subversion gcc-4.2
что мы и сделаем. После этого нам нужно определить несколько переменных окружения. Добавим следующие строки в файл ~/.bashrc:
export PSPDEV="/usr/local/pspdev"
export PSPSDK="$PSPDEV/psp/sdk"
export PATH="$PATH:$PSPDEV/bin:$PSPSDK/bin"
и выполним команду:
source ~/.bashrc
Теперь можно приступить непосредственно к сборке среды разработки:
cd psptoolchain
sudo ./toolchain-sudo.sh
После этого необходимо получить дополнительные библиотеки для разработки (zlib, SDL и т.п.). Для этого сначала получим набор скриптов из SVN с помощью следующей команды:
svn co svn://svn.ps2dev.org/psp/trunk/psplibraries psplibraries
К сожалению в скриптах установки дополнительных библиотек есть ошибка, для того чтобы ее исправить необходимо сделать следующее: открваем файл psplibraries/scripts/003-freetype.sh и заменяем его содержимое на следующий текст:
#!/bin/sh
# freetype.sh by Dan Peori (danpeori@oopo.net)
## Download the latest source code.
if test! -d «freetype»; then
svn checkout svn://svn.ps2dev.org/psp/trunk/freetype || { exit 1; }
else
svn update freetype || { exit 1; }
fi
## Enter the source directory.
cd freetype || { exit 1; }
cd builds/unix
automake --add-missing
cd ../…
## Bootstrap the source.
sh autogen.sh || { exit 1; }
## Configure the build.
LDFLAGS="-L$(psp-config --pspsdk-path)/lib -lc -lpspuser" ./configure --host psp --prefix=$(psp-config --psp-prefix) || { exit 1; }
## Compile and install.
make clean && make -j2 && make install && make clean || { exit 1; }
После этого установим одну зависимость:
sudo aptitude install libtool
и запускаем компиляцию библиотек:
sudo ./libraries-sudo.sh
После данных махинаций мы имеем кросскомпилятор и набор библиотек для разработки программ для PSP на Си и Си++. Давайте напишем нашу первую программу.
Итак, с помощью макроса PSP_MODULE_INFO мы определяем задаем информацию о нашей программе и ее версии, далее опредяем несколько стандартных callback-ов и соотвественно главную функцию нашей программы main — которая устанавливает заданные нами callback-и и печатает на экране заветную строку «Hello world».
Теперь напишем Makefile для того чтобы собрать наш код.
TARGET = hello
OBJS = main.o
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Hello world
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
Скомпилируем нашу программу командой make. Полученный файл EBOOT.PBP поместим на консоль в папку psp/game/hello. Вот и все. В следующей статье мы рассмотрим, как контролировать нажатия клавиш.
Оригинал моей статьи: linux.vsevteme.ru/posts/show?id=9059
Итак, в данной статье мы рассмотрим настройку среды разработки для PSP на языках программирования Си и Си++ и написание простейшей классической программы Hello world.
Что же мы имеем изначально:
1. дистрибутив Ubuntu 9.04
2. доступ в интернет (придется скачивать исходные коды библиотек, необходимых для разработки PSP программ)
3. свободное время порядка 3 — 4 часов (библиотеки собираются из исходных кодов, поэтому компиляция занимает несколько часов)
Первое что нам потребуется — установить subversion:
sudo aptitude install subversion
Теперь можно получить последние исходные коды psptoolchain (кросскомпилятора для PSP)
svn co svn://svn.ps2dev.org/psp/trunk/psptoolchain
В полученной папке есть readme файл для всех и специально для дистрибутива Ubuntu (замечу, что psptoolchain можно собрать в любом linux дистрибутиве, а так же cygwin-е). В readme файле для дистрибутива Ubuntu написано что для сборки psptoolchain необходимо удовлетворить зависимости с помощью следующей команды:
sudo apt-get install build-essential autoconf automake bison flex \
libncurses5-dev libreadline-dev libusb-dev texinfo libgmp3-dev \
libmpfr-dev subversion gcc-4.2
что мы и сделаем. После этого нам нужно определить несколько переменных окружения. Добавим следующие строки в файл ~/.bashrc:
export PSPDEV="/usr/local/pspdev"
export PSPSDK="$PSPDEV/psp/sdk"
export PATH="$PATH:$PSPDEV/bin:$PSPSDK/bin"
и выполним команду:
source ~/.bashrc
Теперь можно приступить непосредственно к сборке среды разработки:
cd psptoolchain
sudo ./toolchain-sudo.sh
После этого необходимо получить дополнительные библиотеки для разработки (zlib, SDL и т.п.). Для этого сначала получим набор скриптов из SVN с помощью следующей команды:
svn co svn://svn.ps2dev.org/psp/trunk/psplibraries psplibraries
К сожалению в скриптах установки дополнительных библиотек есть ошибка, для того чтобы ее исправить необходимо сделать следующее: открваем файл psplibraries/scripts/003-freetype.sh и заменяем его содержимое на следующий текст:
#!/bin/sh
# freetype.sh by Dan Peori (danpeori@oopo.net)
## Download the latest source code.
if test! -d «freetype»; then
svn checkout svn://svn.ps2dev.org/psp/trunk/freetype || { exit 1; }
else
svn update freetype || { exit 1; }
fi
## Enter the source directory.
cd freetype || { exit 1; }
cd builds/unix
automake --add-missing
cd ../…
## Bootstrap the source.
sh autogen.sh || { exit 1; }
## Configure the build.
LDFLAGS="-L$(psp-config --pspsdk-path)/lib -lc -lpspuser" ./configure --host psp --prefix=$(psp-config --psp-prefix) || { exit 1; }
## Compile and install.
make clean && make -j2 && make install && make clean || { exit 1; }
После этого установим одну зависимость:
sudo aptitude install libtool
и запускаем компиляцию библиотек:
sudo ./libraries-sudo.sh
После данных махинаций мы имеем кросскомпилятор и набор библиотек для разработки программ для PSP на Си и Си++. Давайте напишем нашу первую программу.
#include <pspkernel.h> #include <pspdebug.h> PSP_MODULE_INFO("Hello World", 0, 1, 1); #define printf pspDebugScreenPrintf /* Exit callback */ int exit_callback(int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; } /* Callback thread */ int CallbackThread(SceSize args, void *argp) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } /* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) { int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); } return thid; } int main() { pspDebugScreenInit(); SetupCallbacks(); printf("Hello World"); sceKernelSleepThread(); return 0; }
Итак, с помощью макроса PSP_MODULE_INFO мы определяем задаем информацию о нашей программе и ее версии, далее опредяем несколько стандартных callback-ов и соотвественно главную функцию нашей программы main — которая устанавливает заданные нами callback-и и печатает на экране заветную строку «Hello world».
Теперь напишем Makefile для того чтобы собрать наш код.
TARGET = hello
OBJS = main.o
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Hello world
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
Скомпилируем нашу программу командой make. Полученный файл EBOOT.PBP поместим на консоль в папку psp/game/hello. Вот и все. В следующей статье мы рассмотрим, как контролировать нажатия клавиш.
Оригинал моей статьи: linux.vsevteme.ru/posts/show?id=9059