#psp #可执行文件 #模块 #homebrew #sony #cargo-build #prx

应用 cargo-psp

cargo build 创建 Sony PSP 可执行文件的包装器

16 个版本

0.2.6 2024年6月27日
0.2.4 2024年4月18日
0.2.3 2023年5月4日
0.2.2 2022年9月25日
0.1.0 2020年6月10日

#72 in Cargo 插件

Download history 4/week @ 2024-04-26 180/week @ 2024-05-10 35/week @ 2024-05-17 5/week @ 2024-05-24 3/week @ 2024-05-31 8/week @ 2024-06-07 10/week @ 2024-06-14 164/week @ 2024-06-21 35/week @ 2024-06-28 3/week @ 2024-07-05

1,126 每月下载量

MIT 许可证

48KB
1K SLoC

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 crate在您自己的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]:发现可能更新的版本crate ...

如果您遇到类似错误

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

依赖项

~4.5MB
~83K SLoC