Index: src/mess/machine/coco.c =================================================================== --- src/mess/machine/coco.c (revision 31169) +++ src/mess/machine/coco.c (working copy) @@ -679,15 +679,19 @@ /* determine the sound mux status */ soundmux_status_t status = soundmux_status(); + /* the SC77526 DAC chip internally biases the AC-coupled sound inputs for Cassette and Cartridge at the midpoint of the 3.9v output range */ + bool bCassSoundEnable = (status == (SOUNDMUX_ENABLE | SOUNDMUX_SEL1)); + bool bCassPlaying = ((m_cassette->get_state() & (CASSETTE_MASK_UISTATE | CASSETTE_MASK_MOTOR | CASSETTE_MASK_SPEAKER)) == + (CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)); + UINT8 cassette_sound = ((bCassSoundEnable && !bCassPlaying) ? 0x40 : 0); + /* determine the value to send to the DAC */ m_dac_output = (m_pia_1->a_output() & 0xFC) >> 2; - UINT8 sound_output = single_bit_sound + (status == SOUNDMUX_ENABLE ? m_dac_output << 1 : 0); - m_dac->write_unsigned8(sound_output); + UINT8 dac_sound = (status == SOUNDMUX_ENABLE ? m_dac_output << 1 : 0); + m_dac->write_unsigned8(single_bit_sound + dac_sound + cassette_sound); /* determine the cassette sound status */ - cassette_state cas_sound = (status == (SOUNDMUX_ENABLE | SOUNDMUX_SEL1)) - ? CASSETTE_SPEAKER_ENABLED - : CASSETTE_SPEAKER_MUTED; + cassette_state cas_sound = bCassSoundEnable ? CASSETTE_SPEAKER_ENABLED : CASSETTE_SPEAKER_MUTED; m_cassette->change_state(cas_sound, CASSETTE_MASK_SPEAKER); /* determine the cartridge sound status */