<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Программирование для мобильных устройств &#187; Game Development</title>
	<atom:link href="http://mobile-developer.ru/category/game-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://mobile-developer.ru</link>
	<description>Программирование для мобильных устройств. Разработка для Windows Mobile, Windows CE, Embedded Linux, Google Android, iPhone, Palm webOS и др. Все о программировании для мобильных телефонов, смартфонов, КПК и других мобильных устройств. Статьи, новости, руководства, видео уроки.</description>
	<lastBuildDate>Sun, 05 Sep 2010 20:40:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Hello World для Sony PlayStation Portable (Linux)</title>
		<link>http://mobile-developer.ru/embedded-linux/hello-world-dlya-sony-playstation-portable-linux/</link>
		<comments>http://mobile-developer.ru/embedded-linux/hello-world-dlya-sony-playstation-portable-linux/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 20:25:02 +0000</pubDate>
		<dc:creator>T-Rex</dc:creator>
				<category><![CDATA[Embedded Linux]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Mobile Games]]></category>

		<guid isPermaLink="false">http://mobile-developer.ru/?p=796</guid>
		<description><![CDATA[Сегодня у нас статья Егора Баранова о разработке для Sony PlayStation Portable. Больше полугода назад у меня появилась игровая консоль Sony Playstation Portable (или просто PSP). Надо сказать, что игры на ней отменные, консоль можно взять в любую поездку и приятно скоротать время в дороге. Как разработчику мне всегда было интересно, как же писать приложения [...]<p>Post from: <a href="http://mobile-developer.ru">Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/embedded-linux/hello-world-dlya-sony-playstation-portable-linux/">Hello World для Sony PlayStation Portable (Linux)</a></p>
]]></description>
			<content:encoded><![CDATA[<a class="google_buzz"  
href="http://www.google.com/reader/link?url=http://mobile-developer.ru/embedded-linux/hello-world-dlya-sony-playstation-portable-linux/&title=Hello+World+для+Sony+PlayStation+Portable+(Linux)&srcURL=http://mobile-developer.ru" target="_blank" rel="nofollow"><img
src="http://mobile-developer.ru/wp-content/plugins/google-buzz-button-for-wordpress/images/google-buzz.png" alt="Google Buzz" /></a><p>Сегодня у нас статья <noindex><a rel="nofollow" href="http://mobile-developer.ru/goto/http://goganchic.habrahabr.ru/"  target="_blank">Егора Баранова</a></noindex> о разработке для Sony PlayStation Portable.</p>
<p>Больше полугода назад у меня появилась игровая консоль Sony Playstation Portable (или просто PSP). Надо сказать, что игры на ней отменные, консоль можно взять в любую поездку и приятно скоротать время в дороге. Как разработчику мне всегда было интересно, как же писать приложения для PSP, я видел множество свободнораспространяющихся приложений, таких как PSP WiFile Transfer, Bookr и даже порты OpenSource игр, например OpenTTD, а недавно у меня появилось немного свободного времени, чтобы заняться вопросом разработки для PSP более подробно, поэтому я поискал информацию по данному вопросу и, как оказалось, программировать для PSP не так уж и сложно.</p>
<p><span id="more-796"></span>Итак, в данной статье мы рассмотрим настройку среды разработки для PSP на языках программирования Си и Си++ и написание простейшей классической программы Hello world.</p>
<p>Что же мы имеем изначально:</p>
<ol>
<li>дистрибутив Ubuntu 9.04</li>
<li>доступ в интернет (придется скачивать исходные коды библиотек, необходимых для разработки PSP программ)</li>
<li>свободное время порядка 3 — 4 часов (библиотеки собираются из исходных кодов, поэтому компиляция занимает несколько часов)</li>
</ol>
<p>Первое что нам потребуется — установить subversion:</p>
<p><strong>sudo aptitude install subversion</strong></p>
<p>Теперь можно получить последние исходные коды psptoolchain (кросскомпилятора для PSP)</p>
<p><strong>svn co svn://svn.ps2dev.org/psp/trunk/psptoolchain</strong></p>
<p>В полученной папке есть readme файл для всех и специально для дистрибутива Ubuntu (замечу, что psptoolchain можно собрать в любом linux дистрибутиве, а так же cygwin-е). В readme файле для дистрибутива Ubuntu написано что для сборки psptoolchain необходимо удовлетворить зависимости с помощью следующей команды:</p>
<p><strong>sudo apt-get install build-essential autoconf automake bison flex \</strong></p>
<p><strong>libncurses5-dev libreadline-dev libusb-dev texinfo libgmp3-dev \</strong></p>
<p><strong>libmpfr-dev subversion gcc-4.2</strong></p>
<p>что мы и сделаем. После этого нам нужно определить несколько переменных окружения. Добавим следующие строки в файл ~/.bashrc:</p>
<p><strong>export PSPDEV=&#8221;/usr/local/pspdev&#8221;</strong></p>
<p><strong>export PSPSDK=&#8221;$PSPDEV/psp/sdk&#8221;</strong></p>
<p><strong>export PATH=&#8221;$PATH:$PSPDEV/bin:$PSPSDK/bin&#8221;</strong></p>
<p>и выполним команду:</p>
<p><strong>source ~/.bashrc</strong></p>
<p>Теперь можно приступить непосредственно к сборке среды разработки:</p>
<p><strong>cd psptoolchain</strong></p>
<p><strong>sudo ./toolchain-sudo.sh</strong></p>
<p>После этого необходимо получить дополнительные библиотеки для разработки (zlib, SDL и т.п.). Для этого сначала получим набор скриптов из SVN с помощью следующей команды:</p>
<p><strong>svn co svn://svn.ps2dev.org/psp/trunk/psplibraries psplibraries</strong></p>
<p>К сожалению в скриптах установки дополнительных библиотек есть ошибка, для того чтобы ее исправить необходимо сделать следующее: открваем файл psplibraries/scripts/003-freetype.sh и заменяем его содержимое на следующий текст:</p>
<pre class="brush: jscript;">
#!/bin/sh
# freetype.sh by Dan Peori (danpeori@oopo.net)
## Download the latest source code.

if test ! -d &quot;freetype&quot;; 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=&quot;-L$(psp-config --pspsdk-path)/lib -lc -lpspuser&quot; ./configure --host psp --prefix=$(psp-config --psp-prefix) || { exit 1; }

## Compile and install.
make clean &amp;&amp; make -j2 &amp;&amp; make install &amp;&amp; make clean || { exit 1; }
</pre>
<p>После этого установим одну зависимость:</p>
<p><strong>sudo aptitude install libtool</strong></p>
<p>и запускаем компиляцию библиотек:</p>
<p><strong>sudo ./libraries-sudo.sh</strong></p>
<p><span>После данных махинаций мы имеем кросскомпилятор и набор библиотек для разработки программ для PSP на Си и Си++. Давайте напишем нашу первую программу.</span></p>
<pre class="brush: cpp;">
#include &lt;pspkernel.h&gt;
#include &lt;pspdebug.h&gt;

PSP_MODULE_INFO(&quot;Hello World&quot;, 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(&quot;Exit Callback&quot;, 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(&quot;update_thread&quot;, CallbackThread, 0x11, 0xFA0, 0, 0);
    if(thid &gt;= 0) {
        sceKernelStartThread(thid, 0, 0);
    }
    return thid;
}

int main() {
    pspDebugScreenInit();
    SetupCallbacks();
    printf(&quot;Hello World&quot;);
    sceKernelSleepThread();
    return 0;
}
</pre>
<p>Итак, с помощью макроса PSP_MODULE_INFO мы определяем задаем информацию о нашей программе и ее версии, далее опредяем несколько стандартных callback-ов и соотвественно главную функцию нашей программы main — которая устанавливает заданные нами callback-и и печатает на экране заветную строку «Hello world».</p>
<p>Теперь напишем Makefile для того чтобы собрать наш код.</p>
<pre class="brush: jscript;">
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
</pre>
<p>Скомпилируем нашу программу командой make. Полученный файл EBOOT.PBP поместим на консоль в папку psp/game/hello. Вот и все. В следующей статье мы рассмотрим, как контролировать нажатия клавиш.</p>
<p><a href="http://mobile-developer.ru/?p=796&#038;preview=true" >Оригинал статьи</a>.</p>
<p>Post from: <a href="http://mobile-developer.ru" >Mobile-Developer.ru</a><br/><br/><a href="http://mobile-developer.ru/embedded-linux/hello-world-dlya-sony-playstation-portable-linux/" >Hello World для Sony PlayStation Portable (Linux)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mobile-developer.ru/embedded-linux/hello-world-dlya-sony-playstation-portable-linux/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
