2006 02 Tworzenie aplikacji dla Sony PlayStation Portable [Programowanie]


programowanie
Tworzenie aplikacji
dla Sony PlayStation
Portable
Jaime Peńalba Estebanez
SP (PlayStation Portable) to naj- " Bookr (czytnik książek, pozwalający na
nowsza przenośna konsola So- wyświetlanie plików PDF, e-booków
ny; jest to multimedialna sta- oraz czystego tekstu);
Pcja, pozwalająca odtwarzać mu- " PSPRadio (narzędzie pozwalające na
zykę i filmy, przeglądać zdjęcia oraz grać słuchanie internetowych strumieni
w gry. Jest oparta na 32-bitowym proce- shoutcast/icecast mp3 poprzez sieć
sorze MIPS r4000 o częstotliwości zegara bezprzewodową);
333MHz , a ponadto posiada 32 MB RAM " PSP-PDA (aplikacja typu organizer,
pamięci i dwie jednostki FPU, z których z wbudowanym notatnikiem, odtwa-
jedna  i tu drzemie główna siła PSP  jest rzaczem muzyki, przeglądarką obra-
zdolna do przetwarzania wektorowego. zów, książką adresową, kalendarzem,
Chociaż PSP jest sama w sobie bardzo kalkulatorem oraz zegarem);
fajnym gadżetem, możliwość tworzenia " SXT Version Changer (symulator in-
dla niej własnych aplikacji mogłaby dać jej nych wersji konsoli, dzięki czemu
praktycznie nieograniczone możliwości, można grać w niektóre gry wymaga-
takie jak chociażby wykorzystywanie urzą- jące nowszego firmware'u bez aktu-
dzenia do robienia notatek w edytorze alizacji).
tekstu, w charakterze telefonu VoIP (w po-
łączeniu z zestawem słuchawkowym i ko- Tworzenie własnych aplikacji to miła moż-
rzystając z wbudowanego interfejsu sieci liwość, ale nie znalazła się ona w planach
bezprzewodowej), do czytania/wysyłania Sony dla tej konsoli; firma dba, aby nie było
poczty elektronicznej itd. Poniższa lista to możliwe, blokując wykonywanie nie
wymienia szereg przydatnych aplikacji podpisanego przez nią kodu. Dzięki siecio-
dla PSP, dających nam próbkę jej poten- wej społeczności hakerów PSP, od pewne-
cjału: go czasu istnieje możliwość uruchamiania
niepodpisanego kodu, ale nie na wszyst-
" Snes TYL (w pełni funkcjonalny emula- kich wersjach firmware'u  obecnie odpa-
tor Super Nintendo); lanie  domowej roboty aplikacji możliwe
" ScummVM (emulator pozwalający na jest tylko dla konsol z firmware w wersji
uruchamianie takich gier, jak Monkey 1.00 bądz 1.50.
Island, Day of Tentacle, Loom, Sam &
Max i wielu innych); Uruchamianie
" PVNC (klient VNC dla PSP; działa cał- i instalowanie aplikacji
kiem przyzwoicie, jeżeli tylko jest się Aplikacje dla PSP są rozpowszechnia-
w stanie pracować w rozdzielczości ne w plikach formatu PBP, zawierających
480x272); plik typu .elf z właściwą aplikacją, ikony,
" PSPInside (w pełni funkcjonalny de- dzwięki oraz informacje, które są wyświe-
bugger pozwalający na przeglądanie tlane w menu PSP. Instalacja plików PBP
pamięci PSP i jej modułów oraz na w najprostszym przypadku, na konsoli
deasemblację tych ostatnich); z firmware JAP 1.00, sprowadza się do sko-
" File Assistant++ (bardzo sympatyczny piowania ich do katalogu /PSP/GAME na
menedżer plików; umie m.in. wyświe- karcie memory stick. Pliki PBP można pako-
Na CD/DVD
tlać obrazy w różnych formatach, wać i rozpakowywać za pomocą pole-
Na CD/DVD znajduje się kod
zródłowy tworzonej aplikacji. odtwarzać muzykę oraz uruchamiać ceń pack-pbp i unpack-pbp, dostępnych
pliki PBP); w pspsdk.
32 luty 2006
programowanie
PSP
PSP pakiet PBP. Składnia wywołania jest jące dwa adresy wskazników; zaczekaj 5
Listing 1. Instalacja pakietu PBP
następująca: kxploit [PBPFILE] [NAME] sekund od momentu zgaśnięcia czerwo-
[DIR], a efekt działania programu przed- nej diody memory stick, aby upewnić się, że
$ mount /mnt/usb ; cd Projects/PFX/ stawia Listing 1. plik index.dat został poprawnie skopiowa-
S
$ kxploit EBOOT.PBP PFX /mnt/ Program tworzy dwa katalogi odpo- ny do pamięci flash.
usb/psp/game wiadające nazwie aplikacji, w drugim Teraz firmware naszej konsoli udaje
KXploit Tool 0.3 by MrSiir / PSP-Dev przypadku z dodanym na końcu %; dzieli wersję 1.00 i możliwa jest aktualizacja do
KXPloit Boot by PSP-DEV Team on także PBP na dwa katalogi. Następnie, wersji 1.50  jej instalator myśli, że bieżą-
http://www.only4.info/psp-dev/ korzystając z menu gier PSP, zajrzyj na cą wersją jest 1.00. Zaopatrz się w UMD
http://pspdev.siirlabs.com memory stick. Powinieneś zobaczyć tam zawierający aktualizację firmware'u do
OK! dwie pozycje: jedna z nazwą aplikacji wersji 1.50 lub skopiuj aktualizacyjny
$ ls /mnt/usb/psp/game i ikoną Kxploit, wykorzystywana do uru- pakiet PBP na memory stick (nie możemy
pfx pfx% chamiania aplikacji, a druga to uszko- ich tutaj dołączyć ze względu na prawa
$ umount /mnt/usb dzone dane  nie należy ich kasować, gdyż autorskie firmy Sony). Podłącz konsolę
są częścią sposobu działania Kxploit. do prądu i uruchom aktualizację; na etapie
Istnieją dwa sposoby przenoszenia W przypadku wyższych wersji firm- 99% procesu zgłoszony zostanie fatalny
plików na urządzenie; pierwszy wymaga ware'u istnieje możliwość downgrade- błąd, ale nie przejmuj się  to normalne.
zastosowania czytnika kart memory stick, 'u wersji 2.00 do 1.50 poprzez wykorzy- Ponadto, PSP przestanie reagować  po
a drugi  przewodu mini USB łączące- stanie wprowadzonego w tej wersji błędu prostu zaczekaj kilka sekund i przytrzy-
go PSP z komputerem oraz przełączenia w obsłudze obrazów tiff. Jeżeli korzystasz maj przycisk zasilania tak długo, aż kon-
PSP w tryb USB (w menu Settings), aby z jakiejkolwiek nowszej wersji, to niestety, sola nie wyłączy się. Po ponownym włącze-
mogła ona przesyłać pliki. Oba warian- w chwili obecnej nie istnieje żaden sposób niu zauważysz kolejny ekran błędu, infor-
ty zapewniają zgodność ze standardem pozwalający na uruchamianie niepodpisa- mujący o utracie ustawionych preferen-
USB mass storage, więc PSP będzie dzia- nych aplikacji. cji  po prostu ustaw je na nowo. Witajcie
łała jak pendrive. Spójrzmy, jak zdowngrade'ować firm- w świecie samoróbek.
Najpierw dodaj do pliku /etc/fstab linij- ware 2.00 do wersji 1.50. Warto zdawać
kę przypominającą poniższą: sobie tutaj sprawę z faktu, że metoda ta Przygotowujemy środowi-
jest dość ryzykowna  pisze się w niej bez- sko programistyczne
S
/dev/sda1 /mnt/usb vfat pośrednio w pamięci flash. Można w ten Pierwszym krokiem na drodze ku tworze-
defaults,umask=0,user,noauto 0 0 sposób uczynić PSP bezużytecznym, więc niu własnych aplikacji dla PSP jest przygo-
zachowaj dużą ostrożność. Nie jesteśmy towanie odpowiedniego środowiska pro-
Pozwala ona przyspieszyć montowanie i odpowiedzialni za jakiekolwiek uszkodze- gramistycznego. Składa się ono z szeregu
odmontowywanie PSP w fazie prac nad nia, które opisana tu operacja może wywo- narzędzi deweloperskich GNU, zmodyfi-
oprogramowaniem. W razie potrzeby, łać. Ponadto, trzeba wiedzieć, że Sony nie kowanych tak, aby było możliwe genero-
zastąp /dev/sda1 urządzeniem odpowied- uznaje downgradingu i przeprowadzenie wanie plików binarnych kompatybilnych
nim dla twojego systemu. go powoduje utratę gwarancji. z PSP; po angielsku narzędzia takie nazy-
Uruchamianie domowej roboty progra- W trakcie operacji downgrade'u, pro- wamy cross compilers.
mów na urządzeniach z firmware w wersji gram MPHdowngrader, wykorzystujący Zacznijmy od elementów niezbędnych
1.50 jest nieco bardziej skomplikowane. lukę w obsłudze tiffów, zastępuje plik do zbudowania środowiska. Na potrzeby
Po wersji 1.00 firma Sony dołożyła więcej flash0:/etc/vsh/index.dat w pamięci flash kon- artykułu wykorzystywaliśmy tutaj maszy-
starań, aby to uniemożliwić  z tego wzglę- soli plikiem index.dat z wersji 1.00 firmwa- nę klasy x86 z systemem Debian GNU/
du, aby uruchamiać niepodpisany kod przy re'u. Plik ten zawiera informację o bieżącej Linux, ale równie dobrze nadałaby się
tej wersji firmware'u, konieczne jest sko- wersji firmware'u, którą narzędzie aktuali- dowolna inna dystrybucja Linuksa, a na-
rzystanie z błędu w obsłudze katalogów zacyjne sprawdza przed startem  bez tej wet jakikolwiek system zgodny z POSIX
z aplikacjami. Najprościej można to uczynić zmiany narzędzie poinformowałoby nas,
Listing 2. Downgrade firmware'u PSP do
korzystając z programu Kxploit. Popatrzmy, że mamy już nowszą wersję firmware'u
wersji 1.50
jak go zainstalować: i nie pozwoliłoby na downgrade.
Instrukcje pozwalające na zainstalowanie
jaime@Infinity:~$ cd psp/ wszystkich niezbędnych plików znajdują $ cd psp/
S S
jaime@Infinity:~/psp$ wget http:// się na Listingu 2. $ wget http://nixgeneration.com/
S ~jaime/psp/MPHDowngrader.zip
nixgeneration.com/~jaime/psp/ Po skopiowaniu wszystkich plików na
kxploittool-0.3.tar.gz
memory stick, wejdz na PSP do menu foto- $ mkdir downgrader ; cd downgrader
S
jaime@Infinity:~/psp$ tar xvf grafii i naciśnij [x], aby wyświetlić zdjęcia $ unzip ../MPHDowngrader.zip
S S
kxploittool-0.3.tar.gz składowane na karcie pamięci. Skutkiem $ mount /mnt/usb ; cp index.dat
S
jaime@Infinity:~/psp$ sudo cp -ar tego będzie wywołanie downgradera w /mnt/usb
S
kxploit /usr/bin/ momencie, gdy PSP spróbuje podejrzeć $ cp h.bin /mnt/usb ; cp -r
wgrany przez nas wcześniej zniekształ- PSP/ /mnt/usb
Po zainstalowaniu Kxploit, zobaczmy, jak cony plik .tif. Wywołaniu downgradera $ umount /mnt/usb
za jego pomocą zainstalować na naszym może towarzyszyć czarne okno zawiera-
www.lpmagazine.org 33
programowanie
Pobiera on dobrze znaną kolekcję narzędzi
Listing 3. Instalacja pliku psptoolchain Listing 4. Makefile dla programu  Hello
deweloperskich GNU oraz łatki na te narzę-
Linux
dzia stworzone przez ludzi z ps2dev.org, czy-
$ sudo mkdir /usr/local/pspdev niące je zgodnymi z PSP. Oto lista narzędzi
S
$ sudo chown jaime /usr/ instalowanych przez PSPtoolchain: TARGET = hello
local/pspdev OBJS = main.o
$ cd $HOME ; mkdir psp; cd psp/ " Binutils (GNU binutils  m.in. linker INCDIR =
S
$ svn export svn://svn.pspdev. i asembler, a także inne narzędzia do CFLAGS = -O2 -G0 -Wall
S
org/psp/trunk/psptoolchain manipulacji binariami); CXXFLAGS = $(CFLAGS) -fno-
exceptions -fno-rtti
psptoolchain " Newlib (prosta biblioteka ANSI C,
S
A psptoolchain/binutils- biblioteka matematyczna oraz szereg ASFLAGS = $(CFLAGS)
2.16.1.patch
pakietów pomocniczych); LIBDIR =
A psptoolchain/README.TXT " GCC (GNU Compiler Collection, w na- LIBS =
S
A psptoolchain/newlib- szym przypadku będą działać tylko LDFLAGS =
1.13.0.patch
C i C++); EXTRA_TARGETS = EBOOT.PBP
S
A psptoolchain/gdb-6.3.patch " GDB (debugger poziomu zródła; PSP_EBOOT_TITLE = Simple Hello
Exported revision 1497. zmontowanie odpowiedniego prze- World Example
S
$ cd psptoolchain/ wodu szeregowego pozwala na korzy- PSPSDK=$(shell psp-config
$ ./toolchain.sh stanie z punktów przerwań); --pspsdk-path)
" PSPSDK (zbiór otwartych narzę- include $(PSPSDK)/lib/build.mak
dzi i bibliotek napisanych dla Sony
UNIX, np. MacOS X, systemy BSD, a nawet PlayStation Portable). Zanim przejdziemy dalej, wez pod
Windows z pakietem Cygwin. Pełna lista uwagę, że aby zostały uwzględnione
niezbędnych elementów to: autoconf, auto- Zobaczywszy już, jak bardzo PSPtoolchain zmiany w profilu, może być konieczne
make, flex, gcc, gcc-g++, make, patchutils, sub- upraszcza nam życie, spójrzmy, jakie pole- wyjście z bieżącej sesji i otwarcie nowej.
version, binutils oraz wget. cenia są potrzebne, aby go pobrać i zainsta- Teraz sprawdz, czy masz w ścieżce działa-
Po zainstalowaniu wszystkich powyż- lować. Zauważ, że muszą być zainstalowane jące aplikacje psp-gcc i psp-ld:
szych komponentów w odpowiedni dla wszystkie pakiety zależne, a ponadto potrze-
naszej dystrybucji sposób, możemy przy- ba około 1 GB wolnego miejsca na dysku. jaime@Infinity:~$ psp-gcc
stąpić do budowania środowiska pro- W zależności od dostępnego sprzętu, -v Using built-in specs.
gramistycznego. Najłatwiej będzie tu skrypt toolchain może działać od 15 minut Target: psp
pobrać skrypt PSPtoolchain, który zbu- do 1 godziny. Jeżeli wszystko poszło Configured with: ../configure
duje wszystko, czego potrzebujemy; mo- dobrze, środowisko programistyczne --prefix=/usr/local/pspdev --target=psp
żna go znalezć na stronie Oopo (http:// powinno było zostać zainstalowane pod --enable-languages=c,c++
www.oopo.net/consoledev/) lub pobrać naj- /usr/local/pspdev; teraz wystarczy dopisać: --with-newlib --enable-cxx-flags=
nowszą wersję z SVN na ps2dev.org. PATH=$PATH:/usr/local/pspdev/bin do swoje- -G0Thread model: single
Osobom nie przepadającym za urucha- go $HOME/.bashrc lub do pliku /etc/profile, gcc version 4.0.2 (PSPDEV 20051022)
mianiem jakichkolwiek skryptów bądz bina- w zależności od tego, czy chcemy dołączyć jaime@Infinity:~$ psp-ld
riów bez wcześniejszego przyjrzenia się ich tę ścieżkę dla siebie, czy dla wszystkich w -v GNU ld version 2.16.1
kodowi, wyjaśnię ogólnie, co ów skrypt robi. systemie. (PSPDEV 20051022)
Gratulacje. Powinieneś teraz posiadać
w pełni funkcjonalne środowisko progra-
mistyczne dla swojej przenośnej konsoli.
Przykład Hello Linux
W żadnym podręczniku programowa-
nia nie może zabraknąć przykładu  Hello
World . Tym razem napiszemy na ekra-
nie  Hello Linux , gdy zostanie naciśnięty
jeden z przycisków. Listingi 4 i 5 pokazują,
jak powinien wyglądać Makefile oraz wła-
ściwy kod programu.
Nieobeznanym z programowaniem wy-
jaśniam, że Makefile to plik zawierający
wszelkie niezbędne instrukcje dla polecenia
Make, aby zbudować naszą aplikację. Zasa-
Rysunek 1. Przykład aplikacji dla PSP, która w założeniu ma zastąpić oryginalną powłokę
dniczo, takie pliki składają się z makr (zmien-
(zawiera 10 aplikacji (np. książkę adresową), 15 gier oraz inne elementy
nych), celów oraz ich zależności. W sytu-
34 luty 2006
programowanie
PSP
Tabela 1. Opis makr i typów danych wykorzystanych w naszym przykładzie
Makro lub typ danych Opis
PSP_MODULE_INFO(name, attributes, Definicja naszej aplikacji, wyświetlana przy przeglądaniu menu na PSP. Jest także zdefinio-
major_version, minor_version) wana w pliku Makefile, więc nie jest właściwie konieczne definiowanie jej w kodzie.
PSP_MODULE_INFO("Hello World", 0, 0, 1);
PSP_MAIN_THREAD_ATTR(attr) Tutaj określamy, gdzie powinien zostać umieszczony główny wątek naszej aplikacji (w
PSP_MAIN_THREAD_ATTR(THREAD_ pamięci użytkownika, w pamięci jądra, czy gdzie indziej, np. poprzez otwarcie dostępu do
ATTR_USER | THREAD_ATTR_VFPU); VFPU).
#define printf pspDebugScreenPrintf Ponieważ nie można tutaj korzystać z funkcji printf() z stdio.h, wykorzystamy pspDebugScre-
enPrintf() z pspdebug.h. Jej parametry oraz format danych są takie same, jak w przypadku
oryginalnej printf().
SceCtrlData Struktura ta zawiera dane zwracane po odczytaniu stanu sterowania.
typedef struct SceCtrlData {
/** The current read frame. */
unsigned int TimeStamp;
/** Bit mask containing zero or more of ::PspCtrlButtons. */
unsigned int Buttons;
/** Analogue stick, X axis. */
unsigned char Lx;
/** Analogue stick, Y axis. */
unsigned char Ly;
/** Reserved. */
unsigned char Rsrv[6];
} SceCtrlData;
Tabela 2. Opis wykorzystanych funkcji z pspkernel.h, pspdebug.h i pspctrl.h z pspsdk
Funkcja Opis
void pspDebugInitScreen(void) Funkcję tę wykorzystuje się do przełączenia ekranu w tryb debugowania. Standardowo nie jest
on aktywny na PSP, ponieważ zazwyczaj oprogramowanie działa w trybie graficznym. Powoduje
ona także wyczyszczenie ekranu, zgodnie ze zdefiniowanym kolorem tła (domyślnie, czarnym).
void pspDebugScreenSetTextColor(u32 Ta funkcja ustawia kolor tekstu wyświetlanego na ekranie przez pspDebugScreenPrintf(). Jej
color) argumentem jest 32-bitowa liczba całkowita bez znaku; można ją podać w postaci szesnastko-
wej, w formacie 0xRRGGBBAA  gdzie A to (niewykorzystywany tutaj) kanał alfa, pozostałe zaś
to czerwona (R), zielona (G) i niebieska (B) składowa koloru.
void pspDebugScreenSetBackColor(u32 Określa kolor tła ekranu debugowania, przyjmując na wejściu taką samą liczbę, jak w przypad-
color) ku koloru tekstu.
void pspDebugScreenSetXY(int x, int y) Określa współrzędne X i Y na ekranie (w jednostkach znaków), w których umieszczony zostanie
kursor dla funkcji printf().
void pspDebugScreenPrintf(const char Wyświetla tekst na ekranie debugowania; taka sama składnia jak oryginalny printf.
*fmt, ...) __attribute__((format(printf,1,2)))
int sceCtrlSetSamplingCycle(int cycle) Ustawia wartość cyklu próbkowania kontrolera, domyślnie wynosi ona 0.
int sceCtrlSetSamplingMode(int mode) Określa tryb pracy kontrolera. Wartość argumentu musi odpowiadać typowi wyliczeniowemu
PspCtrlMode z pspctrl.h.
enum PspCtrlMode
{
PSP_CTRL_MODE_DIGITAL = 0,
PSP_CTRL_MODE_ANALOG
};
int sceCtrlReadBufferPositive(SceCtrlData Odczytuje stan kontrolera count razy i wstawia wyniki do podanej struktury SceCtrlData.
*pad_data, int count);
int sceKernelSleepThread(void) Uśpij bieżący wątek  w przeciwnym razie osiągnięcie przez aplikację końca funkcji main spo-
wodowałoby jej zakończenie i powrót do powłoki PSP.
void sceKernelExitGame(void) Wyjdz z gry i wróć do powłoki PSP.
www.lpmagazine.org 35
programowanie
Listing 5. Przykład Hello Linux
#include SetupCallbacks();
#include
pspDebugScreenSetBackColor(0xFFFFFFFF);
#include
pspDebugScreenSetTextColor(0x00000000);
PSP_MODULE_INFO("Hello World", 0, 0, 1);
pspDebugScreenInit();
S
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER |
sceCtrlSetSamplingCycle(0);
THREAD_ATTR_VFPU);
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
#define printf pspDebugScreenPrintf
while(!done){
int exit_callback(int arg1, int arg2, void *common){
pspDebugScreenSetXY(28, 16);
sceKernelExitGame();
sceCtrlReadBufferPositive(&pad, 1);
return 0;
if (pad.Buttons != 0){
}
printf("Hello Linux");
int CallbackThread(SceSize args, void *argp){
pspDebugScreenSetXY(27, 17);
int cbid;
if (pad.Buttons & PSP_CTRL_SQUARE){
S
cbid = sceKernelCreateCallback("Exit Callback",
printf("Square pressed \n");
exit_callback, NULL);
}
sceKernelRegisterExitCallback(cbid);
if (pad.Buttons & PSP_CTRL_TRIANGLE){
sceKernelSleepThreadCB();
printf("Triangle pressed \n");
return 0;
}
}
if (pad.Buttons & PSP_CTRL_CIRCLE){
int SetupCallbacks(void){
printf("Cicle pressed \n");
int thid = 0; }
if (pad.Buttons & PSP_CTRL_CROSS){
S
thid = sceKernelCreateThread("update_thread",
printf("Cross pressed \n");
CallbackThread,0x11, 0xFA0, 0, 0);
}
if(thid >= 0){
} else {
sceKernelStartThread(thid, 0, 0);
pspDebugScreenClear();
}
}
return thid;
}
}
sceKernelExitGame();
int main(void){
return 0;
int done = 0;
}
SceCtrlData pad;
acji programowania PSP musimy jedynie napisz make. Uczyniwszy to, możesz zain- finiowane w pspsdk w pspkernel.h, pspde-
zdefiniować makra, gdyż cele zostaną stalować uzyskany plik PBP w sposób bug.h oraz pspctrl.h. Wykorzystane przez
zdefiniowane automatycznie poprzez włą- odpowiedni dla twojej wersji firmware'u. nas funkcje opisuje Tabela 2.
czenie pliku build.mak z PSPSDK. Poniżej Jak już zapewne zauważyliście, nie- Więcej informacji o funkcjach pspsdk
znajdziecie krótki opis niektórych makr: które części kodu nie są typowe dla pro- znalezć można pod /usr/local/pspdev/psp/
gramowania w C/C++. Wykorzystywane sdk/include, a ponadto w katalogu /usr/
" TARGET (nazwa docelowego pliku .elf makra i typy danych są wyjaśnione local/pspdev/psp/sdk/samples można znalezć
 właściwego, nieopakowanego pliku w Tabeli 1. wiele przykładów.
binarnego); Pierwsze trzy funkcje w kodzie są dość
" OBJS (moduły, z których będzie zbudo- skomplikowane, ale nie przejmuj się  nie Podsumowanie
wana nasza aplikacja; opcjonalne); jest konieczne ich zrozumienie. Ogólnie Tworzenie aplikacji dla PSP nie jest trudne,
" CFLAGS & CXXFLAGS (flagi kompilato- rzecz biorąc, przygotowują one program jak można było zobaczyć, gdyż mamy
rów: C i C++); do działania na PSP oraz pozwalają nie przygotowany już cały zestaw odpowied-
" ASFLAGS (flagi asemblera); przejmować się zawieszaniem konso- nich funkcji. Ponadto, można wykorzy-
" LIBS (flagi linkera (ld), np. -lpng, jeżeli li bądz wychodzeniem z gry w niepożą- stywać dodatkowe biblioteki, np. SDL do
chcemy dołączyć libpng); danych momentach. Pamiętaj tylko, aby grafiki dwuwymiarowej. Zachęcam do
" EXTRA_TARGETS (sygnalizuje, że chcemy zawsze dodawać je do swojego kodu oraz eksperymentów i dzielenia się owocami
zapakować nasz program w format wywoływać SetupCallbacks() z funkcji swojej pracy.
PBP); main() aplikacji.
" PSP_EBOOT_TITLE (nazwa aplikacji do Wreszcie, przyjrzyjmy się kodowi funk-
W Internecie:
wyświetlenia w menu PSP). cji main(). Pamiętajmy przy tym, że
chcemy jedynie wyświetlić  Hello Linux
" Strona deweloperów dla PSP:
Jeżeli stworzyłeś już pliki Makefile oraz na ekranie po naciśnięciu przycisku. Do
http://www.ps2dev.org/
main.c, aby zbudować aplikację, po prostu tego celu wykorzystujemy funkcje zde-
36 luty 2006


Wyszukiwarka

Podobne podstrony:
Visual C 2005 Express Edition Tworzenie aplikacji dla Windows
2006 02 Qt ISO Maker–moja pierwsza aplikacja w Qt [Programowanie]
tworzenie aplikacji w jezyku java na platforme android
Tworzenie biznesplanu dla bystrzakow biznby
Sony Playstation 2 Guia de Reparo
Tworzenie aplikacji okienkowych (programowanie)
PHP i Oracle Tworzenie aplikacji webowych od przetwarzania danych po Ajaksa
2006 02 Zespol bolesnego barku hemiplegika
SIMR MAT1 EGZ 2006 02 08a rozw
SIMR MAT1 EGZ 2006 02 01b rozw
2006 02 Wyposażamy od A do Z
Facebook tworzenie aplikacji zaproszenie
tworzenie aplikacji na?cebook
2006 02 Czy udar mózgu można mierzyć

więcej podobnych podstron