Homebrew สำหรับ PSP (PlayStation Portable) แรกในชีวิต หลังจากลง PSPSDK ค้างไว้ในเครื่องเกือบปี วันนี้เกิดอารมณ์ขึ้นลองมาเขียนโปรแกรมคลาสสิค ดู
ผลที่ได้ก็ดังรูปครับ คงต้องงมงูๆปลาๆ กับรื้อฟื้นความหลังกับ C อีกเยอะกว่าจะเขียนคล่อง
ส่วนวิธีทำใครสนใจกดอ่านต่อได้ครับ
วิธีทำเบื้องต้น
- Minimal PSP SDK http://sourceforge.net/projects/minpspw/
- Eclipse Eclipse.org หรือใครจะใช้ DEV C++ ก็ได้ ไม่ว่า
- JPCSP http://jpcsp.org/index.php?p=Downloads Emulator ไว้ใช้ทดสอบโปรแกรมที่เราสร้างขึ้นมาก่อนย้ายลง PSP จริงๆ
ขั้นตอนมีดังนี้ครับ
- สำหรับ Eclipse ให้ลง CDT ( C/C++ Development tools ก่อน ) จากนั้นก็ตั้งค่านิดหน่อยหลังจากติดตั้งโปรเจคแล้วตามนี้เลย (ดูหน้าที่ 7- ครึ่งหน้าที่ 9 )
- เสร็จแล้ว ก่อนอื่นคลิ๊กขวาที่ Project -> C/C++ General -> Paths and Symbols จากนั้นที่ Tab Includes ทั้ง GNU C , GNU C++ (สำหรับคนเขียน C++ ) ให้ add path ไปที่ {Folder ที่ติดตั้ง PSPSDK}/psp/sdk/include เพิ่ม
- ในขั้นแรกเนื่องจากว่าผมเขียน Hello World แบบง่ายๆ Simple สุดเพราะงั้น ให้ include file แค่นี้พอครับ
#include <pspkernel.h>
จากนั้นบรรทัดต่อมาให้ใส่ Code ข้างล่างเพื่อบอกว่า Identify Program เรา (ไม่งั้นคอมไพล์ไม่ได้ )
#include <pspdebug.h>
/* Define the module info section */
PSP_MODULE_INFO("hello", 0, 1, 1); - จากนั้นก็ให้เพิ่มโค้ดต่อไปนี้ลงไป มันคือส่วนเอาไว้ต่อกับ OS ของ PSP เวลาเข้าออกโปรแกรมเฉยๆ ไม่ต้องสนใจก็ได้
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;
} - จากนั้นมาเริ่มเขียนส่วน Main
int main(){
//ใช้ Init ค่า ไม่ต้องสนใจมาก
pspDebugScreenInit();
SetupCallbacks();
// มันคือ Printf ดีๆครับ
PSP_MODULE_INFO("Hello world press [x] for exit");
//ให้โปรแกรมหยุดรอ เหมือน getch() ที่ใช้ๆกัน
sceKernelSleepThread();
return 0;
} - ส่วน Makefile เขียนประมาณนี้ครับ (ก๊อบเขามาอีกทอดนึง) จากนั้นก็คอมไพล์แล้วเอาไฟล์ Eboot.pbp ไปรันเทสทดสอบบน JPCSP
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
References
- http://minpspw.sourceforge.net/files/pspeclipse.pdf
- http://jpcsp.org/index.php?p=Downloads
- http://www.psp-programming.com/tutorials
Sat Aug 07 02:45:54 ICT 2010 | Tags :c homebrew psp
Add Comments