changeset 744:c7fa50576c70

Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as they seem to call it.) Also removed support for the "old" libSIDPlay2 API, only supporting the "new" CVS trunk COMI API for the old libSIDPlay2. We'll see how that goes ..
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 05 Nov 2012 17:24:16 +0200
parents 99ed62858072
children 9dc5378cc806
files acinclude.m4 configure.ac src/config.h.in src/xs_sidplay.h src/xs_sidplay2.cc
diffstat 5 files changed, 213 insertions(+), 245 deletions(-) [+]
line wrap: on
line diff
--- a/acinclude.m4	Mon Nov 05 15:19:21 2012 +0200
+++ b/acinclude.m4	Mon Nov 05 17:24:16 2012 +0200
@@ -43,32 +43,6 @@
 ])
 
 
-AC_DEFUN([XS_LIB_RESULT],
-[
-    define([Name], [translit([$1], [a-z], [A-Z])])dnl
-    if test "x$xs_have_$1" = "xyes"; then
-        if test "x$xs_$1_cxxflags" != "x" || test "x$xs_$1_ldflags" != "x"; then
-            AC_MSG_RESULT([$xs_$1_cxxflags $2 $xs_$1_ldflags $3])
-        else
-            AC_MSG_RESULT([yes])
-        fi
-
-        Name[]_LIBS="$xs_$1_ldflags $2"
-        Name[]_CFLAGS="$xs_$1_cxxflags $3"
-        AC_SUBST(Name[]_LIBS)dnl
-        AC_SUBST(Name[]_CFLAGS)dnl
-    else
-        AC_MSG_RESULT([no])
-    fi
-])
-
-
-AC_DEFUN([XS_PROG_PKGCONFIG],
-[
-    AC_PATH_PROG([PKG_CONFIG], [pkg-config])dnl
-])
-
-
 AC_DEFUN([XS_ARG_WITH], [dnl
     define([Name], [translit([$1], [a-z], [A-Z])])dnl
     define([roflCopter], [Enable $2 with install-PREFIX])dnl
@@ -156,7 +130,21 @@
         fi
     ])
     eval "$xs_cv_have_sidplay1"
-    XS_LIB_RESULT([sidplay1], [-lsidplay], [])
+
+    if test "x$xs_have_sidplay1" = "xyes"; then
+        if test "x$xs_sidplay1_cxxflags" != "x" || test "x$xs_sidplay1_ldflags" != "x"; then
+            AC_MSG_RESULT([$xs_sidplay1_cxxflags $xs_sidplay1_ldflags -lsidplay])
+        else
+            AC_MSG_RESULT([yes])
+        fi
+
+        SIDPLAY1_LIBS="$xs_sidplay1_ldflags -lsidplay"
+        SIDPLAY1_CFLAGS="$xs_sidplay1_cxxflags"
+        AC_SUBST([SIDPLAY1_LIBS])dnl
+        AC_SUBST([SIDPLAY1_CFLAGS])dnl
+    else
+        AC_MSG_RESULT([no])
+    fi
     AC_LANG_POP([C++])
 ])
 
@@ -201,99 +189,91 @@
 dnl -------------------------------------------------------------------------
 AC_DEFUN([XS_PATH_LIBSIDPLAY2],
 [
-    AC_MSG_CHECKING([for working SIDPlay2 library and headers])
+    AC_MSG_CHECKING([for working SIDPlay2/FP library and headers])
 
     AC_LANG_PUSH([C++])
     
-    AC_REQUIRE([XS_PROG_PKGCONFIG])
-    if test "x$PKG_CONFIG" != "x" && $PKG_CONFIG --atleast-version m4_ifval([$1], [$1], [2.1.0]) libsidplay2; then
-        xs_pkgcfg_knows="yes"
-    else
-        xs_pkgcfg_knows="no"
-    fi
+    PKG_CHECK_EXISTS([libsidplay2 >= 2.1.1], [xs_pkg_sidplay2="yes"], [])
+    PKG_CHECK_EXISTS([libsidplayfp >= 0.3.7], [xs_pkg_sidplayfp="yes"], [])
+
+    if test "x$xs_pkg_sidplayfp" = "xyes"; then
+        AC_CACHE_VAL([xs_cv_have_sidplayfp],
+        [
+            xs_sidplay2_cflags=`$PKG_CONFIG --libs libsidplayfp`
+            xs_sidplay2_ldflags=`$PKG_CONFIG --libs libsidplayfp`
+
+            XS_TRY_LIBRARY([sidplay2],
+                [$xs_sidplay2_cxxflags -DHAVE_UNIX], [$xs_sidplay2_ldflags],
+                [sidplayfp], [sidplayfp/sidplay2.h], [sidplay2 *myEngine;])
+
+            if test "x$xs_sidplay2_works" = "xyes"; then
+              xs_cv_have_sidplay2="xs_have_sidplayfp=yes  \
+                xs_sidplay2_cxxflags=\"$xs_sidplay2_cxxflags\"  \
+                xs_sidplay2_ldflags=\"$xs_sidplay2_ldflags\""
+            fi
+        ])
+
+    elif test "x$xs_pkg_sidplay2" = "xyes"; then
+
+        AC_CACHE_VAL([xs_cv_have_sidplay2],
+        [
+            xs_sidplay2_cflags=`$PKG_CONFIG --libs libsidplay2`
+            xs_sidplay2_ldflags=`$PKG_CONFIG --libs libsidplay2`
 
-    dnl Derive sidbuilders path from libsidplay2 root.
-    if test "x$xs_sidplay2_library" != "x"; then
-        xs_sidplay2_builders="$xs_sidplay2_library/sidplay/builders"
-    elif test "x$xs_pkgcfg_knows" = "xyes" ; then
-        xs_sidplay2_builders=`$PKG_CONFIG --variable=builders libsidplay2`
+            dnl Derive sidbuilders path from libsidplay2 root.
+            if test "x$xs_sidplay2_library" != "x"; then
+                xs_sidplay2_builders="$xs_sidplay2_library/sidplay/builders"
+            else
+                xs_sidplay2_builders=`$PKG_CONFIG --variable=builders libsidplay2`
+            fi
+
+            dnl *** Check for new COMI API
+            xs_api_ok="no"
+            AC_MSG_CHECKING([libSIDPlay2 API compatibility])
+            tmp_CPPFLAGS="$CPPFLAGS"
+            if test -d "$xs_sidplay2_includes"; then
+                    CPPFLAGS="$CPPFLAGS -I${xs_sidplay2_includes}"
+            fi
+            AC_EGREP_HEADER([::Iid], [sidplay/sidplay2.h],
+                    [xs_have_sidplay2_api="yes"], [
+                    AC_EGREP_HEADER([SIDIID], [sidplay/sidplay2.h], [
+                            AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <sidplay/sidunknown.h>], [ISidUnknown *i;])], [xs_api_ok="yes"], [])])
+                    ])
+
+            if test "x$xs_api_ok" = "xyes"; then
+                XS_TRY_LIBRARY([sidplay2],
+                [$xs_sidplay2_cxxflags -DHAVE_UNIX], [$xs_sidplay2_ldflags],
+                [sidplay2], [sidplay/sidplay2.h], [sidplay2 *myEngine;])
+            fi
+
+            if test "x$xs_sidplay2_works" = "xyes"; then
+              xs_cv_have_sidplay2="xs_have_sidplay2=yes  \
+                xs_sidplay2_cxxflags=\"$xs_sidplay2_cxxflags\"  \
+                xs_sidplay2_ldflags=\"$xs_sidplay2_ldflags\"  \
+                xs_sidplay2_builders=\"$xs_sidplay2_builders\"  "
+            fi
+        ])
     fi
 
-    AC_CACHE_VAL([xs_cv_have_sidplay2],
-    [
-        dnl Run test compilation with either standard search path
-        dnl or user-defined paths.
-        xs_sidplay2_ldflags="-lsidplay2"
-        XS_TRY_LIBSIDPLAY2
-        if test "x$xs_sidplay2_works" = "xyes"; then
-          xs_cv_have_sidplay2="xs_have_sidplay2=yes  \
-            xs_sidplay2_cxxflags=\"$xs_sidplay2_cxxflags\"  \
-            xs_sidplay2_ldflags=\"$xs_sidplay2_ldflags\"  \
-            xs_sidplay2_builders=\"$xs_sidplay2_builders\"  "
+    eval "$xs_cv_have_sidplay2"
+    eval "$xs_cv_have_sidplayfp"
+
+    if test "x$xs_have_sidplay2" = "xyes" -o "x$xs_have_sidplayfp" = "xyes"; then
+        if test "x$xs_sidplay2_cxxflags" != "x" || test "x$xs_sidplay2_ldflags" != "x"; then
+            AC_MSG_RESULT([$xs_sidplay2_cxxflags $xs_sidplay2_ldflags])
         else
-            XS_FIND_LIBSIDPLAY2
+            AC_MSG_RESULT([yes])
         fi
-    ])
-    eval "$xs_cv_have_sidplay2"
-    XS_LIB_RESULT([sidplay2], [], [])
-    AC_LANG_POP([C++])
-])
 
-
-dnl Functions used by XS_PATH_LIBSIDPLAY2.
-AC_DEFUN([XS_FIND_LIBSIDPLAY2],
-[
-    dnl See whether user didn't provide paths.
-    if test "x$xs_sidplay2_includes" = "x"; then
-        if test "x$xs_pkgcfg_knows" = "xyes" ; then
-            xs_sidplay2_includes=`$PKG_CONFIG --variable=includedir libsidplay2`
-            xs_sidplay2_cxxflags=`$PKG_CONFIG --cflags libsidplay2`
-        else
-            dnl Search common locations where header files might be stored.
-            XS_FIND_FILE([xs_sidplay2_includes], [sidplay/sidplay2.h],
-            [$xs_sidplay2_includes $xs_sidplay2_includes/include /usr/include /usr/local/include /usr/lib/sidplay/include /usr/local/lib/sidplay/include /opt/sfw/include /opt/csw/include])
-            xs_sidplay2_cxxflags="-I$xs_sidplay2_includes"
-        fi
+        SIDPLAY2_LIBS="$xs_sidplay2_ldflags"
+        SIDPLAY2_CFLAGS="$xs_sidplay2_cxxflags"
+        AC_SUBST([SIDPLAY2_LIBS])dnl
+        AC_SUBST([SIDPLAY2_CFLAGS])dnl
     else
-        xs_sidplay2_cxxflags="-I$xs_sidplay2_includes"
+        AC_MSG_RESULT([no])
     fi
-    if test "x$xs_sidplay2_library" = "x"; then
-        if test "x$xs_pkgcfg_knows" = "xyes" ; then
-            xs_sidplay2_library=`$PKG_CONFIG --variable=libdir libsidplay2`
-            xs_sidplay2_ldflags=`$PKG_CONFIG --libs libsidplay2`
-            xs_sidplay2_builders=`$PKG_CONFIG --variable=builders libsidplay2`
-        else
-            dnl Search common locations where library might be stored.
-            XS_FIND_FILE([xs_sidplay2_library], [libsidplay2.la],
-            [$xs_sidplay2_library $xs_sidplay2_library/lib $xs_sidplay2_library/src /usr/lib /usr/lib/sidplay /usr/local/lib/sidplay /opt/sfw/lib /opt/csw/lib])
-            xs_sidplay2_ldflags="-L$xs_sidplay2_library -lsidplay2"
-            xs_sidplay2_builders="$xs_sidplay2_library/sidplay/builders"
-        fi
-    else
-        xs_sidplay2_ldflags="-L$xs_sidplay2_library -lsidplay2"
-    fi
-    if test "x$xs_sidplay2_includes" = "x" || test "x$xs_sidplay2_library" = "x"; then
-        xs_cv_have_sidplay2="xs_have_sidplay2=no \
-          xs_sidplay2_ldflags=\"\" xs_sidplay2_cxxflags=\"\" \
-          xs_sidplay2_builders=\"\" "
-    else
-        dnl Test compilation with found paths.
-        xs_sidplay2_ldflags="-L$xs_sidplay2_library -lsidplay2"
-        xs_sidplay2_cxxflags="-I$xs_sidplay2_includes"
-        XS_TRY_LIBSIDPLAY2
-        xs_cv_have_sidplay2="xs_have_sidplay2=$xs_sidplay2_works \
-          xs_sidplay2_ldflags=\"$xs_sidplay2_ldflags\" \
-          xs_sidplay2_cxxflags=\"$xs_sidplay2_cxxflags\" \
-          xs_sidplay2_builders=\"$xs_sidplay2_builders\" "
-    fi
-])
 
-
-AC_DEFUN([XS_TRY_LIBSIDPLAY2],
-[
-    XS_TRY_LIBRARY([sidplay2],
-        [$xs_sidplay2_cxxflags -DHAVE_UNIX], [$xs_sidplay2_ldflags],
-        [sidplay2], [sidplay/sidplay2.h], [sidplay2 *myEngine;])
+    AC_LANG_POP([C++])
 ])
 
 
--- a/configure.ac	Mon Nov 05 15:19:21 2012 +0200
+++ b/configure.ac	Mon Nov 05 17:24:16 2012 +0200
@@ -22,8 +22,6 @@
 AH_TEMPLATE([HAVE_XMMSEXTRA], [Define if you have XMMS version 1.2.5 or later and you want XMMS-SID to support some extra features.])
 AH_TEMPLATE([HAVE_SIDPLAY1], [Define if you have and want to use libSIDPlay 1])
 AH_TEMPLATE([HAVE_SIDPLAY2], [Define if you have and want to use libSIDPlay 2])
-AH_TEMPLATE([HAVE_SIDPLAY2_COMI], [Define if you have libSIDPlay2 v2.2.x or later (or CVS version) with the new COMI API])
-AH_TEMPLATE([HAVE_SIDPLAY2_DISTORTION], [Define if you have libSIDPlay2 + reSID with Antti Lankila's distortion patches (v10 and possibly later) http://bel.fi/~alankila/c64-sw/])
 AH_TEMPLATE([HAVE_SIDPLAY2_FP], [Define if you have and want to use libSIDPlay 2-FP http://sourceforge.net/projects/sidplay-residfp/])
 AH_TEMPLATE([HAVE_THEMETUNE], [Define if you want to build code to play XMMS-SID theme SID-tune. The tune needs to be installed too, though.])
 
@@ -98,11 +96,23 @@
 	AC_DEFINE([HAVE_SIDPLAY1])
 fi
 
-XS_ARG_WITH([sidplay2], [libSIDPlay2], [XS_PATH_LIBSIDPLAY2])
+
 xs_have_sidplay2_api=""
-xs_have_distortion="no"
-if test "x$xs_have_sidplay2" = "xyes"; then
+XS_ARG_WITH([sidplay2], [libSIDPlay2], [XS_PATH_LIBSIDPLAY2])
+
+if test "x$xs_have_sidplayfp" = "xyes"; then
+	xs_have_sidplay2_api="(FP)"
+	xs_have_sidplay2_lib="yes"
 	AC_DEFINE([HAVE_SIDPLAY2])
+	AC_DEFINE([HAVE_SIDPLAY2_FP])
+	AC_DEFINE([HAVE_HARDSID_BUILDER])
+	AC_DEFINE([HAVE_RESID_BUILDER])
+
+elif test "x$xs_have_sidplay2" = "xyes"; then
+	xs_have_sidplay2_api="(normal COMI)"
+	xs_have_sidplay2_lib="yes"
+	AC_DEFINE([HAVE_SIDPLAY2])
+
 	AC_LANG_PUSH([C++])
 	
 	XS_BUILDERS_CHECK
@@ -112,55 +122,16 @@
 	if test "x$xs_builders_available" = "xno"; then
 		AC_MSG_ERROR([No builder modules were found in the sidbuilders directory!]);
 	fi
-	
-	dnl *** Check for new COMI API
-	AC_MSG_CHECKING([libSIDPlay2 API style])
-	tmp_CPPFLAGS="$CPPFLAGS"
-	if test -d "$xs_sidplay2_includes"; then
-		CPPFLAGS="$CPPFLAGS -I${xs_sidplay2_includes}"
-	fi
-	AC_EGREP_HEADER([::Iid], [sidplay/sidplay2.h],
-		[xs_have_sidplay2_api="yes"],
-		[
-		AC_EGREP_HEADER([SIDIID], [sidplay/sidplay2.h],
-			[xs_have_sidplay2_api="yes"],
-			[xs_have_sidplay2_api="(old style API)"])
-		]
-	)
-	if test "x$xs_have_sidplay2_api" = "xyes"; then
-	AC_LINK_IFELSE([
-		AC_LANG_PROGRAM(
-		[#include <sidplay/sidunknown.h>],
-		[ISidUnknown *i;])
-	], [
-		xs_have_sidplay2_api="(new COMI style API)"
-		AC_DEFINE([HAVE_SIDPLAY2_COMI], [1], [Define if using new libSIDPlay2 with COM-style API.])
-	],[
-		xs_have_sidplay2_api="(broken version!)"
-	])
-	fi
-	AC_MSG_RESULT([$xs_have_sidplay2_api])
-	
+
 	AC_LANG_POP([C++])
-	
-	dnl *** Check for distortion patch
-	AC_MSG_CHECKING([libSIDPlay2+reSID distortion patch])
-	AC_EGREP_HEADER([minimumfetresistance], [sidplay/sidtypes.h], [
-		xs_have_distortion="yes"
-		AC_DEFINE([HAVE_SIDPLAY2_DISTORTION])
-	],[
-		xs_have_distortion="no"
-	])
-	AC_MSG_RESULT([$xs_have_distortion])
-	CPPFLAGS="$tmp_CPPFLAGS"
 fi
 
 
 dnl ***
 dnl *** Check if we have some emulator library available?
 dnl ***
-if test "x$xs_have_sidplay1" != "xyes" -a "x$xs_have_sidplayfp" != "xyes"; then
-	AC_MSG_ERROR([Either libSIDPlay1 or libSIDPlay2-FP is required! Please read INSTALL for more information!])
+if test "x$xs_have_sidplay1" != "xyes" -a "x$xs_have_sidplay2" != "xyes" -a "x$xs_have_sidplayfp" != "xyes"; then
+	AC_MSG_ERROR([Either libSIDPlay1 or libSIDPlay2/libSIDPlay-FP is required! Please read INSTALL for more information!])
 fi
 
 
@@ -220,21 +191,8 @@
 	XMMS >= v1.2.5 extra features : $xs_have_xmmsextra
 	Song-position patch           : $xs_have_songpos
 	libSIDPlay 1 support          : $xs_have_sidplay1
-	libSIDPlay 2 support          : $xs_have_sidplay2 $xs_have_sidplay2_api
-	    With distortion patch?    : $xs_have_distortion
+	libSIDPlay 2 support          : $xs_have_sidplay2_lib $xs_have_sidplay2_api
 	    Included builders         : $xs_builders
 	XMMS-SID theme SID-tune       : $xs_have_themetune
 	Translations (i18n/nls)       : $USE_NLS
 ])
-
-if test "x$xs_have_distortion" = "xyes"; then
-	echo "***"
-	echo "*** WARNING! A version of libSIDPlay2 with Antti Lankila's distortion"
-	echo "*** patches has been detected. Due to the fast-changing nature of this"
-	echo "*** particular patch-set, it is possible that this version of XMMS-SID"
-	echo "*** may be incompatible."
-	echo "***"
-	echo "*** If you encounter any compilation problems, try a non-patched"
-	echo "*** version of libSIDPlay2+reSID."
-	echo "***"
-fi
--- a/src/config.h.in	Mon Nov 05 15:19:21 2012 +0200
+++ b/src/config.h.in	Mon Nov 05 17:24:16 2012 +0200
@@ -1,4 +1,4 @@
-/* src/config.h.in.  Generated from configure.in by autoheader.  */
+/* src/config.h.in.  Generated from configure.ac by autoheader.  */
 
 /* Define to 1 if translation of program messages to the user's native
    language is requested. */
@@ -46,13 +46,9 @@
 /* Define if you have and want to use libSIDPlay2 */
 #undef HAVE_SIDPLAY2
 
-/* Define if you have libSIDPlay2 v2.2.x or later (or CVS version) with the
-   new COMI API */
-#undef HAVE_SIDPLAY2_COMI
-
-/* Define if you have libSIDPlay2 + reSID with Antti Lankila's distortion
-   patches (v10 and possibly later) http://bel.fi/~alankila/c64-sw/ */
-#undef HAVE_SIDPLAY2_DISTORTION
+/* Define if you have and want to use libSIDPlay 2-FP
+   http://sourceforge.net/projects/sidplay-residfp/ */
+#undef HAVE_SIDPLAY2_FP
 
 /* Define if you have XMMS patched with the songpos patch. */
 #undef HAVE_SONG_POSITION
@@ -82,9 +78,9 @@
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
-/* Define if you have XMMS version 1.2.5 or later and you want XMMS-SID to
-   support some extra features. */
-#undef HAVE_XMMSEXTRA
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
 
 /* Name of package */
 #undef PACKAGE
@@ -101,6 +97,9 @@
 /* Define to the one symbol short name of this package. */
 #undef PACKAGE_TARNAME
 
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
@@ -110,6 +109,11 @@
 /* Version number of package */
 #undef VERSION
 
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
 /* Number of bits in a file offset, on hosts where this is settable. */
 #undef _FILE_OFFSET_BITS
 
--- a/src/xs_sidplay.h	Mon Nov 05 15:19:21 2012 +0200
+++ b/src/xs_sidplay.h	Mon Nov 05 17:24:16 2012 +0200
@@ -65,7 +65,13 @@
         myInfo.songs, myInfo.startSong,
         myInfo.infoString[0], myInfo.infoString[1], myInfo.infoString[2],
         myInfo.loadAddr, myInfo.initAddr, myInfo.playAddr,
-        myInfo.dataFileLen, myInfo.formatString, myInfo.sidModel);
+        myInfo.dataFileLen, myInfo.formatString,
+#if defined(XS_SIDPLAY2_H) && defined(HAVE_SIDPLAY2_FP)
+        myInfo.sidModel1
+#else
+        myInfo.sidModel
+#endif
+        );
     
     /* NOTICE! libSIDPlay[12] headers specifically state that sidModel,
      * songSpeed and clockSpeed are "undefined" before song initialization,
@@ -110,7 +116,11 @@
      * SIDTUNE_SIDMODEL_* similarly to our enums in xs_config.h ...
      */
     i = myStatus->tuneInfo;
+#if defined(XS_SIDPLAY2_H) && defined(HAVE_SIDPLAY2_FP)
+    i->sidModel = myInfo.sidModel1;
+#else
     i->sidModel = myInfo.sidModel;
+#endif
 
     if ((myStatus->currSong > 0) && (myStatus->currSong <= i->nsubTunes)) {
         gint tmpSpeed = -1;
--- a/src/xs_sidplay2.cc	Mon Nov 05 15:19:21 2012 +0200
+++ b/src/xs_sidplay2.cc	Mon Nov 05 17:24:16 2012 +0200
@@ -1,10 +1,10 @@
 /*
    XMMS-SID - SIDPlay input plugin for X MultiMedia System (XMMS)
 
-   libSIDPlay v2 support
+   libSIDPlay v2 and libSIDPlay v2-FP support
 
    Programmed and designed by Matti 'ccr' Hamalainen <ccr@tnsp.org>
-   (C) Copyright 1999-2009 Tecnic Software productions (TNSP)
+   (C) Copyright 1999-2012 Tecnic Software productions (TNSP)
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -29,20 +29,22 @@
 #include "xs_config.h"
 
 
-#include <sidplay/sidplay2.h>
-#ifdef HAVE_SIDPLAY2_COMI
+#ifdef HAVE_SIDPLAY2_FP
+#  include <sidplayfp/sidplay2.h>
+#  include <sidplayfp/SidTune.h>
+#else
+#  include <sidplay/sidplay2.h>
 #  include <sidplay/sidlazyiptr.h>
 #endif
 
-
 class xs_sidplay2_t {
 public:
-#ifdef HAVE_SIDPLAY2_COMI
+#ifdef HAVE_SIDPLAY2_FP
+    sidplay2 *currEng;
+    sidbuilder *currBuilder;
+#else
     SidIPtr<ISidplay2> currEng;
     SidLazyIPtr<ISidUnknown> currBuilder;
-#else
-    sidplay2 *currEng;
-    sidbuilder *currBuilder;
 #endif
     sid2_config_t currConfig;
     SidTune *currTune;
@@ -55,18 +57,27 @@
 
 
 #ifdef HAVE_RESID_BUILDER
-#  include <sidplay/builders/resid.h>
+#  ifdef HAVE_SIDPLAY2_FP
+#    include <sidplayfp/builders/resid.h>
+#  else
+#    include <sidplay/builders/resid.h>
+#  endif
 #endif
+
 #ifdef HAVE_HARDSID_BUILDER
-#  include <sidplay/builders/hardsid.h>
+#  ifdef HAVE_SIDPLAY2_FP
+#    include <sidplayfp/builders/hardsid.h>
+#  else
+#    include <sidplay/builders/hardsid.h>
+#  endif
 #endif
 
 
 xs_sidplay2_t::xs_sidplay2_t(void)
-#ifdef HAVE_SIDPLAY2_COMI
+#ifdef HAVE_SIDPLAY2_FP
+:currEng(NULL)
+#else
 :currEng(sidplay2::create())
-#else
-:currEng(NULL)
 #endif
 {
     buf = NULL;
@@ -124,7 +135,7 @@
     if (!myEngine) return FALSE;
 
     /* Initialize the engine */
-#ifndef HAVE_SIDPLAY2_COMI
+#ifdef HAVE_SIDPLAY2_FP
     myEngine->currEng = new sidplay2;
 #endif
     if (!myEngine->currEng) {
@@ -137,62 +148,71 @@
 
     /* Configure channels and stuff */
     switch (myStatus->audioChannels) {
-
-    case XS_CHN_AUTOPAN:
-        myEngine->currConfig.playback = sid2_stereo;
-        break;
+        case XS_CHN_AUTOPAN:
+            myEngine->currConfig.playback = sid2_stereo;
+            break;
 
-    case XS_CHN_STEREO:
-        myEngine->currConfig.playback = sid2_stereo;
-        break;
+        case XS_CHN_STEREO:
+            myEngine->currConfig.playback = sid2_stereo;
+            break;
 
-    case XS_CHN_MONO:
-    default:
-        myEngine->currConfig.playback = sid2_mono;
-        myStatus->audioChannels = XS_CHN_MONO;
-        break;
+        case XS_CHN_MONO:
+        default:
+            myEngine->currConfig.playback = sid2_mono;
+            myStatus->audioChannels = XS_CHN_MONO;
+            break;
     }
 
 
     /* Memory mode settings */
     switch (xs_cfg.memoryMode) {
-    case XS_MPU_BANK_SWITCHING:
-        myEngine->currConfig.environment = sid2_envBS;
-        break;
+        case XS_MPU_BANK_SWITCHING:
+            myEngine->currConfig.environment = sid2_envBS;
+            break;
 
-    case XS_MPU_TRANSPARENT_ROM:
-        myEngine->currConfig.environment = sid2_envTP;
-        break;
+        case XS_MPU_TRANSPARENT_ROM:
+            myEngine->currConfig.environment = sid2_envTP;
+            break;
 
-    case XS_MPU_PLAYSID_ENVIRONMENT:
-        myEngine->currConfig.environment = sid2_envPS;
-        break;
+        case XS_MPU_PLAYSID_ENVIRONMENT:
+            myEngine->currConfig.environment = sid2_envPS;
+            break;
 
-    case XS_MPU_REAL:
-    default:
-        myEngine->currConfig.environment = sid2_envR;
-        xs_cfg.memoryMode = XS_MPU_REAL;
-        break;
+        case XS_MPU_REAL:
+        default:
+            myEngine->currConfig.environment = sid2_envR;
+            xs_cfg.memoryMode = XS_MPU_REAL;
+            break;
     }
 
 
     /* Audio parameters sanity checking and setup */
+    tmpFreq = myStatus->audioFrequency;
+#ifndef HAVE_SIDPLAY2_FP
     myEngine->currConfig.precision = myStatus->audioBitsPerSample;
-    tmpFreq = myStatus->audioFrequency;
 
     if (myStatus->oversampleEnable)
         tmpFreq = (tmpFreq * myStatus->oversampleFactor);
 
+#else
+    myStatus->audioBitsPerSample = XS_RES_16BIT;
+    myEngine->currConfig.samplingMethod = SID2_RESAMPLE_INTERPOLATE;
+#endif
+
     myEngine->currConfig.frequency = tmpFreq;
 
     switch (myStatus->audioBitsPerSample) {
     case XS_RES_8BIT:
         myStatus->audioFormat = FMT_U8;
+#ifndef HAVE_SIDPLAY2_FP
         myEngine->currConfig.sampleFormat = SID2_LITTLE_UNSIGNED;
+#endif
         break;
 
     case XS_RES_16BIT:
     default:
+            myStatus->audioFormat = FMT_S16_NE;
+#ifndef HAVE_SIDPLAY2_FP
         switch (myStatus->audioFormat) {
         case FMT_U16_LE:
             myEngine->currConfig.sampleFormat = SID2_LITTLE_UNSIGNED;
@@ -223,7 +243,6 @@
             break;
 
         default:
-            myStatus->audioFormat = FMT_S16_NE;
 #if G_BYTE_ORDER == G_BIG_ENDIAN
             myEngine->currConfig.sampleFormat = SID2_BIG_SIGNED;
 #else
@@ -236,12 +255,10 @@
             break;
 
         }
+#endif
         break;
     }
     
-#ifdef HAVE_SIDPLAY2_DISTORTION
-    XSDEBUG("filter setting NOT supported for distortion patched libSIDPlay2.\n");
-#else
     /* Convert filter */
     f = &(xs_cfg.sid2Filter);
     XSDEBUG("using filter '%s', %d points\n", f->name, f->npoints);
@@ -256,21 +273,20 @@
         tmpFilter.cutoff[i][0] = f->points[i].x;
         tmpFilter.cutoff[i][1] = f->points[i].y;
     }
-#endif
 
     /* Initialize builder object */
     XSDEBUG("init builder #%i, maxsids=%i\n", xs_cfg.sid2Builder, (myEngine->currEng->info()).maxsids);
 #ifdef HAVE_RESID_BUILDER
     if (xs_cfg.sid2Builder == XS_BLD_RESID) {
-#ifdef HAVE_SIDPLAY2_COMI
+#ifdef HAVE_SIDPLAY2_FP
+        ReSIDBuilder *rs = new ReSIDBuilder("ReSID builder");
+        myEngine->currBuilder = (sidbuilder *) rs;
+        if (rs) {
+#else
         myEngine->currBuilder = ReSIDBuilderCreate("");
         SidLazyIPtr<IReSIDBuilder> rs(myEngine->currBuilder);
         if (rs) {
             myEngine->currConfig.sidEmulation = rs->iaggregate();
-#else
-        ReSIDBuilder *rs = new ReSIDBuilder("ReSID builder");
-        myEngine->currBuilder = (sidbuilder *) rs;
-        if (rs) {
 #endif
             /* Builder object created, initialize it */
             rs->create((myEngine->currEng->info()).maxsids);
@@ -285,7 +301,7 @@
                 return FALSE;
             }
 
-#ifndef HAVE_SIDPLAY2_DISTORTION
+#if !defined(HAVE_SIDPLAY2_FP)
             // FIXME FIX ME: support other configurable parameters ...
             // ... WHEN/IF resid-builder+libsidplay2 gets fixed
             rs->sampling(tmpFreq);
@@ -306,17 +322,18 @@
         }
     }
 #endif
+
 #ifdef HAVE_HARDSID_BUILDER
     if (xs_cfg.sid2Builder == XS_BLD_HARDSID) {
-#ifdef HAVE_SIDPLAY2_COMI
+#ifdef HAVE_SIDPLAY2_FP
+        HardSIDBuilder *hs = new HardSIDBuilder("HardSID builder");
+        myEngine->currBuilder = (sidbuilder *) hs;
+        if (hs) {
+#else
         myEngine->currBuilder = HardSIDBuilderCreate("");
         SidLazyIPtr<IHardSIDBuilder> hs(myEngine->currBuilder);
         if (hs) {
             myEngine->currConfig.sidEmulation = hs->iaggregate();
-#else
-        HardSIDBuilder *hs = new HardSIDBuilder("HardSID builder");
-        myEngine->currBuilder = (sidbuilder *) hs;
-        if (hs) {
 #endif
             /* Builder object created, initialize it */
             hs->create((myEngine->currEng->info()).maxsids);
@@ -339,7 +356,7 @@
         return FALSE;
     }
 
-#ifndef HAVE_SIDPLAY2_COMI
+#ifdef HAVE_SIDPLAY2_FP
     myEngine->currConfig.sidEmulation = myEngine->currBuilder;
     XSDEBUG("%s\n", myEngine->currBuilder->credits());
 #endif
@@ -371,7 +388,7 @@
     }
     
 
-#ifndef HAVE_SIDPLAY2_DISTORTION
+#if !defined(HAVE_SIDPLAY2_FP)
     if ((xs_cfg.sid2OptLevel >= 0) && (xs_cfg.sid2OptLevel <= SID2_MAX_OPTIMISATION))
         myEngine->currConfig.optimisation = xs_cfg.sid2OptLevel;
     else {
@@ -392,7 +409,6 @@
         myEngine->currConfig.sidModel = myEngine->currConfig.sidDefault;
     else
         myEngine->currConfig.sidModel = SID2_MODEL_CORRECT;
-
     
     /* XXX: Should this be configurable? libSIDPlay1 does not support it, though */
     myEngine->currConfig.sidSamples = TRUE;
@@ -426,13 +442,13 @@
 
     /* Free internals */
     if (myEngine->currBuilder) {
-#ifndef HAVE_SIDPLAY2_COMI
+#ifdef HAVE_SIDPLAY2_FP
         delete myEngine->currBuilder;
 #endif
         myEngine->currBuilder = NULL;
     }
 
-#ifndef HAVE_SIDPLAY2_COMI
+#ifdef HAVE_SIDPLAY2_FP
     if (myEngine->currEng) {
         delete myEngine->currEng;
         myEngine->currEng = NULL;
@@ -487,7 +503,7 @@
     myEngine = (xs_sidplay2_t *) myStatus->sidEngine;
     if (!myEngine) return 0;
 
-    return myEngine->currEng->play(audioBuffer, audioBufSize);
+    return myEngine->currEng->play((short *) audioBuffer, audioBufSize / sizeof(short));
 }