PSP开发笔记(一)

参考网站 https://pspdev.github.io/

以WSL为例:假设已安装Ubuntu。

注意不要同时开虚拟机,否则插入读卡器或PSP时没有存储设备。

安装依赖:

sudo apt-get update
sudo apt-get install build-essential cmake pkgconf libreadline8 libusb-1.0-0 libgpgme11 libarchive-tools fakeroot

更改环境变量:

 nano ~/.bashrc

增加以下行(切记要将原来PSPDEV的~展开为/home/zhaochen,以我自己环境的为例,否则会出现链接错误):

 export PSPDEV="/home/zhaochen/pspdev"
 export PATH="$PATH:$PSPDEV/bin"

关闭原终端并开启一个新终端窗口,检查环境变量是否设置正确:

psp-config --pspdev-path

返回:

/home/zhaochen/pspdev

测试编译器工作是否正常:

psp-gcc -v

返回:

Using built-in specs.
COLLECT_GCC=psp-gcc
COLLECT_LTO_WRAPPER=/home/zhaochen/pspdev/bin/../libexec/gcc/psp/14.1.0/lto-wrapper
Target: psp
Configured with: ../configure --quiet --prefix=/home/runner/work/pspdev/pspdev/pspdev --target=psp --with-sysroot=/home/runner/work/pspdev/pspdev/pspdev/psp --with-native-system-header-dir=/include --enable-languages=c,c++ --with-float=hard --with-newlib --disable-libssp --disable-multilib --enable-threads=posix --silent
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.1.0 (GCC)

写一个hello world程序:

新建文件夹/home/zhaochen/psp/hello_world/

main.c

#include <pspkernel.h>
#include <pspdebug.h>
#include <pspdisplay.h>

// PSP_MODULE_INFO is required
PSP_MODULE_INFO("Hello World", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);

int exit_callback(int arg1, int arg2, void *common) {
	sceKernelExitGame();
	return 0;
}

int callback_thread(SceSize args, void *argp) {
	int cbid =sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
	sceKernelRegisterExitCallback(cbid);
	sceKernelSleepThreadCB();
	return 0;
}

int setup_callbacks(void) {
	int thid = sceKernelCreateThread("update_thread", callback_thread, 0x11, 0xFA0, 0, 0);
	if(thid >= 0)
		sceKernelStartThread(thid, 0, 0);
	return thid;
}

int main(void) {
	setup_callbacks();

	pspDebugScreenInit();
	while(1) {
		pspDebugScreenSetXY(0,0);
		pspDebugScreenPrintf("Hello World! on PSP\nby Zhao Chen @2024");
		sceDisplayWaitVblankStart();
	}
	return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(hello)

add_executable(${PROJECT_NAME} main.c)

target_link_libraries(${PROJECT_NAME} PRIVATE
    pspdebug
    pspdisplay
    pspge
)

# Create an EBOOT.PBP file
create_pbp_file(
    TARGET ${PROJECT_NAME}
    ICON_PATH NULL
    BACKGROUND_PATH NULL
    PREVIEW_PATH NULL
    TITLE ${PROJECT_NAME}
    VERSION 01.00
)

构建命令:

mkdir build && cd build
psp-cmake ..
make

在存储卡的/PSP/GAME/ 下新建一个hello_world文件夹

拷贝EBOOT.PBP至其中即可。

生成海报

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注