[转] 我的第一個PSP程式: Hello World! PSP編程從這里開始!

来源:百度文库 编辑:神马文学网 时间:2024/04/28 02:01:04
看到不少版友, 對於在PSP上開發軟件都很感興趣, 但因缺乏相關經驗, 不知道該從那裡開始. 本貼就是希望透過編譯和測試一個最簡單的PSP程式, HelloWorld, 給新手作出一個示範.

=== 所需設備和軟件

- PSP
- 電腦 (本篇所包括的只是視窗操作系統)
- PSP軟件開發環境
- 任何editor

(注: 以前需要的 KXploit Tool, 現在已不用了! 詳情見下面的解說.)

(注: 本篇只會講解在Firmware 1.50上測試程式)

=== 安裝開發環境

在滿懷斗志的想著怎麼在PSP上寫個cnreader超級加強版之前, 要開發PSP軟件, 我們首先要在自己的電腦上, 安裝好PSP軟件開發環境, 比較流行的安裝方法有兩個: 1) cygwin+toolchain, 2)devkitPSP.

1) cygwin+toolchain 的安裝方法, 請參考: 简述建立Cygwin环境下的PSP开发环境

2) devkitPSP 的安裝方法, 請參考: 简述安装devkitPSP开发环境, 完全免用Cygwin

cygwin+toolchain 的方法比較"正統", 因在安裝時, 它會從svn.ps2dev.org下載最新的PSPSDK原碼並編譯, 所以安裝好了, 你所擁有的PSPSDK是最新的. 但也因為如此, 它所用的時間比較長, 由數小時至數日不等 ;) 而cygwin是模擬UNIX系統, 要是你不熟識UNIX相關的東西, 在安裝時遇到問題, 也會比較頭痛. 不過只要你一步步的跟著简述建立Cygwin环境下的PSP开发环境, 再參考一下貼內的回應, 應該沒有太大問題的!

devkitPSP的安裝相對來說比較容易, 但它內含的 PSPSDK, 是9月左右的, 要是你並不計較和最新的PSPSDK的兼容問題, 作為學習在PSP上編程是足夠的了.

有不少朋友在安裝開發環境時遇到問題, 但開發環境是必需的, 大家只要給點耐性, 小心的跟著安裝教程, 一定可以安裝好的!


=== Hello World

好了, 大家也等了很久了, 馬上看看我們今天的主角, Hello World的代碼:
  • /// Hello World - My First App for the PSP
  • #include
  • #include
  • PSP_MODULE_INFO("Hello World", 0, 1, 1);
  • // 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();
  •        pspDebugScreenPrintf("Hello World");
  •        sceKernelSleepThread();
  •        return 0;
  • }

复制代码


還有它的相關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

复制代码


代碼的內容, 我們可以先不用理會, 我們現在所想要做的, 是把它編譯, 然後放上PSP測試! 大家可以下載本篇的附件包, 然後把附件包解壓, 放在任何地方都可以.

在cygwin 環境, 假設我們是放在我們的"home"目錄內, 即"x:\cygwin\home\myname"里:

- 打開cygwin
- cd HelloWorld
- make

要是你看到類似以下的畫面, 高舉雙手大叫3 聲吧! 你成功了! 你已編譯成功你的第一個PSP程式!


EBOOT.PBP就是我們所需要的最重要的執行包!

=== 跑吧, Hello World!

接下來, 我們就可以把編譯好的Hello World, 放到PSP上試跑了!

但剛才編輯好的東西, 還不可直接放到PSP上, 一般我們要用 Kxploit tool 做點工作, 但現在的 pspsdk, 己不再需要它了, 我們不用 "make", 而用 "make kxploit" 就行了:



"make kxploit" 後, 在當前文件夾內, 會多了兩個文件夾: "hello" 和 "hello%".

當我們把 PSP 以 USB 綫接到電腦, 在PSP上, 選"USB Connection", 這時, 視窗操作系統會把PSP當成一個可移動的儲存裝置, 並會給予一個儲存裝置字母, 例如"M:".

這時, 我們把"hello" 和 "hello%"抄到PSP 的 MEMORY STICK 上的"\PSP\GAME" 里, 即可以測試了!

在PSP上, 離開"USB Connection", 移至"Game"->"Memory Stick"並進入, 我們可能會先看到一個"Corrupted Data", 不用理會它, 向下移一格, 應該就會看到我們的"Hello World"了!按下執行按鈕, 你就會看到我們非常熟識的句子"Hello World"打印在PSP龐大的螢幕上 :) 成功!!!

當你欣賞完了美麗的"Hello World!"顯示, 可以按"Home"按鈕, 選擇退出, 回到PSP的系統菜單!

看到那個"Corrupted Data" 圖標, 大家可能有點不爽, 要是你用的是比較新的 pspsdk, 那麼你可以試一下不用 "make kxploit" 而用 "make SCEkxploit":



"make kxploit" 後, 在當前文件夾內, 會多了兩個文件夾: "__SCE__hello" 和 "%__SCE__hello", 我們把它們抄到PSP 的 MEMORY STICK 上的"\PSP\GAME" 里, 就可以沒有Corrupted Data" 的圖標而又正常的測試我們的程序!

=== 接下來...

接下來大家可以用Hello World 為根基, 加加減減的編寫別的東西了. 至於要寫什麼, 那要看你的興趣了!

想編寫應用程式, 可以參考: PSP程序代码收集

想編寫遊戲, 請看: 學習PSP遊戲制作實況記錄 (雖然標題是學習寫遊戲, 但其實例子中很多東西也適合在應用程式上的)

常見問題可以看一下: PSP軟件開發FAQ(問與答)