Home | Tags | Gallery | About | RSS 

Homebrew PSP แรกในชีวิต

 

Homebrew สำหรับ PSP (PlayStation Portable) แรกในชีวิต หลังจากลง PSPSDK ค้างไว้ในเครื่องเกือบปี วันนี้เกิดอารมณ์ขึ้นลองมาเขียนโปรแกรมคลาสสิค ดู
ผลที่ได้ก็ดังรูปครับ คงต้องงมงูๆปลาๆ กับรื้อฟื้นความหลังกับ C อีกเยอะกว่าจะเขียนคล่อง

ส่วนวิธีทำใครสนใจกดอ่านต่อได้ครับ

วิธีทำเบื้องต้น

  1. Minimal PSP SDK http://sourceforge.net/projects/minpspw/
  2. Eclipse Eclipse.org  หรือใครจะใช้ DEV C++ ก็ได้ ไม่ว่า
  3. JPCSP http://jpcsp.org/index.php?p=Downloads Emulator ไว้ใช้ทดสอบโปรแกรมที่เราสร้างขึ้นมาก่อนย้ายลง PSP จริงๆ

ขั้นตอนมีดังนี้ครับ

  1. สำหรับ Eclipse ให้ลง CDT ( C/C++ Development tools ก่อน ) จากนั้นก็ตั้งค่านิดหน่อยหลังจากติดตั้งโปรเจคแล้วตามนี้เลย (ดูหน้าที่ 7- ครึ่งหน้าที่ 9 )
  2. เสร็จแล้ว ก่อนอื่นคลิ๊กขวาที่ Project -> C/C++ General -> Paths and Symbols จากนั้นที่ Tab Includes ทั้ง GNU C , GNU C++ (สำหรับคนเขียน C++ ) ให้ add path ไปที่ {Folder ที่ติดตั้ง PSPSDK}/psp/sdk/include เพิ่ม
  3. ในขั้นแรกเนื่องจากว่าผมเขียน Hello World แบบง่ายๆ Simple สุดเพราะงั้น ให้ include file แค่นี้พอครับ
    #include <pspkernel.h>
    #include <pspdebug.h>
    จากนั้นบรรทัดต่อมาให้ใส่ Code ข้างล่างเพื่อบอกว่า Identify Program เรา (ไม่งั้นคอมไพล์ไม่ได้ )

    /* Define the module info section */
    PSP_MODULE_INFO("hello", 0, 1, 1);
  4. จากนั้นก็ให้เพิ่มโค้ดต่อไปนี้ลงไป มันคือส่วนเอาไว้ต่อกับ 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;
    }
  5. จากนั้นมาเริ่มเขียนส่วน Main
    int main(){
        //ใช้ Init ค่า ไม่ต้องสนใจมาก
        pspDebugScreenInit();
        SetupCallbacks();
       
        // มันคือ Printf ดีๆครับ
        PSP_MODULE_INFO("Hello world press [x] for exit");

        //ให้โปรแกรมหยุดรอ เหมือน getch() ที่ใช้ๆกัน
        sceKernelSleepThread();
        return 0;
    }
  6. ส่วน 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

  1. http://minpspw.sourceforge.net/files/pspeclipse.pdf
  2. http://jpcsp.org/index.php?p=Downloads
  3. http://www.psp-programming.com/tutorials

   Sat Aug 07 02:45:54 ICT 2010 | Tags :c  homebrew  psp  

Add Comments

ชื่อ :
Commentว่า :

กรุณาใส่รหัสข้อความก่อน Submit ด้วย