2006.02_Tworzenie aplikacji dla Sony PlayStation Portable_[Programowanie].pdf

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