Thanks! All design files were released
here.
Small update:
After thinking about the implementation for a while, last week I was working on the last planned feature: MAGH auto-detection.
Over the last months I noticed that for some games the MAGH value, or horizontal resolution, is not static - you have to enter the menu and change it manually multiple times. PAL GOW 1 & 2 were the worst offenders – the game itself runs at 512ix512 (MAGH 4) and all FMV scenes run at 512ix640 (MAGH 3).
It’s annoying to keep changing the settings, so I was looking into a way to adjust it automatically. For this I wrote a module in the video processor that runs in parallel to the regular data path. It essentially iterates through all video data for each frame to determine the currently displayed horizontal resolution, i.e. the MAGH setting. That’s a lot of data to analyze - at 2560 subpixels per line this leads to about 33 Megapixels of data per second. The output is the estimated MAGH value that connects directly to a video processor register the SysCon can read.
In the SysCon menu I added another setting called ‘MAGH Autodetect’ which, when enabled, will poll the estimated MAGH value from the video processor at about 250Hz and recalculate the video settings automatically - if there is a change.
Even though this new feature is quite simple overall, I was surprised by how well it worked in the games I tested, even with PS1 games via DKWDRV! There are some limitations, though: This is the only module that operates by analyzing the raw video data, so the result heavily depends on what is displayed. A full screen of a single color will not lead to a valid MAGH estimate for example. I can also think of a couple edge cases where the MAGH detection can output incorrect values, but I haven’t seen those so far outside of my simulations.
Interestingly, some PS1 games I tried seem to run with a MAGH setting of 7 (i.e. 320p horizontal resolution, or 8 subpixels/pixel) and also get detected accordingly.
But correct detection is not always desirable: here, a MAGH value of 3 (i.e. 640p horizontally) will lead to a sharper image overall - This would be free 2x integer scaling. That’s why I added an edge case here where MAGH 7 is always detected as MAGH 3.
I already pushed the new feature to the repository, along with some other corrections in the documentation.
View attachment 40994
-----------
And I think that’s it! All features are implemented, all requirements satisfied, the product is on my table and the design files were released, what a wild ride this was! I hope the worklog was interesting to read and inspired people to give the PS2 some more love – it deserves it, what a great console!
I certainly learned a lot for sure - it was my first time soldering BGAs, my first proper FPGA project, my biggest C project, my first time surface modeling a housing, my first flex PCBs, and in general the most complex system architecture I’ve ever defined (both work and private). I’m very proud of what was achieved and now it’s finally time to properly tackle my PS2 backlog of over a hundred games!!
Of course, the end result is not flawless - I tried to note down some things I would do differently next time:
- The speakers are OK, but could be improved -> phone speaker modules?
- The 5 inch IPS looks good, but there are certainly better displays out there
- Next time I would prefer to separate the battery protector & fuel gauge from the mainboard (repairability, they have very limited write cycles)
- The battery connections could be improved. I don’t like the fact that they require custom crimped cables
- The battery management is way overkill
- It would be better to have all external connectors on separate boards for repairability
- The RP2040s on the gamepads are way overkill, smaller MCUs would do the job just fine and would be more efficient
- The shell is FDM printed and therefore has defects. While I personally prefer the FDM printed look (feels nice and has some grip), a more polished look would probably be preferred.
- The T20 is amazing and very low power, but a couple of DSPs would be very helpful for more complex image processing
And in case someone is wondering what happened to the custom mainboard that started this whole project, it’s still working 3 years later and recently got a very special place in my collection!
View attachment 40995