{"id":14532200,"url":"https://github.com/overdrivenpotato/rust-psp","last_synced_at":"2025-05-15T11:05:20.895Z","repository":{"id":37536104,"uuid":"261681375","full_name":"overdrivenpotato/rust-psp","owner":"overdrivenpotato","description":"Rust on PSP. Panic and allocation support. Access PSP system libraries.","archived":false,"fork":false,"pushed_at":"2025-03-27T06:45:11.000Z","size":7980,"stargazers_count":714,"open_issues_count":29,"forks_count":33,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-04-14T18:08:40.680Z","etag":null,"topics":["eboot","game","game-development","graphics","homebrew","playstation-portable","psp","pspsdk","rust","rust-psp"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/overdrivenpotato.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-05-06T07:17:28.000Z","updated_at":"2025-04-11T15:03:45.000Z","dependencies_parsed_at":"2024-04-25T05:21:39.773Z","dependency_job_id":"0593466f-9f87-45f9-a9da-c4f359a303cb","html_url":"https://github.com/overdrivenpotato/rust-psp","commit_stats":{"total_commits":273,"total_committers":15,"mean_commits":18.2,"dds":0.3296703296703297,"last_synced_commit":"17b0399912b21ba4c9a6f4e7916c16691af04b11"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overdrivenpotato%2Frust-psp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overdrivenpotato%2Frust-psp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overdrivenpotato%2Frust-psp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overdrivenpotato%2Frust-psp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/overdrivenpotato","download_url":"https://codeload.github.com/overdrivenpotato/rust-psp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254328385,"owners_count":22052632,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eboot","game","game-development","graphics","homebrew","playstation-portable","psp","pspsdk","rust","rust-psp"],"created_at":"2024-09-05T00:05:55.243Z","updated_at":"2025-05-15T11:05:20.870Z","avatar_url":"https://github.com/overdrivenpotato.png","language":"Rust","funding_links":[],"categories":["PSP-related"],"sub_categories":["Development"],"readme":"\u003ch1 align=\"center\"\u003erust-psp\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"demo.gif\" /\u003e\u003c/p\u003e\n\u003cp class=\"\" align=\"center\"\u003e\n    \u003ca href=\"https://ci.mijalkovic.ca/teams/rust-psp/pipelines/rust-psp/jobs/run-tests-for-master/\"\u003e\n        \u003cimg src=\"https://ci.mijalkovic.ca/api/v1/teams/rust-psp/pipelines/rust-psp/jobs/run-tests-for-master/badge\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://crates.io/crates/psp\"\u003e\n        \u003cimg src=\"https://img.shields.io/crates/v/psp.svg?style=flat-square\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://docs.rs/psp\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    A library for building full PSP modules, including both PRX plugins and regular\n    homebrew apps.\n\u003c/p\u003e\n\n```rust\n#![no_std]\n#![no_main]\n\npsp::module!(\"sample_module\", 1, 1);\n\nfn psp_main() {\n    psp::enable_home_button();\n    psp::dprintln!(\"Hello PSP from rust!\");\n}\n```\n\nSee `examples` directory for sample programs.\n\n## What about PSPSDK?\n\nThis project is a completely new SDK, with no dependency on the original C/C++\nPSPSDK. It aims to be a **complete** replacement, with more efficient\nimplementations of graphics functions, and the addition of missing libraries.\n\n## Features / Roadmap\n\n- [x] `core` support\n- [x] PSP system library support\n- [x] `alloc` support\n- [x] `panic = \"unwind\"` support\n- [x] Macro-based VFPU assembler\n- [x] Full 3D graphics support (faster than PSPSDK in some cases!)\n- [x] No dependency on PSPSDK / PSPToolchain\n- [x] Reach full parity with user mode support in PSPSDK\n- [x] Port definitions to `libc` crate\n- [ ] Add support for creating kernel mode modules\n- [ ] Add `std` support\n- [ ] Automatically sign EBOOT.PBP files to run on unmodified PSPs\n- [ ] Implement / reverse undiscovered libraries\n\n## Dependencies\n\nTo compile for the PSP, you will need a Rust **nightly** version equal to or\nlater than `2025-03-19` and the `rust-src` component. Please install Rust using\nhttps://rustup.rs/\n\nUse the following if you are new to Rust. (Feel free to set an override manually\nper-project instead).\n\n```sh\n$ rustup default nightly \u0026\u0026 rustup component add rust-src\n```\n\nYou also need `cargo-psp` installed:\n\n```sh\n$ cargo install cargo-psp\n```\n\n## Running Examples\n\nEnter one of the example directories, `examples/hello-world` for instance, and\nrun `cargo psp`.\n\nThis will create an `EBOOT.PBP` file under `target/mipsel-sony-psp/debug/`\n\nAssuming you have a PSP with custom firmware installed, you can simply copy this\nfile into a new directory under `PSP/GAME` on your memory stick, and it will\nshow up in your XMB menu.\n\n```\n.\n└── PSP\n    └── GAME\n        └── hello-world\n            └── EBOOT.PBP\n```\n\nIf you do not have a PSP, we recommend using the [PPSSPP emulator](http://ppsspp.org).\nNote that graphics code is very sensitive so if you're writing graphics code we\nrecommend developing on real hardware. PPSSPP is more relaxed in some aspects.\n\n### Advanced usage: `PRXEncrypter`\n\nIf you don't have a PSP with CFW installed, you can manually sign the PRX using\n`PRXEncrypter`, and then re-package it using `pack-pbp`.\n\n### Advanced usage: PSPLink\n\nIf you have the PSPSDK installed and have built a working copy PSPLink manually,\nyou can also use `psplink` and `pspsh` to run the `.prx` under\n`target/mipsel-sony-psp/debug/` if you prefer. Refer to the installation and\nusage guides for those programs.\n\n### Debugging\n\nUsing the latest version of psplink and psp-gdb from the [pspdev github organization](https://github.com/pspdev) (`psplinkusb v3.1.0 and GNU gdb (GDB) 11.0.50.20210718-git` or later), Rust types are fully supported, providing a rich debugging experience. Enable debug symbols in your release binaries\n\n`Cargo.toml`\n```toml\n[profile.release]\ndebug = true\n```\nand follow the instructions in part 6 of [the PSPlink manual](https://usermanual.wiki/Document/psplinkmanual.1365336729/)\n\n## Usage\n\nTo use the `psp` crate in your own Rust programs, add it to `Cargo.toml` like\nany other dependency:\n\n```toml\n[dependencies]\npsp = \"x.y.z\"\n```\n\nIn your `main.rs` file, you need to setup a basic skeleton like so:\n\n```rust\n#![no_std]\n#![no_main]\n\n// Create a module named \"sample_module\" with version 1.0\npsp::module!(\"sample_module\", 1, 0);\n\nfn psp_main() {\n    psp::enable_home_button();\n    psp::dprintln!(\"Hello PSP from rust!\");\n}\n```\n\nNow you can simply run `cargo psp` to build your `EBOOT.PBP` file. You can also\ninvoke `cargo psp --release` to create a release build.\n\nIf you would like to customize your EBOOT with e.g. an icon or new title, you\ncan create a `Psp.toml` file in the root of your project. Note that all keys are\noptional:\n\n```toml\ntitle = \"XMB title\"\nxmb_icon_png = \"path/to/24bit_144x80_image.png\"\nxmb_background_png = \"path/to/24bit_480x272_background.png\"\nxmb_music_at3 = \"path/to/ATRAC3_audio.at3\"\n```\n\nMore options can be found in the schema defintion [here](/cargo-psp/src/main.rs#L18-L100).\n\n## `error[E0460]: found possibly newer version of crate ...`\n\nIf you get an error like this:\n\n```\nerror[E0460]: found possibly newer version of crate `panic_unwind` which `psp` depends on\n --\u003e src/main.rs:4:5\n  |\n4 | use psp::dprintln;\n  |     ^^^\n  |\n  = note: perhaps that crate needs to be recompiled?\n```\n\nSimply clean your target directory and it will be fixed:\n\n```sh\n$ cargo clean\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foverdrivenpotato%2Frust-psp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foverdrivenpotato%2Frust-psp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foverdrivenpotato%2Frust-psp/lists"}