1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-28 07:29:45 +00:00

Merge pull request #294 from TomHarte/Vic20Startup

Corrects application Vic-20 startup issues.
This commit is contained in:
Thomas Harte 2017-11-21 18:26:16 -08:00 committed by GitHub
commit 89c3e2ba5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 11 deletions

View File

@ -410,22 +410,30 @@ class ConcreteMachine:
needs_configuration_ = true;
}
void set_ntsc_6560() {
set_clock_rate(1022727);
if(mos6560_) {
mos6560_->set_output_mode(MOS::MOS6560<Commodore::Vic20::Vic6560>::OutputMode::NTSC);
mos6560_->set_clock_rate(1022727);
}
}
void set_pal_6560() {
set_clock_rate(1108404);
if(mos6560_) {
mos6560_->set_output_mode(MOS::MOS6560<Commodore::Vic20::Vic6560>::OutputMode::PAL);
mos6560_->set_clock_rate(1108404);
}
}
void configure_memory() {
// Determine PAL/NTSC
if(region_ == American || region_ == Japanese) {
// NTSC
set_clock_rate(1022727);
if(mos6560_) {
mos6560_->set_output_mode(MOS::MOS6560<Commodore::Vic20::Vic6560>::OutputMode::NTSC);
mos6560_->set_clock_rate(1022727);
}
set_ntsc_6560();
} else {
// PAL
set_clock_rate(1108404);
if(mos6560_) {
mos6560_->set_output_mode(MOS::MOS6560<Commodore::Vic20::Vic6560>::OutputMode::PAL);
mos6560_->set_clock_rate(1108404);
}
set_pal_6560();
}
memset(processor_read_memory_map_, 0, sizeof(processor_read_memory_map_));
@ -610,6 +618,8 @@ class ConcreteMachine:
void setup_output(float aspect_ratio) override final {
mos6560_.reset(new Vic6560());
mos6560_->get_speaker()->set_high_frequency_cut_off(1600); // There is a 1.6Khz low-pass filter in the Vic-20.
// Make a guess: PAL. Without setting a clock rate the 6560 isn't fully set up so contractually something must be set.
set_pal_6560();
}
void close_output() override final {

View File

@ -114,7 +114,8 @@ class Speaker {
bool coefficients_are_dirty_;
Delegate *delegate_ = nullptr;
float input_cycles_per_second_, output_cycles_per_second_;
float input_cycles_per_second_ = 0.0f;
float output_cycles_per_second_ = 0.0f;
void set_needs_updated_filter_coefficients() {
coefficients_are_dirty_ = true;