PicoDrive (PlayStation 2 port)

Update 2014/03/29: v1.13: Added new features and fixed up some existing features.
Update 2013/09/23: v1.12: Features fixup.
Update 2013/09/22: v1.11: Features fixup.
Update 2013/09/21: v1.10: Updated to PicoDrive v1.51b.
Update 2013/09/14: Initial public release.

This is a port of PicoDrive v1.51b for the PlayStation 2 console. Although another Megadrive emulator called PGEN does exist, I never remembered that it was able to run games like Sonic 3 at full 60 FPS.

I figured that anything good enough for the PSP would be also good enough for the PlayStation 2... especially since its EE (The "main" CPU) is a 64-bit MIPS with some 128-bit instructions. And so I ported PicoDrive v1.51b over from the PSP to the PlayStation 2.

Why port v1.51b?

Why not the new v1.85 which was released recently long ago by Notaz himself? It's because the PSP port within it appears to be dysfunctional and outdated. I wanted to have something that already works to work on, so that I would have a higher chance to succeed at porting. Even if the port was successfully made without the missing assembly stub (The C alternative could be used instead), it won't be as fast as a fully working copy of v1.51b.

What can I expect from this port?

  1. The basic functionality from PicoDrive v1.51b in general (game compatibility rates, SEGA Megadrive and MegaCD support etc.)
  2. Two-player support (Multitaps are not supported).
  3. Support for the HDD unit, USB mass storage devices and the memory card.
  4. Hardware bilinear filtering support.
  5. Support for the L3 and R3 buttons, as well as the analog sticks (Press the MODE button to enable/disable this functionality).
  6. Support for the NTSC, PAL, 480P and 240P video modes.

Changelog for v1.13:

    <*>Corrected the position of the description text in the Mega/Sega CD menu, which was causing memory corruption. <*>Re-added and fixed the device selection menu. <*>When PicoDrive is started from a USB device, it will now continuously attempt to access the USB device until it can do so successfully. <*>Removed the MP3 decoding thread as it was not giving a performance boost. <*>Changed the newline character from CRLN to just LN, as the PS2SDK has problems with parsing CRLN text files. This, combined with a future update to the PS2SDK, fixes the problem with the game.cfg file ballooning in size. <*>Rewrote some of the I/O functions like the mkdir and remove replacements, to handle different types of paths properly. This probably won't affect end users though, except for developers like me. <*>Corrected the size of and placement of the framebuffer, when running with the 480P video mode. <*>Added a PAL NI (non-interlaced; 288P) video mode.
  1. The 240P video mode has been renamed to "NTSC NI".

Notes/known issues:

  1. The progressive scanning option will not be saved. This is a deliberate limitation, since the PlayStation 2 has no built-in recovery mode in the event that the user enables progressive scanning but the connected display does not support progressive scanning (The Sony TRC forbids game developers from storing the HD mode settings too).
  2. Only memory cards, USB mass storage devices and the PlayStation 2 HDD unit are supported.
  3. Although the HDD unit is supported, PicoDrive cannot be started from the HDD unit with uLaunchELF. Launching it from the hacked HDD OSD of FHDB will work.

Anything under "Future enhancements" isn't going to be done by me for v1.51b because I feel that it's not going to be productive for me at this moment.

Future enhancements:

  1. Port PicoDrive v1.85 over, although the assembly memory module stubs need to be written from scratch.
  2. Connect with Notaz and get the PlayStation 2 port of v1.85 integrated with his repository (So that it'll automatically receive updates whenever PicoDrive gets updated).
  3. Probably fix up the text colour code within menu.c. It currently works because the default colours are black (for the background) and white (for the text). The alpha bit (Bit 15) is set accordingly because black is 0x0000 (transparent) and white is 0xFFFF (Opaque). Since they are at the extreme ends of the colour values, the fact that the GS doesn't use R5G6B5 (It uses A1B5G5R5, where A1 at 1 = opaque) isn't apparent.

Prerequisites for compiling the PlayStation 2 port's source code (Please use their latest available versions!):

  1. libmad and its dependencies.
  2. libpng and its dependencies.
  3. gsKit and its dependencies.
  4. The homebrew PS2SDK.


PicoDrive v1.51b for the PlayStation 2 (v1.13): https://www.mediafire.com/?feemto5wheiut68
PicoDrive v1.51b for the PlayStation 2 (v1.13, source code): https://www.mediafire.com/?et0awrgid1xm6t7

As usual, please do not hotlink to the file as the link/filename will change with every release.