(WIP) PicoDrive for PSP, skinned to look like Sonic's UGC
Find a file
2020-12-29 12:10:10 +01:00
cpu fixes for gcc warnings wrt 64 bit platforms 2020-12-29 11:13:45 +01:00
jni Merge from libretro/master:46902e0 for repo synchronization 2020-12-05 22:39:06 +01:00
pico core, fixes and improvements for type issues 2020-12-29 11:27:11 +01:00
platform fixes for gcc warnings wrt 64 bit platforms 2020-12-29 11:13:45 +01:00
tools Merge from libretro/master:46902e0 for repo synchronization 2020-12-05 22:39:06 +01:00
unzip use system's zlib 2017-04-17 00:50:49 +03:00
zlib UIQ3 update, some makefile unification, rm old configs, stuff 2008-08-21 10:45:54 +00:00
.gitignore Merge from libretro/master:46902e0 for repo synchronization 2020-12-05 22:39:06 +01:00
.gitmodules mcd, add minimp3 playback support, fix libavcodec playback 2020-12-12 14:30:50 +01:00
AUTHORS update author info 2020-09-18 00:26:34 +02:00
ChangeLog release 1.91 2013-10-12 22:06:29 +03:00
configure fix building for arm arch below armv6 (gp2x, bittboy) 2020-12-29 12:10:10 +01:00
COPYING clarify PicoDrive's license 2013-06-26 03:07:07 +03:00
Makefile fix building for arm arch below armv6 (gp2x, bittboy) 2020-12-29 12:10:10 +01:00
Makefile.libretro libretro, improve ps2 support, switchable renderers, 32X support w/ DRC 2020-12-12 14:51:44 +01:00
README Support latest raspberry GLES library name 2017-12-25 17:38:36 +01:00
README.md sh2 drc, MIPS cache maintenance optimisation 2020-10-11 19:54:51 +02:00

This is my foray into dynamic recompilation using PicoDrive, a Megadrive / Genesis / Sega CD / Mega CD / 32X / SMS emulator.

I added support for MIPS (mips32r1), ARM64 (aarch64) and RISC-V (RV64IM) to the SH2 recompiler, as well as spent much effort to optimize the DRC-generated code. I also optimized SH2 memory access inside the emulator, and did some work on M68K/SH2 CPU synchronization to fix some problems and speed up the emulator.

It got a bit out of hand. I ended up doing fixes and optimizations all over the place, mainly for 32X and CD, 32X graphics handling, and probably some more, see the commit history. As a result, 32X emulation speed has improved a lot.

compiling

I mainly worked with standalone PicoDrive versions as created by configure/make. A list of platforms for which this is possible can be obtained with

configure --help

If you want to build an executable for a unixoid platform not listed in the platform list, just use

configure --platform=generic

If DRC is available for the platform, it should be enabled automatically.

For other platforms using a cross-compiling toolchain I used this, assuming $TC points to the appropriate cross compile toolchain directory:

platform toolchain configure command
gp2x,wiz,caanoo open2x CROSS_COMPILE=arm-open2x-linux- CFLAGS="-I$TC/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/include" LDFLAGS="--sysroot $TC/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux -L$TC/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/lib" ./configure --platform=gp2x
gp2x,wiz,caanoo open2x with ubuntu arm gcc 4.7 CROSS_COMPILE=arm-linux-gnueabi- CFLAGS="-I$TC/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/include" LDFLAGS="-B$TC/gcc-4.1.1-glibc-2.3.6/lib/gcc/arm-open2x-linux/4.1.1 -B$TC/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/lib -L$TC/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/lib" ./configure --platform=gp2x
opendingux opendingux CROSS_COMPILE=mipsel-linux- CFLAGS="-I$TC/usr/include -I$TC/usr/include/SDL" LDFLAGS="--sysroot $TC -L$TC/lib" ./configure --platform=opendingux
opendingux opendingux with ubuntu mips gcc 5.4 CROSS_COMPILE=mipsel-linux-gnu- CFLAGS="-I$TC/usr/include -I$TC/usr/include/SDL" LDFLAGS="-B$TC/usr/lib -B$TC/lib -Wl,-rpath-link=$TC/usr/lib -Wl,-rpath-link=$TC/lib" ./configure --platform=opendingux
gcw0 gcw0 CROSS_COMPILE=mipsel-gcw0-linux-uclibc- CFLAGS="-I$TC/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/include -I$TC/usr/mipsel-gcw0-linux-uclibc/sysroot/usr/include/SDL" LDFLAGS="--sysroot $TC/usr/mipsel-gcw0-linux-uclibc/sysroot" ./configure --platform=gcw0
rg350 rg350 CROSS_COMPILE=mipsel-linux- CFLAGS="-I$TC/usr/include -I$TC/usr/include/SDL" LDFLAGS="--sysroot $TC -L$TC/lib" ./configure --platform=rg350

For gp2x, wiz, and caanoo you may need to compile libpng first.

After configure, compile with

make

helix MP3 decoder

For 32 bit ARM platforms, there is the possibility to compile the helix MP3 decoder into a shared library to be able to use MP3 audio files with CD games. The helix source files aren't supplied because of licensing issues. However, if you have obtained the sources, put them into the platform/common/helix directory, set CROSS to your cross compiler prefix (e.g. arm-linux-gnueabi-) and LIBGCC to your cross compiler's libgcc.a (e.g. /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/libgcc.a), and compile with

make -C platform/common/helix CROSS=$CROSS LIBGCC=$LIBGCC

Copy the resulting ${CROSS}helix_mp3.so as libhelix.so to the directory where the PicoDrive binary is.

installing

You need to install the resulting binary onto your device manually. For opendingux and gcw0, copy the opk to your SD card. For gp2x, wiz and caanoo, the easiest way is to unpack PicoDrive_191.zip on your SD card and replace the PicoDrive binary.

Send bug reports, fixes etc to derkub@gmail.com Kai-Uwe Bloem