diff --git a/ay-3-8912.cpp b/ay-3-8912.cpp index d3c57e5..d4b8b7e 100644 --- a/ay-3-8912.cpp +++ b/ay-3-8912.cpp @@ -65,7 +65,7 @@ namespace audio void write_register(int port, int val) { registers[selected_register] = val; - uint32_t clock = (z80::getClock() >> 5); + uint32_t clock = (z80::getClock() >> 4); switch (selected_register) { case 0: @@ -191,18 +191,20 @@ namespace audio { // Mix tone and noise on channel A given register 7 values channel_a_level = 1; - if (registers[7] & MIXER_REG_A_TONE) channel_a_level &= channel_a_tone_level; - if (registers[7] & MIXER_REG_A_NOISE) channel_a_level &= noise_level; + if ((registers[7] & MIXER_REG_A_TONE)==0) channel_a_level &= channel_a_tone_level; + if ((registers[7] & MIXER_REG_A_NOISE)==0) channel_a_level &= noise_level; // Mix tone and noise on channel B given register 7 values channel_b_level = 1; - if (registers[7] & MIXER_REG_B_TONE) channel_b_level &= channel_b_tone_level; - if (registers[7] & MIXER_REG_B_NOISE) channel_b_level &= noise_level; + if ((registers[7] & MIXER_REG_B_TONE)==0) channel_b_level &= channel_b_tone_level; + if ((registers[7] & MIXER_REG_B_NOISE)==0) channel_b_level &= noise_level; // Mix tone and noise on channel C given register 7 values channel_c_level = 1; - if (registers[7] & MIXER_REG_C_TONE) channel_c_level &= channel_c_tone_level; - if (registers[7] & MIXER_REG_C_NOISE) channel_c_level &= noise_level; + if ((registers[7] & MIXER_REG_C_TONE)==0) channel_c_level &= channel_c_tone_level; + if ((registers[7] & MIXER_REG_C_NOISE)==0) channel_c_level &= noise_level; + + //zx_ula::set_border_color(channel_a_tone_level&0xf); const uint8_t channel_a_volume = (registers[8]&0x10) ? envelope_volume : registers[8]&0xf; const uint8_t channel_b_volume = (registers[9]&0x10) ? envelope_volume : registers[9]&0xf; @@ -213,7 +215,6 @@ namespace audio const uint8_t channel_c_sample = volume_table[(channel_c_level&1) * channel_c_volume] >> 1; uint8_t sample = (channel_a_sample+channel_b_sample+channel_c_sample)&0xff; - zx_ula::set_border_color(sample&0xf); return sample; }