Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package sidplayfp for openSUSE:Factory checked in at 2026-01-07 16:01:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/sidplayfp (Old) and /work/SRC/openSUSE:Factory/.sidplayfp.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sidplayfp" Wed Jan 7 16:01:36 2026 rev:18 rq:1325700 version:2.16.0 Changes: -------- --- /work/SRC/openSUSE:Factory/sidplayfp/sidplayfp.changes 2025-11-07 18:24:56.901723738 +0100 +++ /work/SRC/openSUSE:Factory/.sidplayfp.new.1928/sidplayfp.changes 2026-01-07 16:01:48.732109898 +0100 @@ -1,0 +2,15 @@ +Tue Jan 6 12:49:36 UTC 2026 - Martin Hauke <[email protected]> + +- Update to version 2.16.0 + * Add USBSID support. + * Display the actual used SID model(s). + * Fix invalid filter range error. + * Add --version option. + * Replace non-ASCII characters with ASCII when iconv is not + enabled. + * Correctly restore ANSI console. + * Correctly display play errors. + * Handle negative fade out values in an useful way. + * Init driver output before parsing config. + +------------------------------------------------------------------- Old: ---- sidplayfp-2.15.2.tar.gz New: ---- sidplayfp-2.16.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ sidplayfp.spec ++++++ --- /var/tmp/diff_new_pack.LcQJ5N/_old 2026-01-07 16:01:50.576186651 +0100 +++ /var/tmp/diff_new_pack.LcQJ5N/_new 2026-01-07 16:01:50.608187983 +0100 @@ -1,8 +1,8 @@ # # spec file for package sidplayfp # -# Copyright (c) 2025 SUSE LLC and contributors -# Copyright (c) 2023-2025, Martin Hauke <[email protected]> +# Copyright (c) 2026 SUSE LLC and contributors +# Copyright (c) 2023-2026, Martin Hauke <[email protected]> # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ Name: sidplayfp -Version: 2.15.2 +Version: 2.16.0 Release: 0 Summary: SID chip music module player License: GPL-2.0-or-later ++++++ sidplayfp-2.15.2.tar.gz -> sidplayfp-2.16.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/AUTHORS new/sidplayfp-2.16.0/AUTHORS --- old/sidplayfp-2.15.2/AUTHORS 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/AUTHORS 2025-12-23 16:12:09.000000000 +0100 @@ -20,6 +20,8 @@ LaLa - stilview Stian Skjelstad - SID status display Michael Hartmann - filter curves + Thibaut VARENE - exSID support + LouD - USBSID-Pico support Credit where credit is due, so if I missed anyone please let me know. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/Makefile.in new/sidplayfp-2.16.0/Makefile.in --- old/sidplayfp-2.15.2/Makefile.in 2025-11-02 10:18:30.000000000 +0100 +++ new/sidplayfp-2.16.0/Makefile.in 2025-12-23 16:12:12.000000000 +0100 @@ -277,7 +277,7 @@ $(top_srcdir)/build-aux/depcomp \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/missing $(top_srcdir)/src/config.h.in \ - AUTHORS COPYING README TODO build-aux/compile \ + AUTHORS COPYING NEWS README TODO build-aux/compile \ build-aux/config.guess build-aux/config.rpath \ build-aux/config.sub build-aux/depcomp build-aux/install-sh \ build-aux/missing diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/NEWS new/sidplayfp-2.16.0/NEWS --- old/sidplayfp-2.15.2/NEWS 1970-01-01 01:00:00.000000000 +0100 +++ new/sidplayfp-2.16.0/NEWS 2025-12-23 16:12:09.000000000 +0100 @@ -0,0 +1,11 @@ +2.16.0 2025-12-23 +* Add USBSID support (#84) +* Display the actual used SID model(s) (#79) +* Fix invalid filter range error (#94) +* Add --version option (#99) +* Replace non-ASCII characters with ASCII when iconv is not enabled (#97) +* Correctly restore ANSI console (#100) +* Correctly display play errors (#101) +* Handle negative fade out values in an useful way (#93) +* Init driver output before parsing config (#89) +* Build windows binaries with dynamic SIMD dispatch diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/README new/sidplayfp-2.16.0/README --- old/sidplayfp-2.15.2/README 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/README 2025-12-23 16:12:09.000000000 +0100 @@ -69,3 +69,8 @@ --with-out123 Build with out123 library providing support for additional audio interfaces enabled by default + +--with-libiconv-prefix[=DIR]: +search for libiconv in DIR/include and DIR/lib + +the character conversion requires presence of the POSIX/XSI iconv function family in either the C library or a separate libiconv library (see https://www.gnu.org/software/gettext/manual/html_node/AM_005fICONV.html) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/configure new/sidplayfp-2.16.0/configure --- old/sidplayfp-2.15.2/configure 2025-11-02 10:18:30.000000000 +0100 +++ new/sidplayfp-2.16.0/configure 2025-12-23 16:12:12.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for sidplayfp 2.15.2. +# Generated by GNU Autoconf 2.71 for sidplayfp 2.16.0. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -608,8 +608,8 @@ # Identity of this package. PACKAGE_NAME='sidplayfp' PACKAGE_TARNAME='sidplayfp' -PACKAGE_VERSION='2.15.2' -PACKAGE_STRING='sidplayfp 2.15.2' +PACKAGE_VERSION='2.16.0' +PACKAGE_STRING='sidplayfp 2.16.0' PACKAGE_BUGREPORT='' PACKAGE_URL='https://github.com/libsidplayfp/sidplayfp/' @@ -1367,7 +1367,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sidplayfp 2.15.2 to adapt to many kinds of systems. +\`configure' configures sidplayfp 2.16.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1438,7 +1438,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sidplayfp 2.15.2:";; + short | recursive ) echo "Configuration of sidplayfp 2.16.0:";; esac cat <<\_ACEOF @@ -1566,7 +1566,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sidplayfp configure 2.15.2 +sidplayfp configure 2.16.0 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1842,7 +1842,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sidplayfp $as_me 2.15.2, which was +It was created by sidplayfp $as_me 2.16.0, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3332,7 +3332,7 @@ # Define the identity of the package. PACKAGE='sidplayfp' - VERSION='2.15.2' + VERSION='2.16.0' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -10688,6 +10688,20 @@ printf "%s\n" "no" >&6; } fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $SIDPLAYPF_INCLUDE/sidplayfp/builders/usbsid.h" >&5 +printf %s "checking for $SIDPLAYPF_INCLUDE/sidplayfp/builders/usbsid.h... " >&6; } +if test -f $SIDPLAYPF_INCLUDE/sidplayfp/builders/usbsid.h +then : + +printf "%s\n" "#define HAVE_SIDPLAYFP_BUILDERS_USBSID_H 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build for debugging" >&5 printf %s "checking whether to build for debugging... " >&6; } @@ -11255,7 +11269,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sidplayfp $as_me 2.15.2, which was +This file was extended by sidplayfp $as_me 2.16.0, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11324,7 +11338,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -sidplayfp config.status 2.15.2 +sidplayfp config.status 2.16.0 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/configure.ac new/sidplayfp-2.16.0/configure.ac --- old/sidplayfp-2.15.2/configure.ac 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/configure.ac 2025-12-23 16:12:09.000000000 +0100 @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([sidplayfp], [2.15.2], [], [], [https://github.com/libsidplayfp/sidplayfp/]) +AC_INIT([sidplayfp], [2.16.0], [], [], [https://github.com/libsidplayfp/sidplayfp/]) AC_CONFIG_SRCDIR([src/main.cpp]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) @@ -126,6 +126,12 @@ AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])] ) +AC_MSG_CHECKING([for $SIDPLAYPF_INCLUDE/sidplayfp/builders/usbsid.h]) +AS_IF([test -f $SIDPLAYPF_INCLUDE/sidplayfp/builders/usbsid.h], + [AC_DEFINE([HAVE_SIDPLAYFP_BUILDERS_USBSID_H], [1], [usbsid builder]) + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] +) AC_MSG_CHECKING([whether to build for debugging]) AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug], [compile for debugging @<:@no/yes, default=no@:>@])], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/doc/en/sidplayfp.1 new/sidplayfp-2.16.0/doc/en/sidplayfp.1 --- old/sidplayfp-2.15.2/doc/en/sidplayfp.1 2025-11-02 10:18:35.000000000 +0100 +++ new/sidplayfp-2.16.0/doc/en/sidplayfp.1 2025-12-23 16:12:15.000000000 +0100 @@ -55,7 +55,7 @@ .\" ======================================================================== .\" .IX Title "SIDPLAYFP 1" -.TH SIDPLAYFP 1 2025-11-02 "perl v5.38.2" "User Programs" +.TH SIDPLAYFP 1 2025-12-23 "perl v5.38.2" "User Programs" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -81,11 +81,13 @@ .IP "\fB\-h, \-\-help\-debug\fR" 4 .IX Item "-h, --help-debug" Display additional options helpful for debugging. -.IP \fB\-fo\fR\fI<num>\fR 4 -.IX Item "-fo<num>" +.IP "\fB\-fo\fR\fI<a|b> <num>\fR" 4 +.IX Item "-fo<a|b> <num>" Set fade-out time in seconds (default: 0). -The fade-out starts at the song end so this adds -the specified number of seconds to the tune length. +Ends a(fter) or starts b(efore) actual song end time, +the specified number of seconds wil be added to the tune length +when after. If not specified starts after. +Mostly useful for looping tunes. .IP \fB\-f\fR\fI<num>\fR 4 .IX Item "-f<num>" Set audio output frequency in Hz (default: 48000). @@ -202,6 +204,9 @@ .IP \fB\-\-exsid\fR 4 .IX Item "--exsid" Use exSID device. +.IP \fB\-\-usbsid\fR 4 +.IX Item "--usbsid" +Use USBSID-Pico device. .IP \fB\-\-cpu\-debug\fR 4 .IX Item "--cpu-debug" Display CPU register and assembly dumps, available only diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/doc/en/sidplayfp.ini.5 new/sidplayfp-2.16.0/doc/en/sidplayfp.ini.5 --- old/sidplayfp-2.15.2/doc/en/sidplayfp.ini.5 2025-11-02 10:18:35.000000000 +0100 +++ new/sidplayfp-2.16.0/doc/en/sidplayfp.ini.5 2025-12-23 16:12:15.000000000 +0100 @@ -55,7 +55,7 @@ .\" ======================================================================== .\" .IX Title "SIDPLAYFP.INI 5" -.TH SIDPLAYFP.INI 5 2025-11-02 "perl v5.38.2" "File formats" +.TH SIDPLAYFP.INI 5 2025-12-23 "perl v5.38.2" "File formats" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l @@ -192,8 +192,8 @@ improve latency. .SS Emulation .IX Subsection "Emulation" -.IP \fBEngine\fR=\fI<RESIDFP|RESID|HARDSID|EXSID|NONE>\fR 4 -.IX Item "Engine=<RESIDFP|RESID|HARDSID|EXSID|NONE>" +.IP \fBEngine\fR=\fI<RESIDFP|RESID|HARDSID|EXSID|USBSID|NONE>\fR 4 +.IX Item "Engine=<RESIDFP|RESID|HARDSID|EXSID|USBSID|NONE>" Set the SID emulation engine. Default is RESIDFP. .IP \fBC64Model\fR=\fI<PAL|NTSC|OLD_NTSC|DREAN>\fR 4 .IX Item "C64Model=<PAL|NTSC|OLD_NTSC|DREAN>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/doc/en/sidplayfp.ini.pod new/sidplayfp-2.16.0/doc/en/sidplayfp.ini.pod --- old/sidplayfp-2.15.2/doc/en/sidplayfp.ini.pod 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/doc/en/sidplayfp.ini.pod 2025-12-23 16:12:09.000000000 +0100 @@ -175,7 +175,7 @@ =over -=item B<Engine>=I<< <RESIDFP|RESID|HARDSID|EXSID|NONE> >> +=item B<Engine>=I<< <RESIDFP|RESID|HARDSID|EXSID|USBSID|NONE> >> Set the SID emulation engine. Default is RESIDFP. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/doc/en/sidplayfp.pod new/sidplayfp-2.16.0/doc/en/sidplayfp.pod --- old/sidplayfp-2.15.2/doc/en/sidplayfp.pod 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/doc/en/sidplayfp.pod 2025-12-23 16:12:09.000000000 +0100 @@ -33,11 +33,13 @@ Display additional options helpful for debugging. -=item B<-fo>I<< <num> >> +=item B<-fo>I<< <a|b> <num> >> Set fade-out time in seconds (default: 0). -The fade-out starts at the song end so this adds -the specified number of seconds to the tune length. +Ends a(fter) or starts b(efore) actual song end time, +the specified number of seconds wil be added to the tune length +when after. If not specified starts after. +Mostly useful for looping tunes. =item B<-f>I<< <num> >> @@ -179,6 +181,10 @@ Use exSID device. +=item B<--usbsid> + +Use USBSID-Pico device. + =item B<--cpu-debug> Display CPU register and assembly dumps, available only diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/doc/en/stilview.1 new/sidplayfp-2.16.0/doc/en/stilview.1 --- old/sidplayfp-2.15.2/doc/en/stilview.1 2025-11-02 10:18:35.000000000 +0100 +++ new/sidplayfp-2.16.0/doc/en/stilview.1 2025-12-23 16:12:15.000000000 +0100 @@ -55,7 +55,7 @@ .\" ======================================================================== .\" .IX Title "STILVIEW 1" -.TH STILVIEW 1 2025-11-02 "perl v5.38.2" "User Programs" +.TH STILVIEW 1 2025-12-23 "perl v5.38.2" "User Programs" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/src/args.cpp new/sidplayfp-2.16.0/src/args.cpp --- old/sidplayfp-2.15.2/src/args.cpp 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/src/args.cpp 2025-12-23 16:12:09.000000000 +0100 @@ -45,6 +45,10 @@ # include <sidplayfp/builders/exsid.h> #endif +#ifdef HAVE_SIDPLAYFP_BUILDERS_USBSID_H +# include <sidplayfp/builders/usbsid.h> +#endif + // Wide-chars are not yet supported here #undef SEPARATOR #define SEPARATOR "/" @@ -164,7 +168,6 @@ } // default arg options - m_driver.output = output_t::SOUNDCARD; m_driver.file = false; m_driver.info = false; @@ -190,6 +193,11 @@ displayDebugArgs (); return 0; } + else if (!std::strcmp(&argv[i][1], "-version")) + { + displayVersion(); + return 0; + } else if (argv[i][1] == 'b') { @@ -209,9 +217,25 @@ #ifdef FEAT_NEW_PLAY_API else if (strncmp (&argv[i][1], "fo", 2) == 0) { - if (argv[i][3] == '\0') + m_fadeAfter = true; + int j = 3; + if (argv[i][j] == 'a') + { + j++; + } + else if (argv[i][j] == 'b') + { + j++; + m_fadeAfter = false; + } + if (argv[i][j] == '\0') err = true; - m_fadeoutTime = (uint_least32_t) atoi (&argv[i][3]); + int fadeoutTime = (uint_least32_t) atoi (&argv[i][j]); + if (fadeoutTime < 0) + { + err = true; + } + m_fadeoutTime = static_cast<uint_least32_t>(fadeoutTime); } #endif else if (argv[i][1] == 'f') @@ -431,7 +455,7 @@ else if (std::strcmp (&argv[i][1], "cws") == 0) { m_combinedWaveformsStrength = SidConfig::STRONG; - } + } #endif // File format conversions else if (argv[i][1] == 'w') @@ -490,6 +514,14 @@ } #endif // HAVE_SIDPLAYFP_BUILDERS_EXSID_H +#ifdef HAVE_SIDPLAYFP_BUILDERS_USBSID_H + else if (std::strcmp (&argv[i][1], "-usbsid") == 0) + { + m_driver.sid = EMU_USBSID; + m_driver.output = output_t::NONE; + } +#endif // HAVE_SIDPLAYFP_BUILDERS_USBSID_H + // These are for debug else if (std::strcmp (&argv[i][1], "-none") == 0) { @@ -675,7 +707,7 @@ << " --help-debug debug help menu" << endl << " -b<num> set start time in [mins:]secs[.milli] format (default: 0)" << endl #ifdef FEAT_NEW_PLAY_API - << " -fo<num> set fade-out time in seconds (default: 0)" << endl + << " -fo[a|b]<num> set fade-out time in seconds, ends a(fter) or starts b(efore) actual song end time (default: 0=no fade out)" << endl #endif << " -f<num> set frequency in Hz (default: " << SidConfig::DEFAULT_SAMPLING_FREQ << ")" << endl @@ -741,6 +773,13 @@ out << " --exsid enable exSID support" << endl; } #endif +#ifdef HAVE_SIDPLAYFP_BUILDERS_USBSID_H + { + USBSIDBuilder us(""); + if (us.availDevices ()) + out << " --usbsid enable USBSID support" << endl; + } +#endif out << endl << "Home Page: " PACKAGE_URL << endl; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/src/audio/null/null.h new/sidplayfp-2.16.0/src/audio/null/null.h --- old/sidplayfp-2.15.2/src/audio/null/null.h 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/src/audio/null/null.h 2025-12-23 16:12:09.000000000 +0100 @@ -26,7 +26,7 @@ # include "config.h" #endif -#if defined(HAVE_SIDPLAYFP_BUILDERS_HARDSID_H) || defined(HAVE_SIDPLAYFP_BUILDERS_EXSID_H) +#if defined(HAVE_SIDPLAYFP_BUILDERS_HARDSID_H) || defined(HAVE_SIDPLAYFP_BUILDERS_EXSID_H) || defined(HAVE_SIDPLAYFP_BUILDERS_USBSID_H) # ifndef AudioDriver # define AudioDriver Audio_Null # endif @@ -35,7 +35,7 @@ #include "../AudioBase.h" /* - * Null audio driver used for hardsid, exSID + * Null audio driver used for hardsid, exSID and USBSID-Pico * and songlength detection */ class Audio_Null: public AudioBase diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/src/codeConvert.cpp new/sidplayfp-2.16.0/src/codeConvert.cpp --- old/sidplayfp-2.15.2/src/codeConvert.cpp 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/src/codeConvert.cpp 2025-12-23 16:12:09.000000000 +0100 @@ -29,31 +29,43 @@ const char* codeConvert::convert(const char* src) { #ifdef HAVE_ICONV - if (cd == (iconv_t) -1) - return src; + if (cd != (iconv_t) -1) + { + ICONV_CONST char *srcPtr = const_cast<ICONV_CONST char*>(src); + size_t srcLeft = std::strlen(src); + char *outPtr = buffer; + size_t outLeft = sizeof (buffer)-1; + + while (srcLeft > 0) + { + size_t ret = iconv(cd, &srcPtr, &srcLeft, &outPtr, &outLeft); + if (ret == (size_t) -1) + return src; + } + + // flush + iconv(cd, nullptr, &srcLeft, &outPtr, &outLeft); - ICONV_CONST char *srcPtr = const_cast<ICONV_CONST char*>(src); - size_t srcLeft = strlen(src); - char *outPtr = buffer; - size_t outLeft = sizeof (buffer)-1; + // terminate buffer string + *outPtr = 0; - while (srcLeft > 0) + return buffer; + } +#endif + // convert non-ASCII characters to ASCII + const char ascii[64 + 1] = "AAAAAAECEEEEIIIIDNOOOOOxOUUUUYTSaaaaaaeceeeeiiiidnooooo/ouuuuyty"; + int i=0; + while (src[i]) { - size_t ret = iconv(cd, &srcPtr, &srcLeft, &outPtr, &outLeft); - if (ret == (size_t) -1) - return src; + unsigned char ch = static_cast<unsigned char>(src[i]); + buffer[i] = (ch < 0xc0) ? ch : ascii[ch - 0xc0]; + i++; } - // flush - iconv(cd, nullptr, &srcLeft, &outPtr, &outLeft); - // terminate buffer string - *outPtr = 0; + buffer[i] = 0; return buffer; -#else - return src; -#endif } codeConvert::codeConvert() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/src/codeConvert.h new/sidplayfp-2.16.0/src/codeConvert.h --- old/sidplayfp-2.15.2/src/codeConvert.h 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/src/codeConvert.h 2025-12-23 16:12:09.000000000 +0100 @@ -45,9 +45,9 @@ private: #ifdef HAVE_ICONV iconv_t cd; +#endif char buffer[1024]; -#endif public: codeConvert(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/src/config.h.in new/sidplayfp-2.16.0/src/config.h.in --- old/sidplayfp-2.15.2/src/config.h.in 2025-11-02 10:18:30.000000000 +0100 +++ new/sidplayfp-2.16.0/src/config.h.in 2025-12-23 16:12:12.000000000 +0100 @@ -54,6 +54,9 @@ /* resid builder */ #undef HAVE_SIDPLAYFP_BUILDERS_RESID_H +/* usbsid builder */ +#undef HAVE_SIDPLAYFP_BUILDERS_USBSID_H + /* Define to 1 if you have the <soundcard.h> header file. */ #undef HAVE_SOUNDCARD_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/src/menu.cpp new/sidplayfp-2.16.0/src/menu.cpp --- old/sidplayfp-2.15.2/src/menu.cpp 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/src/menu.cpp 2025-12-23 16:12:09.000000000 +0100 @@ -1,7 +1,7 @@ /* * This file is part of sidplayfp, a console SID player. * - * Copyright 2011-2023 Leandro Nini + * Copyright 2011-2025 Leandro Nini * Copyright 2000-2001 Simon White * * This program is free software; you can redistribute it and/or modify @@ -137,6 +137,18 @@ return "---"; } #endif + +void ConsolePlayer::displayVersion() +{ + const SidInfo &info = m_engine.info(); + + cout << PACKAGE_NAME " " VERSION << endl; + string version; + version.append("Using ").append(info.name()).append(" ").append(info.version()); + cout << version << endl; + cout << "Home Page: " PACKAGE_URL << endl; +} + // Display console menu void ConsolePlayer::menu () { @@ -350,7 +362,7 @@ consoleColour (color_t::yellow, true); cerr << " SID Details : "; consoleColour (color_t::white, false); - cerr << "Model = "; + cerr << "1st SID = $d400, Model = "; cerr << getModel(tuneInfo->sidModel(0)); cerr << endl; if (tuneInfo->sidChips() > 1) @@ -402,13 +414,19 @@ consoleTable (table_t::middle); consoleColour (color_t::yellow, true); - cerr << " SID Model : "; + cerr << " SID Model(s) : "; consoleColour (color_t::white, false); +#ifdef FEAT_SID_MODEL + for (unsigned int i=0; i<info.numberOfSIDs(); i++) + cerr << getModel(info.sidModel(i)) << " "; + cerr << endl; +#else if (m_engCfg.forceSidModel) cerr << "Forced "; else cerr << "from tune, default = "; cerr << getModel(m_engCfg.defaultSidModel) << endl; +#endif if (m_verboseLevel > 1) { @@ -501,6 +519,9 @@ // is not disturbed. if ( !m_quietLevel ) cerr << "00:00"; + + consoleRestore(); + cerr << flush; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/src/player.cpp new/sidplayfp-2.16.0/src/player.cpp --- old/sidplayfp-2.15.2/src/player.cpp 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/src/player.cpp 2025-12-23 16:12:09.000000000 +0100 @@ -90,6 +90,11 @@ const char ConsolePlayer::EXSID_ID[] = "exSID"; #endif +#ifdef HAVE_SIDPLAYFP_BUILDERS_USBSID_H +# include <sidplayfp/builders/usbsid.h> +const char ConsolePlayer::USBSID_ID[] = "USBSID"; +#endif + #ifdef FEAT_REGS_DUMP_SID uint16_t freqTablePal[] { @@ -249,7 +254,7 @@ double adjustment = it->second; return (adjustment * 20. - 1.) / 39.; } - return -1; + return -1.; } #else double getRecommendedFilterCurve(const std::string& author) @@ -390,6 +395,9 @@ if (emulation.powerOnDelay >= 0) m_engCfg.powerOnDelay = emulation.powerOnDelay; + // Set default output + m_driver.output = output_t::SOUNDCARD; + if (!emulation.engine.empty()) { if (emulation.engine.compare(TEXT("RESIDFP")) == 0) @@ -414,6 +422,13 @@ m_driver.output = output_t::NONE; } #endif +#ifdef HAVE_SIDPLAYFP_BUILDERS_USBSID_H + else if (emulation.engine.compare(TEXT("USBSID")) == 0) + { + m_driver.sid = EMU_USBSID; + m_driver.output = output_t::NONE; + } +#endif else if (emulation.engine.compare(TEXT("NONE")) == 0) { m_driver.sid = EMU_NONE; @@ -424,6 +439,7 @@ m_verboseLevel = (m_iniCfg.sidplay2()).verboseLevel; #ifdef FEAT_NEW_PLAY_API m_fadeoutTime = 0; + m_fadeAfter = false; #endif createOutput (output_t::NONE, nullptr); createSidEmu (EMU_NONE, nullptr); @@ -621,9 +637,18 @@ if (m_autofilter && (tuneInfo->numberOfInfoStrings() == 3)) { - frange = getRecommendedFilterRange(tuneInfo->infoString(1)); - if (m_verboseLevel > 1) - cerr << "Recommended filter range: " << frange << endl; + double rfr = getRecommendedFilterRange(tuneInfo->infoString(1)); + if (rfr < 0.) + { + if (m_verboseLevel > 1) + cerr << "No recommended filter range available" << endl; + } + else + { + if (m_verboseLevel > 1) + cerr << "Recommended filter range: " << rfr << endl; + frange = rfr; + } } if (m_frange.has_value()) @@ -647,9 +672,18 @@ #ifndef FEAT_FILTER_RANGE if (m_autofilter && (tuneInfo->numberOfInfoStrings() == 3)) { - fcurve = getRecommendedFilterCurve(tuneInfo->infoString(1)); - if (m_verboseLevel > 1) - cerr << "Recommended filter curve: " << fcurve << endl; + double rfc = getRecommendedFilterCurve(tuneInfo->infoString(1)); + if (rfc < 0.) + { + if (m_verboseLevel > 1) + cerr << "No recommended filter curve available" << endl; + } + else + { + if (m_verboseLevel > 1) + cerr << "Recommended filter curve: " << rfc << endl; + fcurve = rfc; + } } #endif if (m_fcurve.has_value()) @@ -742,6 +776,23 @@ } #endif // HAVE_SIDPLAYFP_BUILDERS_EXSID_H +#ifdef HAVE_SIDPLAYFP_BUILDERS_USBSID_H + case EMU_USBSID: + { + try + { + USBSIDBuilder *us = new USBSIDBuilder( USBSID_ID ); + + m_engCfg.sidEmulation = us; + if (!us->getStatus()) goto createSidEmu_error; + us->create ((m_engine.info ()).maxsids()); + if (!us->getStatus()) goto createSidEmu_error; + } + catch (std::bad_alloc const &ba) {} + break; + } +#endif // HAVE_SIDPLAYFP_BUILDERS_USBSID_H + default: // Emulation Not yet handled // This default case results in the default @@ -872,7 +923,7 @@ (tuneInfo->clockSpeed() != SidTuneInfo::CLOCK_PAL) ? FREQ_NTSC : FREQ_PAL; - length /= + length /= (m_engCfg.defaultC64Model == SidConfig::NTSC) || (m_engCfg.defaultC64Model == SidConfig::OLD_NTSC) ? FREQ_NTSC @@ -885,7 +936,8 @@ // Set up the play timer m_timer.stop = m_timer.length; #ifdef FEAT_NEW_PLAY_API - m_timer.stop += m_fadeoutTime; + if (m_fadeAfter) + m_timer.stop += m_fadeoutTime; #endif if (m_timer.valid) @@ -931,18 +983,6 @@ createSidEmu (EMU_NONE, nullptr); m_engine.load (nullptr); m_engine.config (m_engCfg); - - if (m_quietLevel < 2) - { // Correctly leave ansi mode and get prompt to - // end up in a suitable location - if ((m_iniCfg.console ()).ansi) { - cerr << '\x1b' << "[?25h"; - cerr << '\x1b' << "[0m"; - } -#ifndef _WIN32 - cerr << endl; -#endif - } } // Flush any hardware sid fifos so all music is played @@ -960,6 +1000,11 @@ ((exSIDBuilder *)m_engCfg.sidEmulation)->flush (); break; #endif // HAVE_SIDPLAYFP_BUILDERS_EXSID_H +#ifdef HAVE_SIDPLAYFP_BUILDERS_USBSID_H + case EMU_USBSID: + ((USBSIDBuilder *)m_engCfg.sidEmulation)->flush (); + break; +#endif // HAVE_SIDPLAYFP_BUILDERS_USBSID_H default: break; } @@ -1001,7 +1046,7 @@ int samples = m_engine.play(2000); if (samples < 0) UNLIKELY { - cerr << m_engine.error(); + displayError (m_engine.error()); m_state = playerError; return false; } @@ -1020,7 +1065,7 @@ uint_least32_t samples = m_engine.play(buffer, length); if ((samples < length) || !m_engine.isPlaying()) UNLIKELY { - cerr << m_engine.error(); + displayError (m_engine.error()); m_state = playerError; return false; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/src/player.h new/sidplayfp-2.16.0/src/player.h --- old/sidplayfp-2.15.2/src/player.h 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/src/player.h 2025-12-23 16:12:09.000000000 +0100 @@ -102,6 +102,7 @@ /* The following should disable the soundcard */ EMU_HARDSID, EMU_EXSID, + EMU_USBSID, EMU_SIDSTATION, EMU_COMMODORE, EMU_SIDSYN, @@ -144,6 +145,9 @@ #ifdef HAVE_SIDPLAYFP_BUILDERS_EXSID_H static const char EXSID_ID[]; #endif +#ifdef HAVE_SIDPLAYFP_BUILDERS_USBSID_H + static const char USBSID_ID[]; +#endif #ifdef HAVE_TSID TSID m_tsid; #endif @@ -169,6 +173,11 @@ #endif #ifdef FEAT_NEW_PLAY_API uint_least32_t m_fadeoutTime; + /* + * fade out after song end + * if true fade out time will be added to song duration + */ + bool m_fadeAfter; #endif #ifdef FEAT_REGS_DUMP_SID uint8_t m_registers[3][32]; @@ -255,6 +264,7 @@ // Command line args void displayArgs (const char *arg = nullptr); + void displayVersion (); bool createOutput (output_t driver, const SidTuneInfo *tuneInfo); bool createSidEmu (SIDEMUS emu, const SidTuneInfo *tuneInfo); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sidplayfp-2.15.2/src/sidlib_features.h new/sidplayfp-2.16.0/src/sidlib_features.h --- old/sidplayfp-2.15.2/src/sidlib_features.h 2025-11-02 10:18:27.000000000 +0100 +++ new/sidplayfp-2.16.0/src/sidlib_features.h 2025-12-23 16:12:09.000000000 +0100 @@ -42,4 +42,8 @@ # define FEAT_NEW_PLAY_API #endif +#if LIBSIDPLAYFP_VERSION_MAJ > 2 || (LIBSIDPLAYFP_VERSION_MAJ == 2 && LIBSIDPLAYFP_VERSION_MIN >= 16) +# define FEAT_SID_MODEL +#endif + #endif
