diff --git a/Machines/Atari2600/Atari2600.cpp b/Machines/Atari2600/Atari2600.cpp index 8abeb1d67..e3d732b9e 100644 --- a/Machines/Atari2600/Atari2600.cpp +++ b/Machines/Atari2600/Atari2600.cpp @@ -38,7 +38,7 @@ Machine::Machine() : void Machine::setup_output(float aspect_ratio) { bus_->tia_.reset(new TIA); bus_->speaker_.reset(new Speaker); - bus_->speaker_->set_input_rate((float)(get_clock_rate() / 38.0)); + bus_->speaker_->set_input_rate((float)(get_clock_rate() / (double)CPUTicksPerAudioTick)); bus_->tia_->get_crt()->set_delegate(this); } @@ -149,8 +149,8 @@ void Machine::crt_did_end_batch_of_frames(Outputs::CRT::CRT *crt, unsigned int n bus_->tia_->set_output_mode(TIA::OutputMode::PAL); } - bus_->speaker_->set_input_rate((float)(clock_rate / 38.0)); - bus_->speaker_->set_high_frequency_cut_off((float)(clock_rate / (38.0 * 2.0))); + bus_->speaker_->set_input_rate((float)(clock_rate / (double)CPUTicksPerAudioTick)); + bus_->speaker_->set_high_frequency_cut_off((float)(clock_rate / ((double)CPUTicksPerAudioTick * 2.0))); set_clock_rate(clock_rate); } } diff --git a/Machines/Atari2600/Atari2600.hpp b/Machines/Atari2600/Atari2600.hpp index 9147e3f95..550ec3db3 100644 --- a/Machines/Atari2600/Atari2600.hpp +++ b/Machines/Atari2600/Atari2600.hpp @@ -23,9 +23,6 @@ namespace Atari2600 { -const unsigned int number_of_upcoming_events = 6; -const unsigned int number_of_recorded_counters = 7; - class Machine: public CRTMachine::Machine, public ConfigurationTarget::Machine, diff --git a/Machines/Atari2600/Bus.hpp b/Machines/Atari2600/Bus.hpp index 864d22715..8d5d731a9 100644 --- a/Machines/Atari2600/Bus.hpp +++ b/Machines/Atari2600/Bus.hpp @@ -9,9 +9,10 @@ #ifndef Atari2600_Bus_hpp #define Atari2600_Bus_hpp +#include "Atari2600.hpp" #include "PIA.hpp" -#include "TIA.hpp" #include "Speaker.hpp" +#include "TIA.hpp" namespace Atari2600 { @@ -38,8 +39,8 @@ class Bus { // speaker backlog accumlation counter unsigned int cycles_since_speaker_update_; inline void update_audio() { - unsigned int audio_cycles = cycles_since_speaker_update_ / 114; - cycles_since_speaker_update_ %= 114; + unsigned int audio_cycles = cycles_since_speaker_update_ / (CPUTicksPerAudioTick * 3); + cycles_since_speaker_update_ %= (CPUTicksPerAudioTick * 3); speaker_->run_for_cycles(audio_cycles); } diff --git a/Machines/Atari2600/Speaker.hpp b/Machines/Atari2600/Speaker.hpp index b5bf42488..3cf5afc9c 100644 --- a/Machines/Atari2600/Speaker.hpp +++ b/Machines/Atari2600/Speaker.hpp @@ -13,6 +13,8 @@ namespace Atari2600 { +const int CPUTicksPerAudioTick = 38; + class Speaker: public ::Outputs::Filter { public: Speaker();