What this is:
A fully, device side 3d rendering, done in real time over the BCM2722 chip on a flash modded video.
AI Disclaimer
The video was taken by me, and not generated via AI.
What was generated by AI was:
- The documentation I relied on
- Some of the lines of code that went into this example (code-completion)
- much of the test-bench done locally prior to putting it on device.
- Much of the simulator code, which got updated as more was learned about the hardware and software layout needed to accomplish this
- Some of the drawn assets within the test video. I did do some of the basic geometry, but I'm not a 3d artist, and I'm not adept at converting things into C-code, or vectorized triangles for the graphics module.
Device Specs:
German-region iPod Video 5.5G (64MB version)
iFlash Quad mod with 1TB of flash storage
3000mah mod
Haptic Feedback Mod
USB-C Mod
(Purchased from PlayerMods -- I am not endorsing nor sponsored by them, though I've enjoyed the device just fine)
Custom RockBox OS (See Context and Anticipated Questions)
Context
This is part of a much larger project, but I thought everyone here might find this nifty.
In my work on reverse engineering the PP5022 and BCM2722 for my main project, I decided to speed up testing features of the BCM2722 (the dedicated video chip on the iPod Video models) by creating a 3D rendering engine.
The video here is an example of my test run. The menu displayed is part of my developer menus on the backend of my build. The backend is a heavily modified version of RockBox, but I won't go into detail here about how much I've modified it, as I plan to release a GitHub repo shortly that will be more interesting to talk about.
Anticipated Questions
How was this done?
After examining publicly posted spec sheets, the results of some black-box, clean room style testing of the Apple-built display drivers on my device, and some general knowledge of hardware and C design, I figured that it would be possible to deploy a 3d graphics engine for the iPod Video that would run at natively comfortable speeds.
What do you plan to do with it?
Not entirely sure. I mean, much of what I learned will be useful in implementing what I'm calling 'Album Flow' on my firmware (Cover Flow-like view). I am also thinking of releasing, for the same Firmware, when available publicly, Game SDKs, including an example Game that uses the 3D rendering engine done here.
When can we see it ourselves?
I don't know exact dates, and I don't want to get anyone's hopes up for specific timelines, but the engine, documentation for the three chips inside the iPod Video, and of course, the base firmware that was able to run this demo, are all a part of the release plan for my upcoming project.
What makes this interesting?
Well, importantly, none of that rendering was done CPU side. Obviously there was some DMA/disk IO stuff going on in the background on a CPU thread, but the actual drawing of the images was done all on the GPU (VideoCore II, BCM2722). The chip itself is vastly more efficient than the CPU, and, more importantly, can be turned entirely off at the hardware level.
This means that, if you want to render things, such as Cover Flow, UIs, etc etc, you can do most of that processing via the BCM2722, and when the screen is off or not being updated, you can either have that chip idle or entirely shut off.
Currently, RockBox uses a pass-through method that generates most frames on CPU and sends commands of WHAT to draw to the BCM2722. In this case, the BCM2722 is driving the visuals and calculating what to draw, and drawing it itself.
Finally
If you have any other questions, comments, or hopes for what insight my project might be able to provide, let me know. I posted this to show people what the iPod Video can do, with the general feeling that, while some of it has been publicly explored, not enough has been shared.
My hope is that my ultimate project gets a larger discussion started of how to use our old hardware, and especially these lovely devices in particular, to their fullest capacity.