libsidplayfp 1.0.3
|
00001 /* 00002 * This file is part of libsidplayfp, a SID player engine. 00003 * 00004 * Copyright 2011-2013 Leandro Nini <drfiemost@users.sourceforge.net> 00005 * Copyright 2007-2010 Antti Lankila 00006 * 00007 * This program is free software; you can redistribute it and/or modify 00008 * it under the terms of the GNU General Public License as published by 00009 * the Free Software Foundation; either version 2 of the License, or 00010 * (at your option) any later version. 00011 * 00012 * This program is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 * GNU General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this program; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00020 */ 00021 00022 #ifndef OPAMP_H 00023 #define OPAMP_H 00024 00025 #include "Spline.h" 00026 00027 namespace reSIDfp 00028 { 00029 00038 class OpAmp 00039 { 00040 private: 00041 static const double EPSILON; 00042 00044 double x; 00045 00046 const double Vddt, vmin, vmax; 00047 00048 Spline* opamp; 00049 00050 double out[2]; 00051 00052 public: 00060 OpAmp(const double opamp[][2], int opamplength, double Vddt) : 00061 x(0.), 00062 Vddt(Vddt), 00063 vmin(opamp[0][0]), 00064 vmax(opamp[opamplength - 1][0]), 00065 opamp(new Spline(opamp, opamplength)) {} 00066 00067 ~OpAmp() { delete opamp; } 00068 00069 void reset() 00070 { 00071 x = vmin; 00072 } 00073 00081 double solve(double n, double vi); 00082 }; 00083 00084 } // namespace reSIDfp 00085 00086 #endif