#homebrew #module #apps #graphics #regular #plugin #prx

nightly no-std psp

一个用于构建完整PSP模块的库,包括PRX插件和常规homebrew应用

24个版本

0.3.10 2024年6月27日
0.3.8 2024年4月17日
0.3.7 2023年11月6日
0.3.6 2023年5月7日
0.1.1 2020年6月30日

硬件支持 中排名第16

每月下载量46
用于 2 个包

MIT 许可证

1MB
16K SLoC

包含 (静态库,65KB) libunwind_lto.a,(静态库,55KB) libunwind.a

rust-psp

一个用于构建完整PSP模块的库,包括PRX插件和常规homebrew应用。

#![no_std]
#![no_main]

psp::module!("sample_module", 1, 1);

fn psp_main() {
    psp::enable_home_button();
    psp::dprintln!("Hello PSP from rust!");
}

请参阅 examples 目录中的示例程序。

PSPSDK呢?

该项目是一个全新的SDK,不依赖于原始的C/C++ PSPSDK。它旨在成为 完整 的替代品,具有更高效的图形功能实现,并添加了缺失的库。

特性 / 路线图

  • core 支持
  • PSP系统库支持
  • alloc 支持
  • panic = "unwind" 支持
  • 基于宏的VFPU汇编器
  • 完整的3D图形支持(在某些情况下比PSPSDK更快!)
  • 不依赖于PSPSDK / PSPToolchain
  • 与PSPSDK的用户模式支持完全一致
  • 将端口定义移植到 libc
  • 添加创建内核模块的支持
  • 添加 std 支持
  • 自动签名EBOOT.PBP文件以在未经修改的PSP上运行
  • 实现/逆向未知库

依赖项

为了编译PSP,您需要一个Rust nightly 版本,等于或晚于 2024-06-19rust-src 组件。请使用 https://rustup.rs/ 安装Rust

如果您是Rust新手,请使用以下设置。(您也可以在每个项目中手动设置覆盖)。

$ rustup default nightly && rustup component add rust-src

您还需要安装 cargo-psp

$ cargo install cargo-psp

运行示例

输入以下示例目录之一,例如 examples/hello-world,然后运行 cargo psp

这将创建一个位于 target/mipsel-sony-psp/debug/ 目录下的 EBOOT.PBP 文件。

假设您已经安装了定制的PSP固件,您可以简单地将此文件复制到您的记忆棒上的 PSP/GAME 下的新目录中,它将在您的XMB菜单中显示。

.
└── PSP
    └── GAME
        └── hello-world
            └── EBOOT.PBP

如果您没有PSP,我们建议使用 PPSSPP仿真器。请注意,图形代码非常敏感,如果您正在编写图形代码,我们建议在真实硬件上进行开发。PPSSPP在某些方面更为宽松。

高级用法:PRXEncrypter

如果您没有安装CFW的PSP,您可以使用 PRXEncrypter 手动签名PRX,然后使用 pack-pbp 重新打包。

如果您已安装PSPSDK并手动构建了PSPLink副本,您也可以使用 psplinkpspshtarget/mipsel-sony-psp/debug/ 下运行 .prx。请参考这些程序的安装和使用指南。

调试

使用来自 pspdev github组织psplinkusb v3.1.0GNU gdb (GDB) 11.0.50.20210718-git 或更高版本)的最新版本的psplink和psp-gdb,Rust类型得到完全支持,提供丰富的调试体验。在您的发布二进制文件中启用调试符号

Cargo.toml

[profile.release]
debug = true

并遵循 PSPlink手册 的第6部分说明。

用法

要将 psp 包添加到您的Rust程序中,请将其添加到 Cargo.toml,就像添加任何其他依赖项一样。

[dependencies]
psp = "x.y.z"

在您的 main.rs 文件中,您需要设置一个基本的骨架,如下所示

#![no_std]
#![no_main]

// Create a module named "sample_module" with version 1.0
psp::module!("sample_module", 1, 0);

fn psp_main() {
    psp::enable_home_button();
    psp::dprintln!("Hello PSP from rust!");
}

现在,您只需运行 cargo psp 来构建您的 EBOOT.PBP 文件。您也可以通过运行 cargo psp --release 来创建一个发布构建。

如果您想使用例如图标或新标题自定义EBOOT,您可以在项目根目录中创建一个 Psp.toml 文件。请注意,所有键都是可选的

title = "XMB title"
xmb_icon_png = "path/to/24bit_144x80_image.png"
xmb_background_png = "path/to/24bit_480x272_background.png"
xmb_music_at3 = "path/to/ATRAC3_audio.at3"

更多选项可以在 此处 找到。

错误[E0460]:找到可能更新的 ...

如果您收到此类错误

error[E0460]: found possibly newer version of crate `panic_unwind` which `psp` depends on
 --> src/main.rs:4:5
  |
4 | use psp::dprintln;
  |     ^^^
  |
  = note: perhaps that crate needs to be recompiled?

只需清理您的目标目录即可修复

$ cargo clean

依赖项

~0.7–1.3MB
~30K SLoC