Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libresidfp for openSUSE:Factory 
checked in at 2026-06-28 21:09:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libresidfp (Old)
 and      /work/SRC/openSUSE:Factory/.libresidfp.new.11887 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libresidfp"

Sun Jun 28 21:09:49 2026 rev:5 rq:1362118 version:1.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/libresidfp/libresidfp.changes    2026-06-22 
17:33:11.785643147 +0200
+++ /work/SRC/openSUSE:Factory/.libresidfp.new.11887/libresidfp.changes 
2026-06-28 21:11:08.899419858 +0200
@@ -1,0 +2,6 @@
+Sun Jun 28 07:34:29 UTC 2026 - Илья Индиго <[email protected]>
+
+- Updated to 1.1.1
+  * https://github.com/libsidplayfp/libresidfp/releases/tag/v1.1.1
+
+-------------------------------------------------------------------

Old:
----
  libresidfp-1.1.0.tar.gz

New:
----
  libresidfp-1.1.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libresidfp.spec ++++++
--- /var/tmp/diff_new_pack.oZrWpu/_old  2026-06-28 21:11:10.967489788 +0200
+++ /var/tmp/diff_new_pack.oZrWpu/_new  2026-06-28 21:11:10.987490465 +0200
@@ -17,7 +17,7 @@
 
 %define sover 0
 Name:           libresidfp
-Version:        1.1.0
+Version:        1.1.1
 Release:        0
 Summary:        Cycle exact SID emulation
 License:        GPL-2.0-or-later

++++++ libresidfp-1.1.0.tar.gz -> libresidfp-1.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/NEWS.md new/libresidfp-1.1.1/NEWS.md
--- old/libresidfp-1.1.0/NEWS.md        2026-06-21 11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/NEWS.md        2026-06-28 09:10:18.000000000 +0200
@@ -1,3 +1,9 @@
+1.1.1 2026-06-28
+* Properly store/restore paddle_y
+* Reworked voice scaling to fix the DC offset on 6581
+
+
+
 1.1.0 2026-06-21
 * Reduced the 6581 filter curve parameter range to avoid overflows (#19)
 * Clear filter state on model change (#27)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/README.md 
new/libresidfp-1.1.1/README.md
--- old/libresidfp-1.1.0/README.md      2026-06-21 11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/README.md      2026-06-28 09:10:18.000000000 +0200
@@ -16,6 +16,8 @@
 
 -----------------------------------------------------------------------------
 
+## License
+
 _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
  the Free Software Foundation; either version 2 of the License, or
@@ -30,7 +32,6 @@
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA._
 
------------------------------------------------------------------------------
 
 ## About
 
@@ -47,9 +48,9 @@
 
 ### Main differences from reSID:
 
-* combined waveforms are emulated by a parametrized model based on samplings 
from real chips;
+* combined waveforms are emulated by a parametrized model based on samplings 
from real chips, the pulldown effect has been separated from the digital ANDing 
of the waveforms;
 * high quality resampling is done in two steps to allow computational savings 
using lower order filters;
-* interpolation is accomplished with Fritsch-Carlson method to preserve 
monotonicity.
+* interpolation of the opamp values is accomplished with Fritsch-Carlson 
method to preserve monotonicity.
 
 ### Features:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/configure 
new/libresidfp-1.1.1/configure
--- old/libresidfp-1.1.0/configure      2026-06-21 11:22:37.000000000 +0200
+++ new/libresidfp-1.1.1/configure      2026-06-28 09:10:22.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for libresidfp 1.1.0.
+# Generated by GNU Autoconf 2.71 for libresidfp 1.1.1.
 #
 #
 # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -618,8 +618,8 @@
 # Identity of this package.
 PACKAGE_NAME='libresidfp'
 PACKAGE_TARNAME='libresidfp'
-PACKAGE_VERSION='1.1.0'
-PACKAGE_STRING='libresidfp 1.1.0'
+PACKAGE_VERSION='1.1.1'
+PACKAGE_STRING='libresidfp 1.1.1'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL='https://github.com/libsidplayfp/libresidfp/'
 
@@ -1397,7 +1397,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 libresidfp 1.1.0 to adapt to many kinds of systems.
+\`configure' configures libresidfp 1.1.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1468,7 +1468,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libresidfp 1.1.0:";;
+     short | recursive ) echo "Configuration of libresidfp 1.1.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1591,7 +1591,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libresidfp configure 1.1.0
+libresidfp configure 1.1.1
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2260,7 +2260,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libresidfp $as_me 1.1.0, which was
+It was created by libresidfp $as_me 1.1.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3748,7 +3748,7 @@
 
 # Define the identity of the package.
  PACKAGE='libresidfp'
- VERSION='1.1.0'
+ VERSION='1.1.1'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -3896,7 +3896,7 @@
 
 LIB_MAJOR=1
 LIB_MINOR=1
-LIB_LEVEL=0
+LIB_LEVEL=1
 NEWS.md
 
 
@@ -22399,7 +22399,7 @@
 # If any interfaces have been removed or changed since the last public 
release, then set age to 0.
 
 LIBRESIDFPCUR=1
-LIBRESIDFPREV=0
+LIBRESIDFPREV=1
 LIBRESIDFPAGE=1
 LIBRESIDFPVERSION=$LIBRESIDFPCUR:$LIBRESIDFPREV:$LIBRESIDFPAGE
 
@@ -23831,7 +23831,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libresidfp $as_me 1.1.0, which was
+This file was extended by libresidfp $as_me 1.1.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -23891,7 +23891,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-libresidfp config.status 1.1.0
+libresidfp config.status 1.1.1
 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/libresidfp-1.1.0/configure.ac 
new/libresidfp-1.1.1/configure.ac
--- old/libresidfp-1.1.0/configure.ac   2026-06-21 11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/configure.ac   2026-06-28 09:10:18.000000000 +0200
@@ -1,6 +1,6 @@
 m4_define([lib_major], [1])
 m4_define([lib_minor], [1])
-m4_define([lib_level], [0])
+m4_define([lib_level], [1])
 m4_define([lib_version], [lib_major.lib_minor.lib_level])
 
 AC_PREREQ([2.62])
@@ -94,7 +94,7 @@
 # If any interfaces have been removed or changed since the last public 
release, then set age to 0.
 
 LIBRESIDFPCUR=1
-LIBRESIDFPREV=0
+LIBRESIDFPREV=1
 LIBRESIDFPAGE=1
 LIBRESIDFPVERSION=$LIBRESIDFPCUR:$LIBRESIDFPREV:$LIBRESIDFPAGE
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/Dac.h 
new/libresidfp-1.1.1/src/Dac.h
--- old/libresidfp-1.1.0/src/Dac.h      2026-06-21 11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/src/Dac.h      2026-06-28 09:10:18.000000000 +0200
@@ -48,6 +48,7 @@
  * the R and 2R resistors, or by output impedance in the NMOS transistors
  * providing the bit voltages. A good approximation of the actual DAC output is
  * achieved for 2R/R ~ 2.20.
+ * NOTE: from the schematics the 2R/R ratio seems pretty accurate.
  *
  * The MOS 8580 DACs, on the other hand, do not exhibit any discontinuities.
  * These DACs include the correct termination resistor, and also seem to have
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/Filter.cpp 
new/libresidfp-1.1.1/src/Filter.cpp
--- old/libresidfp-1.1.0/src/Filter.cpp 2026-06-21 11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/src/Filter.cpp 2026-06-28 09:10:18.000000000 +0200
@@ -112,12 +112,16 @@
     updateMixing();
 }
 
-Filter::Filter(FilterModelConfig& new_fmc) :
-    mixer(new_fmc.getMixer()),
-    summer(new_fmc.getSummer()),
-    resonance(new_fmc.getResonance()),
-    volume(new_fmc.getVolume()),
-    fmc(new_fmc)
+Filter::Filter(const FilterModelConfig& fmc,
+               const Integrator& hpIntegrator,
+               const Integrator& bpIntegrator) :
+    mixer(fmc.getMixer()),
+    summer(fmc.getSummer()),
+    resonance(fmc.getResonance()),
+    volume(fmc.getVolume()),
+    m_fmc(fmc),
+    m_hpIntegrator(hpIntegrator),
+    m_bpIntegrator(bpIntegrator)
 {
     input(0);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/Filter.h 
new/libresidfp-1.1.1/src/Filter.h
--- old/libresidfp-1.1.0/src/Filter.h   2026-06-21 11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/src/Filter.h   2026-06-28 09:10:18.000000000 +0200
@@ -1,7 +1,7 @@
 /*
  * This file is part of libsidplayfp, a SID player engine.
  *
- * Copyright 2011-2025 Leandro Nini <[email protected]>
+ * Copyright 2011-2026 Leandro Nini <[email protected]>
  * Copyright 2007-2010 Antti Lankila
  * Copyright 2004 Dag Lem <[email protected]>
  *
@@ -24,6 +24,7 @@
 #define FILTER_H
 
 #include "FilterModelConfig.h"
+#include "Integrator.h"
 #include "Voice.h"
 
 #include "siddefs-fp.h"
@@ -44,7 +45,11 @@
     uint16_t* resonance;
     uint16_t* volume;
 
-    FilterModelConfig& fmc;
+    const FilterModelConfig& m_fmc;
+
+    const Integrator& m_hpIntegrator;
+
+    const Integrator& m_bpIntegrator;
 
     /// Current filter/voice mixer setting.
     uint16_t* currentMixer = nullptr;
@@ -58,7 +63,6 @@
     /// Current volume amplifier setting.
     uint16_t* currentVolume = nullptr;
 
-protected:
     /// Filter highpass state.
     int32_t Vhp = 0;
 
@@ -68,9 +72,8 @@
     /// Filter lowpass state.
     int32_t Vlp = 0;
 
-private:
     /// Filter external input.
-    int32_t Ve = 0;
+    float extin = 0;
 
     /// Filter cutoff frequency.
     uint16_t fc = 0;
@@ -86,7 +89,6 @@
     /// Switch voice 3 off.
     bool voice3off = false;
 
-protected:
     /// Highpass, bandpass, and lowpass filter modes.
     //@{
     bool hp = false;
@@ -104,19 +106,6 @@
     /// Selects which inputs to route through filter.
     uint8_t filt = 0;
 
-private:
-    inline int32_t getNormalizedVoice(Voice& v) const
-    {
-        return fmc.getNormalizedVoice(v.output(), v.envelope()->output());
-    }
-
-    // If voice 3 is off we still need to clock the waveform generator
-    inline static int32_t getSilentVoice(Voice& v)
-    {
-        v.wave()->output();
-        return 0;
-    }
-
 protected:
     /**
      * Update filter cutoff frequency.
@@ -140,12 +129,19 @@
      */
     inline unsigned int getFC() const { return static_cast<unsigned int>(fc); }
 
-    virtual int32_t solveIntegrators() = 0;
-
     virtual void restartIntegrators() = 0;
 
+    inline int32_t getNormalizedVoice(float v, uint8_t env) const
+    {
+        return m_fmc.getNormalizedVoice(v, env);
+    }
+
+    virtual int32_t getNormalizedMixerVoice(float v, uint8_t env) const = 0;
+
 public:
-    Filter(FilterModelConfig& fmc);
+    Filter(const FilterModelConfig& fmc,
+           const Integrator& hpIntegrator,
+           const Integrator& bpIntegrator);
 
     virtual ~Filter() = default;
 
@@ -204,7 +200,7 @@
      *
      * @param input a signed 16 bit sample
      */
-    void input(int16_t input) { Ve = fmc.getNormalizedVoice(input/32768.f, 0); 
}
+    void input(int16_t input) { extin = input/65535.f; }
 
     void restart() { restartIntegrators(); Vhp = 0; Vlp = 0; Vbp = 0; }
 };
@@ -219,22 +215,43 @@
 RESIDFP_INLINE
 uint16_t Filter::clock(Voice& voice1, Voice& voice2, Voice& voice3)
 {
-    const int32_t V1 = getNormalizedVoice(voice1);
-    const int32_t V2 = getNormalizedVoice(voice2);
-    // Voice 3 is silenced by voice3off if it is not routed through the filter.
-    const int32_t V3 = (filt3 || !voice3off) ? getNormalizedVoice(voice3) : 
getSilentVoice(voice3);
+    // Waveform outputs
+    const float wav1 = voice1.output();
+    const float wav2 = voice2.output();
+    const float wav3 = voice3.output();
+
+    // Envelope outputs
+    const uint8_t env1 = voice1.envelope()->output();
+    const uint8_t env2 = voice2.envelope()->output();
+    const uint8_t env3 = voice3.envelope()->output();
 
+    // Voltage summer for filter input
     int32_t Vsum = 0;
-    int32_t Vmix = 0;
-
-    (filt1 ? Vsum : Vmix) += V1;
-    (filt2 ? Vsum : Vmix) += V2;
-    (filt3 ? Vsum : Vmix) += V3;
-    (filtE ? Vsum : Vmix) += Ve;
+    Vsum += filt1 ? getNormalizedVoice(wav1, env1) : 0;
+    Vsum += filt2 ? getNormalizedVoice(wav2, env2) : 0;
+    Vsum += filt3 ? getNormalizedVoice(wav3, env3) : 0;
+    Vsum += filtE ? getNormalizedVoice(extin, 0) : 0;
+    Vsum += Vlp;
+    Vsum += currentResonance[Vbp];
+
+    // Filter
+    Vhp = currentSummer[Vsum];
+    Vbp = m_hpIntegrator.solve(Vhp);
+    Vlp = m_bpIntegrator.solve(Vbp);
+
+    int32_t Vfilt = 0;
+    if (lp) Vfilt += Vlp;
+    if (bp) Vfilt += Vbp;
+    if (hp) Vfilt += Vhp;
 
-    Vhp = currentSummer[currentResonance[Vbp] + Vlp + Vsum];
-
-    Vmix += solveIntegrators();
+    // Voltage summer for mixer input
+    int32_t Vmix = 0;
+    Vmix += filt1 ? 0 : getNormalizedMixerVoice(wav1, env1);
+    Vmix += filt2 ? 0 : getNormalizedMixerVoice(wav2, env2);
+    // Voice 3 is silenced by voice3off if it is not routed through the filter
+    Vmix += (filt3 || voice3off) ? 0 : getNormalizedMixerVoice(wav3, env3);
+    Vmix += filtE ? 0 : getNormalizedMixerVoice(extin, 0);
+    Vmix += Vfilt;
 
     return currentVolume[currentMixer[Vmix]];
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/Filter6581.cpp 
new/libresidfp-1.1.1/src/Filter6581.cpp
--- old/libresidfp-1.1.0/src/Filter6581.cpp     2026-06-21 11:22:33.000000000 
+0200
+++ new/libresidfp-1.1.1/src/Filter6581.cpp     2026-06-28 09:10:18.000000000 
+0200
@@ -1,7 +1,7 @@
 /*
  * This file is part of libsidplayfp, a SID player engine.
  *
- * Copyright 2011-2024 Leandro Nini <[email protected]>
+ * Copyright 2011-2026 Leandro Nini <[email protected]>
  * Copyright 2007-2010 Antti Lankila
  * Copyright 2004,2010 Dag Lem <[email protected]>
  *
@@ -29,25 +29,6 @@
 namespace reSIDfp
 {
 
-int32_t Filter6581::solveIntegrators()
-{
-    Vbp = hpIntegrator.solve(Vhp);
-    Vlp = bpIntegrator.solve(Vbp);
-
-    int32_t Vfilt = 0;
-    if (lp) Vfilt += Vlp;
-    if (bp) Vfilt += Vbp;
-    if (hp) Vfilt += Vhp;
-
-    // The filter input resistors are slightly bigger than the voice ones
-    // Scale the values accordingly
-    constexpr int32_t filterGain = static_cast<int32_t>(0.93 * (1 << 12));
-    // Scaling unsigned values adds a DC offset
-    constexpr int32_t offset = 32767 * ((1 << 12) - filterGain);
-    assert(Vfilt >= 0);
-    return (Vfilt * filterGain + offset) >> 12;
-}
-
 Filter6581::~Filter6581()
 {
     delete [] f0_dac;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/Filter6581.h 
new/libresidfp-1.1.1/src/Filter6581.h
--- old/libresidfp-1.1.0/src/Filter6581.h       2026-06-21 11:22:33.000000000 
+0200
+++ new/libresidfp-1.1.1/src/Filter6581.h       2026-06-28 09:10:18.000000000 
+0200
@@ -1,7 +1,7 @@
 /*
  * This file is part of libsidplayfp, a SID player engine.
  *
- * Copyright 2011-2024 Leandro Nini <[email protected]>
+ * Copyright 2011-2026 Leandro Nini <[email protected]>
  * Copyright 2007-2010 Antti Lankila
  * Copyright 2004,2010 Dag Lem <[email protected]>
  *
@@ -95,7 +95,7 @@
  * $17           |   |                    (CAP2B)     |  (CAP1B)     |
  * 0=to mixer    |   +--R8--+  +---R8--+      +---C---o      +---C---o
  * 1=to filter   |          |  |       |      |       |      |       |
- *                ------R8--o--o--[A>--o--Rw--o--[A>--o--Rw--o--[A>--o
+ *               +------R8--o--o--[A>--o--Rw--o--[A>--o--Rw--o--[A>--o
  *     ve (EXT IN)          |          |              |              |
  * D3  \ ---------------R8--o          |              | (CAP2A)      | (CAP1A)
  *     |   v3               |          | vhp          | vbp          | vlp
@@ -336,13 +336,20 @@
      */
     void updateCenterFrequency() override;
 
-    int32_t solveIntegrators() override;
-
     void restartIntegrators() override { hpIntegrator.restart(); 
bpIntegrator.restart(); }
 
+    /*
+     * The filter input resistors on the 6581 are slightly bigger than the 
voice ones,
+     * scale the values accordingly.
+     */
+    int32_t getNormalizedMixerVoice(float v, uint8_t env) const override
+    {
+        return getNormalizedVoice(v * 
static_cast<float>(FilterModelConfig6581::VF_TR_RATIO), env);
+    }
+
 public:
     Filter6581() :
-        Filter(*FilterModelConfig6581::getInstance()),
+        Filter(*FilterModelConfig6581::getInstance(), hpIntegrator, 
bpIntegrator),
         hpIntegrator(*FilterModelConfig6581::getInstance()),
         bpIntegrator(*FilterModelConfig6581::getInstance()),
         f0_dac(FilterModelConfig6581::getInstance()->getDAC(0.5))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/Filter8580.cpp 
new/libresidfp-1.1.1/src/Filter8580.cpp
--- old/libresidfp-1.1.0/src/Filter8580.cpp     2026-06-21 11:22:33.000000000 
+0200
+++ new/libresidfp-1.1.1/src/Filter8580.cpp     2026-06-28 09:10:18.000000000 
+0200
@@ -1,7 +1,7 @@
 /*
  * This file is part of libsidplayfp, a SID player engine.
  *
- * Copyright 2011-2024 Leandro Nini <[email protected]>
+ * Copyright 2011-2026 Leandro Nini <[email protected]>
  * Copyright 2007-2010 Antti Lankila
  * Copyright 2004,2010 Dag Lem <[email protected]>
  *
@@ -27,19 +27,6 @@
 namespace reSIDfp
 {
 
-int32_t Filter8580::solveIntegrators()
-{
-    Vbp = hpIntegrator.solve(Vhp);
-    Vlp = bpIntegrator.solve(Vbp);
-
-    int32_t Vfilt = 0;
-    if (lp) Vfilt += Vlp;
-    if (bp) Vfilt += Vbp;
-    if (hp) Vfilt += Vhp;
-
-    return Vfilt;
-}
-
 /**
  * W/L ratio of frequency DAC bit 0,
  * other bit are proportional.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/Filter8580.h 
new/libresidfp-1.1.1/src/Filter8580.h
--- old/libresidfp-1.1.0/src/Filter8580.h       2026-06-21 11:22:33.000000000 
+0200
+++ new/libresidfp-1.1.1/src/Filter8580.h       2026-06-28 09:10:18.000000000 
+0200
@@ -1,7 +1,7 @@
 /*
  * This file is part of libsidplayfp, a SID player engine.
  *
- * Copyright 2011-2024 Leandro Nini <[email protected]>
+ * Copyright 2011-2026 Leandro Nini <[email protected]>
  * Copyright 2007-2010 Antti Lankila
  * Copyright 2004,2010 Dag Lem <[email protected]>
  *
@@ -293,13 +293,16 @@
      */
     void updateCenterFrequency() override;
 
-    int32_t solveIntegrators() override;
-
     void restartIntegrators() override { hpIntegrator.restart(); 
bpIntegrator.restart(); }
 
+    int32_t getNormalizedMixerVoice(float v, uint8_t env) const override
+    {
+        return getNormalizedVoice(v, env);
+    }
+
 public:
     Filter8580() :
-        Filter(*FilterModelConfig8580::getInstance()),
+        Filter(*FilterModelConfig8580::getInstance(), hpIntegrator, 
bpIntegrator),
         hpIntegrator(*FilterModelConfig8580::getInstance()),
         bpIntegrator(*FilterModelConfig8580::getInstance())
     {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/FilterModelConfig.h 
new/libresidfp-1.1.1/src/FilterModelConfig.h
--- old/libresidfp-1.1.0/src/FilterModelConfig.h        2026-06-21 
11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/src/FilterModelConfig.h        2026-06-28 
09:10:18.000000000 +0200
@@ -283,10 +283,10 @@
     }
 
 public:
-    uint16_t* getVolume() { return volume; }
-    uint16_t* getResonance() { return resonance; }
-    uint16_t* getSummer() { return summer; }
-    uint16_t* getMixer() { return mixer; }
+    uint16_t* getVolume() const { return volume; }
+    uint16_t* getResonance() const { return resonance; }
+    uint16_t* getSummer() const { return summer; }
+    uint16_t* getMixer() const { return mixer; }
 
     inline uint16_t getOpampRev(int i) const { return opamp_rev[i]; }
     inline double getVddt() const { return Vddt; }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/FilterModelConfig6581.cpp 
new/libresidfp-1.1.1/src/FilterModelConfig6581.cpp
--- old/libresidfp-1.1.0/src/FilterModelConfig6581.cpp  2026-06-21 
11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/src/FilterModelConfig6581.cpp  2026-06-28 
09:10:18.000000000 +0200
@@ -198,7 +198,7 @@
             vmin,
             vmax);
 
-        buildMixerTable(opampModel, 8.0 / 6.0);
+        buildMixerTable(opampModel, 8.0 / (6.0 * VF_TR_RATIO));
     };
 
     auto filterGain = [this]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/FilterModelConfig6581.h 
new/libresidfp-1.1.1/src/FilterModelConfig6581.h
--- old/libresidfp-1.1.0/src/FilterModelConfig6581.h    2026-06-21 
11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/src/FilterModelConfig6581.h    2026-06-28 
09:10:18.000000000 +0200
@@ -46,6 +46,14 @@
     // This allows access to the private constructor
     friend std::unique_ptr<FilterModelConfig6581>::deleter_type;
 
+public:
+    /*
+     * The ratio of the resistors of the mixer input for filter signals
+     * compared to the voice ones.
+     * See the 6581 filter schematic.
+     */
+    static constexpr double VF_TR_RATIO = 1.07;
+
 private:
     static constexpr unsigned int DAC_BITS = 11;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/SID.cpp 
new/libresidfp-1.1.1/src/SID.cpp
--- old/libresidfp-1.1.0/src/SID.cpp    2026-06-21 11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/src/SID.cpp    2026-06-28 09:10:18.000000000 +0200
@@ -41,11 +41,6 @@
 constexpr unsigned int ENV_DAC_BITS = 8;
 constexpr unsigned int OSC_DAC_BITS = 12;
 
-#if 0
-Note: this needs more in-depth analysis.
-With the implementation of the 6581 DC drift the digis become too loud.
-Also there is no evidence in the schematics for a DC offset in the 8580.
-
 /**
  * The waveform D/A converter introduces a DC offset in the signal
  * to the envelope multiplying D/A converter. The "zero" level of
@@ -109,12 +104,16 @@
  * To me that seems as regular 8580s have somewhat wide 0-level range,
  * whereas that digi-compatible 8580 has it very narrow.
  * On my 6581R4AR has 0x3A as the only value giving the same output level as 
1.prg
+ *
+ * NOTE: this needs more in-depth analysis.
+ * There is no evidence in the schematics for a DC offset in the 8580
+ * and it would make digis too loud.
  */
 //@{
 constexpr unsigned int OFFSET_6581 = 0x380;
 constexpr unsigned int OFFSET_8580 = 0x9c0;
 //@}
-#endif
+
 
 /**
  * Bus value stays alive for some time after each operation.
@@ -269,7 +268,7 @@
         dacBuilder.kinkedDac(model);
 
         //const double offset = dacBuilder.getOutput(is6581 ? OFFSET_6581 : 
OFFSET_8580);
-        const double offset = dacBuilder.getOutput(0x7ff, is6581);
+        const double offset = dacBuilder.getOutput(is6581 ? OFFSET_6581 : 
0x7ff, is6581);
 
         for (unsigned int i = 0; i < (1 << OSC_DAC_BITS); i++)
         {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/State.cpp 
new/libresidfp-1.1.1/src/State.cpp
--- old/libresidfp-1.1.0/src/State.cpp  2026-06-21 11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/src/State.cpp  2026-06-28 09:10:18.000000000 +0200
@@ -88,7 +88,7 @@
     state.bus_value_ttl = s.busValueTtl;
     state.nextVoiceSync = s.nextVoiceSync;
     state.paddle_x = s.paddleX;
-    state.paddle_x = s.paddleY;
+    state.paddle_y = s.paddleY;
     state.model = s.model;
     state.cws = s.cws;
 
@@ -98,7 +98,7 @@
         state.Vhp[i] = f->Vhp;
         state.Vbp[i] = f->Vbp;
         state.Vlp[i] = f->Vlp;
-        state.Ve[i] = f->Ve;
+        state.extin[i] = f->extin;
         state.fc[i] = f->fc;
         state.filt1[i] = f->filt1;
         state.filt2[i] = f->filt2;
@@ -198,7 +198,7 @@
     s.busValueTtl = state.bus_value_ttl;
     s.nextVoiceSync = state.nextVoiceSync;
     s.paddleX = state.paddle_x;
-    s.paddleY = state.paddle_x;
+    s.paddleY = state.paddle_y;
     s.model = state.model;
     s.setChipModel(s.model);
     s.cws = state.cws;
@@ -210,7 +210,7 @@
         f->Vhp = state.Vhp[i];
         f->Vbp = state.Vbp[i];
         f->Vlp = state.Vlp[i];
-        f->Ve = state.Ve[i];
+        f->extin = state.extin[i];
         f->fc = state.fc[i];
         f->filt1 = state.filt1[i];
         f->filt2 = state.filt2[i];
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libresidfp-1.1.0/src/State.h 
new/libresidfp-1.1.1/src/State.h
--- old/libresidfp-1.1.0/src/State.h    2026-06-21 11:22:33.000000000 +0200
+++ new/libresidfp-1.1.1/src/State.h    2026-06-28 09:10:18.000000000 +0200
@@ -118,7 +118,7 @@
     int32_t Vhp[2];
     int32_t Vbp[2];
     int32_t Vlp[2];
-    int32_t Ve[2];
+    float extin[2];
     uint8_t fc[2];
     uint8_t vol[2];
     uint8_t filt[2];

Reply via email to