summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine/coco.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/machine/coco.c')
-rw-r--r--src/mess/machine/coco.c44
1 files changed, 23 insertions, 21 deletions
diff --git a/src/mess/machine/coco.c b/src/mess/machine/coco.c
index 2cedfd7b43c..65b438ef1e5 100644
--- a/src/mess/machine/coco.c
+++ b/src/mess/machine/coco.c
@@ -678,27 +678,29 @@ void coco_state::update_sound(void)
*/
UINT8 single_bit_sound = (m_pia_1->b_output() & 0x02) ? 0x80 : 0x00;
- /* determine the sound mux status */
- soundmux_status_t status = soundmux_status();
-
- /* 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);
-
- /* determine the cassette sound status */
- cassette_state cas_sound = (status == (SOUNDMUX_ENABLE | SOUNDMUX_SEL1))
- ? CASSETTE_SPEAKER_ENABLED
- : CASSETTE_SPEAKER_MUTED;
- m_cassette->change_state(cas_sound, CASSETTE_MASK_SPEAKER);
-
- /* determine the cartridge sound status */
- m_cococart->cart_set_line(
- COCOCART_LINE_SOUND_ENABLE,
- (status == (SOUNDMUX_ENABLE | SOUNDMUX_SEL2)) ? COCOCART_LINE_VALUE_ASSERT : COCOCART_LINE_VALUE_CLEAR);
-}
-
-
+ /* 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 bCartSoundEnable = (status == (SOUNDMUX_ENABLE | SOUNDMUX_SEL2));
+ UINT8 cassette_sound = (bCassSoundEnable ? 0x40 : 0);
+ UINT8 cart_sound = (bCartSoundEnable ? 0x40 : 0);
+
+ /* determine the value to send to the DAC */
+ m_dac_output = (m_pia_1->a_output() & 0xFC) >> 2;
+ UINT8 dac_sound = (status == SOUNDMUX_ENABLE ? m_dac_output << 1 : 0);
+ m_dac->write_unsigned8(single_bit_sound + dac_sound + cassette_sound + cart_sound);
+
+ /* determine the cassette sound status */
+ 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 */
+ m_cococart->cart_set_line(COCOCART_LINE_SOUND_ENABLE, bCartSoundEnable ? COCOCART_LINE_VALUE_ASSERT : COCOCART_LINE_VALUE_CLEAR);
+}
+
+
//-------------------------------------------------
// joystick_type - returns the type of joystick