libsidplayfp  2.0.2
FilterModelConfig8580.h
1 /*
2  * This file is part of libsidplayfp, a SID player engine.
3  *
4  * Copyright 2011-2016 Leandro Nini <drfiemost@users.sourceforge.net>
5  * Copyright 2007-2010 Antti Lankila
6  * Copyright 2004,2010 Dag Lem
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  */
22 
23 #ifndef FILTERMODELCONFIG8580_H
24 #define FILTERMODELCONFIG8580_H
25 
26 #include <memory>
27 
28 #include "Spline.h"
29 
30 #include "sidcxx11.h"
31 
32 namespace reSIDfp
33 {
34 
35 class Integrator8580;
36 
41 {
42 private:
43  static std::unique_ptr<FilterModelConfig8580> instance;
44  // This allows access to the private constructor
45 #ifdef HAVE_CXX11
46  friend std::unique_ptr<FilterModelConfig8580>::deleter_type;
47 #else
48  friend class std::auto_ptr<FilterModelConfig8580>;
49 #endif
50 
51  const double voice_voltage_range;
52  const double voice_DC_voltage;
53 
55  const double C;
56 
58 
59  const double Vdd;
60  const double Vth;
61  const double Ut;
62  const double k;
63  const double uCox;
64  const double kVddt;
65 
66 
67  // Derived stuff
68  const double vmin, vmax;
69  const double denorm, norm;
70 
72  const double N16;
73 
75 
76  unsigned short* mixer[8];
77  unsigned short* summer[5];
78  unsigned short* gain_vol[16];
79  unsigned short* gain_res[16];
81 
83  unsigned short opamp_rev[1 << 16];
84 
85 private:
88 
89 public:
90  static FilterModelConfig8580* getInstance();
91 
96  int getVoiceScaleS14() const { return static_cast<int>((norm * ((1 << 14) - 1)) * voice_voltage_range); }
97 
101  int getVoiceDC() const { return static_cast<int>(N16 * (voice_DC_voltage - vmin)); }
102 
103  unsigned short** getGainVol() { return gain_vol; }
104  unsigned short** getGainRes() { return gain_res; }
105 
106  unsigned short** getSummer() { return summer; }
107 
108  unsigned short** getMixer() { return mixer; }
109 
115  std::unique_ptr<Integrator8580> buildIntegrator();
116 };
117 
118 } // namespace reSIDfp
119 
120 #endif
reSIDfp::FilterModelConfig8580::buildIntegrator
std::unique_ptr< Integrator8580 > buildIntegrator()
Definition: FilterModelConfig8580.cpp:273
reSIDfp::FilterModelConfig8580::getVoiceDC
int getVoiceDC() const
Definition: FilterModelConfig8580.h:101
reSIDfp::FilterModelConfig8580::getVoiceScaleS14
int getVoiceScaleS14() const
Definition: FilterModelConfig8580.h:96
reSIDfp::FilterModelConfig8580
Definition: FilterModelConfig8580.h:41