remove MOS8580

..sound nearly the same but need too much resources
master
Frank Bösing 8 years ago
parent a40e411a82
commit ee02b07d33
  1. 13
      reSID.cpp
  2. 10
      reSID.h
  3. 8
      reSID/extfilt.cc
  4. 2
      reSID/extfilt.h
  5. 19
      reSID/filter.cc
  6. 6
      reSID/filter.h
  7. 3
      reSID/sid.cc
  8. 2
      reSID/sid.h
  9. 2
      reSID/siddefs.h
  10. 9
      reSID/voice.cc
  11. 2
      reSID/voice.h
  12. 13
      reSID/wave.cc
  13. 2
      reSID/wave.h
  14. 8
      sid.cpp

@ -11,7 +11,7 @@
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this library. If not, see <http://www.gnu.org/licenses/>. along with this library. If not, see <http://www.gnu.org/licenses/>.
The helix decoder itself as a different license, look at the subdirectories for more info.
Diese Bibliothek ist freie Software: Sie können es unter den Bedingungen Diese Bibliothek ist freie Software: Sie können es unter den Bedingungen
der GNU General Public License, wie von der Free Software Foundation, der GNU General Public License, wie von der Free Software Foundation,
Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren
@ -22,23 +22,21 @@
Siehe die GNU General Public License für weitere Details. Siehe die GNU General Public License für weitere Details.
Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>. Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>.
Der Helixdecoder selbst hat eine eigene Lizenz, bitte für mehr Informationen
in den Unterverzeichnissen nachsehen.
*/ */
#include "reSID.h" #include "reSID.h"
#include <AudioStream.h> #include <AudioStream.h>
#define OVERSAMPLE 20 #define OVERSAMPLE 23
static SID sid; static SID sid;
void AudioPlaySID::begin(void) void AudioPlaySID::begin(void)
{ {
this->reset(); this->reset();
sid.set_sampling_parameters(OVERSAMPLE * 44117, SAMPLE_FAST, 44117); sid.set_sampling_parameters(OVERSAMPLE * AUDIO_SAMPLE_RATE_EXACT, SAMPLE_FAST, AUDIO_SAMPLE_RATE_EXACT);
//sid.set_chip_model(MOS6581); //sid.set_chip_model(MOS6581);
sid.set_chip_model(MOS8580); //sid.set_chip_model(MOS8580);
playing = true; playing = true;
} }
@ -54,6 +52,7 @@ void AudioPlaySID::stop(void)
__enable_irq(); __enable_irq();
} }
//inline
void AudioPlaySID::setreg(int ofs, int val) { void AudioPlaySID::setreg(int ofs, int val) {
sid.write(ofs, val); sid.write(ofs, val);
} }

@ -11,7 +11,7 @@
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this library. If not, see <http://www.gnu.org/licenses/>. along with this library. If not, see <http://www.gnu.org/licenses/>.
The helix decoder itself as a different license, look at the subdirectories for more info.
Diese Bibliothek ist freie Software: Sie können es unter den Bedingungen Diese Bibliothek ist freie Software: Sie können es unter den Bedingungen
der GNU General Public License, wie von der Free Software Foundation, der GNU General Public License, wie von der Free Software Foundation,
Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren
@ -22,8 +22,7 @@
Siehe die GNU General Public License für weitere Details. Siehe die GNU General Public License für weitere Details.
Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>. Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>.
Der Helixdecoder selbst hat eine eigene Lizenz, bitte für mehr Informationen
in den Unterverzeichnissen nachsehen.
*/ */
#include "sid.h" #include "sid.h"
@ -37,13 +36,14 @@ class AudioPlaySID : public AudioStream
public: public:
AudioPlaySID(void) : AudioStream(0, NULL) { begin(); } AudioPlaySID(void) : AudioStream(0, NULL) { begin(); }
void begin(void); void begin(void);
void setreg(int ofs, int val); //inline
void setreg(int ofs, int val);// { sid.write(ofs, val);}
void reset(void); void reset(void);
void stop(void); void stop(void);
bool isPlaying(void) { return playing; } bool isPlaying(void) { return playing; }
virtual void update(void);
private: private:
volatile bool playing; volatile bool playing;
virtual void update(void);
}; };

@ -30,7 +30,10 @@ ExternalFilter::ExternalFilter()
reset(); reset();
enable_filter(true); enable_filter(true);
set_sampling_parameter(15915.6); set_sampling_parameter(15915.6);
set_chip_model(MOS6581); //set_chip_model(MOS6581);
{//instead:
mixer_DC = ((((0x800 - 0x380) + 0x800)*0xff*3 - 0xfff*0xff/18) >> 7)*0x0f;
}
} }
@ -65,6 +68,7 @@ void ExternalFilter::set_sampling_parameter(float pass_freq)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Set chip model. // Set chip model.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
/*
void ExternalFilter::set_chip_model(chip_model model) void ExternalFilter::set_chip_model(chip_model model)
{ {
if (model == MOS6581) { if (model == MOS6581) {
@ -78,7 +82,7 @@ void ExternalFilter::set_chip_model(chip_model model)
mixer_DC = 0; mixer_DC = 0;
} }
} }
*/
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// SID reset. // SID reset.

@ -44,7 +44,7 @@ public:
void enable_filter(bool enable); void enable_filter(bool enable);
void set_sampling_parameter(float pass_freq); void set_sampling_parameter(float pass_freq);
void set_chip_model(chip_model model); //void set_chip_model(chip_model model);
RESID_INLINE void clock(sound_sample Vi); RESID_INLINE void clock(sound_sample Vi);
RESID_INLINE void clock(cycle_count delta_t, sound_sample Vi); RESID_INLINE void clock(cycle_count delta_t, sound_sample Vi);

@ -80,7 +80,7 @@ const fc_point Filter::f0_points_6581[] =
{ 2047, 18000 }, // 0xff 0x07 { 2047, 18000 }, // 0xff 0x07
{ 2047, 18000 } // 0xff 0x07 - repeated end point { 2047, 18000 } // 0xff 0x07 - repeated end point
}; };
/*
const fc_point Filter::f0_points_8580[] = const fc_point Filter::f0_points_8580[] =
{ {
// FC f FCHI FCLO // FC f FCHI FCLO
@ -105,7 +105,7 @@ const fc_point Filter::f0_points_8580[] =
{ 2047, 12500 }, // 0xff 0x07 { 2047, 12500 }, // 0xff 0x07
{ 2047, 12500 } // 0xff 0x07 - repeated end point { 2047, 12500 } // 0xff 0x07 - repeated end point
}; };
*/
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Constructor. // Constructor.
@ -136,11 +136,22 @@ Filter::Filter()
interpolate(f0_points_6581, f0_points_6581 interpolate(f0_points_6581, f0_points_6581
+ sizeof(f0_points_6581)/sizeof(*f0_points_6581) - 1, + sizeof(f0_points_6581)/sizeof(*f0_points_6581) - 1,
PointPlotter<sound_sample>(f0_6581), 1.0); PointPlotter<sound_sample>(f0_6581), 1.0);
/*
interpolate(f0_points_8580, f0_points_8580 interpolate(f0_points_8580, f0_points_8580
+ sizeof(f0_points_8580)/sizeof(*f0_points_8580) - 1, + sizeof(f0_points_8580)/sizeof(*f0_points_8580) - 1,
PointPlotter<sound_sample>(f0_8580), 1.0); PointPlotter<sound_sample>(f0_8580), 1.0);
*/
// set_chip_model(MOS6581);
{//instead:
mixer_DC = -0xfff*0xff/18 >> 7;
f0 = f0_6581;
f0_points = f0_points_6581;
f0_count = sizeof(f0_points_6581)/sizeof(*f0_points_6581);
set_w0();
set_Q();
}
set_chip_model(MOS6581);
} }
@ -156,6 +167,7 @@ void Filter::enable_filter(bool enable)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Set chip model. // Set chip model.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
/*
void Filter::set_chip_model(chip_model model) void Filter::set_chip_model(chip_model model)
{ {
if (model == MOS6581) { if (model == MOS6581) {
@ -187,6 +199,7 @@ void Filter::set_chip_model(chip_model model)
set_w0(); set_w0();
set_Q(); set_Q();
} }
*/
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

@ -126,7 +126,7 @@ public:
Filter(); Filter();
void enable_filter(bool enable); void enable_filter(bool enable);
void set_chip_model(chip_model model); // void set_chip_model(chip_model model);
RESID_INLINE RESID_INLINE
void clock(sound_sample voice1, sound_sample voice2, sound_sample voice3, void clock(sound_sample voice1, sound_sample voice2, sound_sample voice3,
@ -191,10 +191,10 @@ protected:
// Cutoff frequency tables. // Cutoff frequency tables.
// FC is an 11 bit register. // FC is an 11 bit register.
sound_sample f0_6581[2048]; sound_sample f0_6581[2048];
sound_sample f0_8580[2048]; //sound_sample f0_8580[2048];
sound_sample* f0; sound_sample* f0;
const static fc_point f0_points_6581[]; const static fc_point f0_points_6581[];
const static fc_point f0_points_8580[]; //const static fc_point f0_points_8580[];
const fc_point* f0_points; const fc_point* f0_points;
int f0_count; int f0_count;

@ -74,6 +74,7 @@ SID::~SID()
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Set chip model. // Set chip model.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
/*
void SID::set_chip_model(chip_model model) void SID::set_chip_model(chip_model model)
{ {
voice[0].set_chip_model(model); voice[0].set_chip_model(model);
@ -83,7 +84,7 @@ void SID::set_chip_model(chip_model model)
filter.set_chip_model(model); filter.set_chip_model(model);
extfilt.set_chip_model(model); extfilt.set_chip_model(model);
} }
*/
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// SID reset. // SID reset.

@ -34,7 +34,7 @@ public:
SID(); SID();
~SID(); ~SID();
void set_chip_model(chip_model model); //void set_chip_model(chip_model model);
void enable_filter(bool enable); void enable_filter(bool enable);
void enable_external_filter(bool enable); void enable_external_filter(bool enable);
bool set_sampling_parameters(float clock_freq, sampling_method method, bool set_sampling_parameters(float clock_freq, sampling_method method,

@ -66,7 +66,7 @@ typedef int cycle_count;
typedef int sound_sample; typedef int sound_sample;
typedef sound_sample fc_point[2]; typedef sound_sample fc_point[2];
enum chip_model { MOS6581, MOS8580 }; //enum chip_model { MOS6581, MOS8580 };
enum sampling_method { SAMPLE_FAST, SAMPLE_INTERPOLATE, enum sampling_method { SAMPLE_FAST, SAMPLE_INTERPOLATE,
SAMPLE_RESAMPLE_INTERPOLATE, SAMPLE_RESAMPLE_FAST }; SAMPLE_RESAMPLE_INTERPOLATE, SAMPLE_RESAMPLE_FAST };

@ -28,12 +28,17 @@ RESID_NAMESPACE_START
Voice::Voice() Voice::Voice()
: muted(false) : muted(false)
{ {
set_chip_model(MOS6581); //set_chip_model(MOS6581);
{//instead:
wave_zero = 0x380;
voice_DC = 0x800*0xff;
}
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Set chip model. // Set chip model.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
/*
void Voice::set_chip_model(chip_model model) void Voice::set_chip_model(chip_model model)
{ {
wave.set_chip_model(model); wave.set_chip_model(model);
@ -107,7 +112,7 @@ void Voice::set_chip_model(chip_model model)
voice_DC = 0; voice_DC = 0;
} }
} }
*/
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Set sync source. // Set sync source.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

@ -31,7 +31,7 @@ class Voice
public: public:
Voice(); Voice();
void set_chip_model(chip_model model); // void set_chip_model(chip_model model);
void set_sync_source(Voice*); void set_sync_source(Voice*);
void reset(); void reset();
void mute(bool enable); void mute(bool enable);

@ -29,8 +29,13 @@ WaveformGenerator::WaveformGenerator()
{ {
sync_source = this; sync_source = this;
set_chip_model(MOS6581); // set_chip_model(MOS6581);
{//instead:
wave__ST = &wave6581__ST[0];
wave_P_T = &wave6581_P_T[0];
wave_PS_ = &wave6581_PS_[0];
wave_PST = &wave6581_PST[0];
}
reset(); reset();
} }
@ -48,6 +53,7 @@ void WaveformGenerator::set_sync_source(WaveformGenerator* source)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Set chip model. // Set chip model.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
/*
void WaveformGenerator::set_chip_model(chip_model model) void WaveformGenerator::set_chip_model(chip_model model)
{ {
if (model == MOS6581) { if (model == MOS6581) {
@ -62,9 +68,8 @@ void WaveformGenerator::set_chip_model(chip_model model)
wave_PS_ = &wave8580_PS_[0]; wave_PS_ = &wave8580_PS_[0];
wave_PST = &wave8580_PST[0]; wave_PST = &wave8580_PST[0];
} }
} }
*/
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Register functions. // Register functions.

@ -38,7 +38,7 @@ public:
WaveformGenerator(); WaveformGenerator();
void set_sync_source(WaveformGenerator*); void set_sync_source(WaveformGenerator*);
void set_chip_model(chip_model model); //void set_chip_model(chip_model model);
RESID_INLINE void clock(); RESID_INLINE void clock();
RESID_INLINE void clock(cycle_count delta_t); RESID_INLINE void clock(cycle_count delta_t);

@ -11,7 +11,7 @@
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this library. If not, see <http://www.gnu.org/licenses/>. along with this library. If not, see <http://www.gnu.org/licenses/>.
The helix decoder itself as a different license, look at the subdirectories for more info.
Diese Bibliothek ist freie Software: Sie können es unter den Bedingungen Diese Bibliothek ist freie Software: Sie können es unter den Bedingungen
der GNU General Public License, wie von der Free Software Foundation, der GNU General Public License, wie von der Free Software Foundation,
Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren Version 3 der Lizenz oder (nach Ihrer Wahl) jeder neueren
@ -22,8 +22,7 @@
Siehe die GNU General Public License für weitere Details. Siehe die GNU General Public License für weitere Details.
Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Sie sollten eine Kopie der GNU General Public License zusammen mit diesem
Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>. Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>.
Der Helixdecoder selbst hat eine eigene Lizenz, bitte für mehr Informationen
in den Unterverzeichnissen nachsehen.
*/ */
#include "reSID/envelope.cc" #include "reSID/envelope.cc"
@ -39,11 +38,12 @@
#include "reSID/wave6581_PS_.cc" #include "reSID/wave6581_PS_.cc"
#include "reSID/wave6581_PST.cc" #include "reSID/wave6581_PST.cc"
/*
#include "reSID/wave8580__ST.cc" #include "reSID/wave8580__ST.cc"
#include "reSID/wave8580_P_T.cc" #include "reSID/wave8580_P_T.cc"
#include "reSID/wave8580_PS_.cc" #include "reSID/wave8580_PS_.cc"
#include "reSID/wave8580_PST.cc" #include "reSID/wave8580_PST.cc"
*/
#include "reSID/wave.cc" #include "reSID/wave.cc"
#include "reSID/sid.cc" #include "reSID/sid.cc"
Loading…
Cancel
Save