Github: https://github.com/tw-ilson/portable-planet

I already knew that the PSP is the greatest handheld gaming device ever created, and after developing this small homebrew project for it, my enthusiasm is only increased two-or-threefold! The PSP released in December 2004, when I was going on 3 years old. I will admit that I never had one as a kid (I was a child of the DSlite of course), but I remember seeing cool older kids having them. Some years ago, my brother, knowing my enthusiasm for 2000s-era electronics and gaming, got me this one as a gift. And for a while, I did not even pick it up. It just sat on a shelf collecting dust. Well recently, I have discovered the joy of the PSP, and its true greatness.
In 2026, it is easy as heck to install the custom firmware and start loading a microsd with every game you could want from the original playstation library, as well as the PSP’s own impressive library of games. There is also some great emulators1 that have been implemented for the PSP. Well, I figured it was about time I stopped messing around and made my own homebrew app for the PSP. It was surprisingly easy to get started. The homebrew developer community has been supporting and keeping the console alive for all these years, and the tooling is genuinely amazing! I was even able to create a script which allowed me to build and run the code on-device in a single command2. Not to mention, the whole project I was able to develop in Rust, which is super nice, and just goes to show that the community is strong still to this day.
What I decided to develop was a planet generator. A classic computer graphics hello world problem, which combines two (somewhat) simple algorithms and produces a very pleasing result.
The PSP GU is actually very fun to program! It is even more simple than OpenGL, it makes me feel like I am transported back to the 90s before my birth to a time with only fixed-function graphics pipelines, and not all of this programmable shader craziness that we have now. What’s fun about the PSP is that it is modern enough to actually have some complex lighting and texturing functions baked in, and a great variety of options, but there’s actually no way to program them other than flipping bits and passing inputs in a fixed structure. Especially now that I can just feed the example templates into Claude3, and have it fiddle with the parameters and call chain to produce the desired effects easily.
The planet generation works as follows:
- An Icosphere is generated
- A Perlin Noise algorithm is used to offset the points on the sphere.
- “Biomes” are applied to each point on the sphere based on its distance from the center of the sphere.
- Render, apply lighting, etc.
It’s worth noting that each step is slightly more interesting than it might normally be, as we must utilize the PSP’s native math functions for the noise & geometry generation step.
Particularly those for other MIPS-based consoles, like the N64!
Thanks, programmable pipeline!