summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/audio/carnival.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/audio/carnival.cpp')
-rw-r--r--src/mame/audio/carnival.cpp108
1 files changed, 76 insertions, 32 deletions
diff --git a/src/mame/audio/carnival.cpp b/src/mame/audio/carnival.cpp
index 36f9c8a039f..d64892f4bd2 100644
--- a/src/mame/audio/carnival.cpp
+++ b/src/mame/audio/carnival.cpp
@@ -126,7 +126,6 @@ WRITE8_MEMBER( carnival_state::carnival_audio_1_w )
}
}
-
WRITE8_MEMBER( carnival_state::carnival_audio_2_w )
{
int bitsChanged;
@@ -156,34 +155,13 @@ WRITE8_MEMBER( carnival_state::carnival_audio_2_w )
/* Music board */
-void carnival_state::carnival_psg_latch(address_space &space)
-{
- if (m_psgBus & 1)
- {
- // BDIR W, BC1 selects address or data
- if (m_psgBus & 2)
- m_psg->address_w(m_psgData);
- else
- m_psg->data_w(m_psgData);
- }
-}
-
-WRITE8_MEMBER( carnival_state::carnival_music_port_1_w )
-{
- // P1: ay8912 d0-d7
- m_psgData = data;
- carnival_psg_latch(space);
-}
+// common
-WRITE8_MEMBER( carnival_state::carnival_music_port_2_w )
+void carnival_state::mboard_map(address_map &map)
{
- // P2 d6: AY8912 BDIR(R/W)
- // P2 d7: AY8912 BC1
- m_psgBus = data >> 6 & 3;
- carnival_psg_latch(space);
+ map(0x0000, 0x03ff).rom();
}
-
READ_LINE_MEMBER( carnival_state::carnival_music_port_t1_r )
{
// T1: comms from audio port 2 d3
@@ -191,22 +169,45 @@ READ_LINE_MEMBER( carnival_state::carnival_music_port_t1_r )
}
-void carnival_state::mboard_map(address_map &map)
+// AY8912 music
+
+void carnival_state::carnival_psg_latch()
{
- map(0x0000, 0x03ff).rom();
+ if (m_musicBus & 1)
+ {
+ // BDIR W, BC1 selects address or data
+ if (m_musicBus & 2)
+ m_psg->address_w(m_musicData);
+ else
+ m_psg->data_w(m_musicData);
+ }
}
+WRITE8_MEMBER( carnival_state::carnivala_music_port_1_w )
+{
+ // P1: AY8912 d0-d7
+ m_musicData = data;
+ carnival_psg_latch();
+}
-void carnival_state::carnival_audio(machine_config &config)
+WRITE8_MEMBER( carnival_state::carnivala_music_port_2_w )
+{
+ // P2 d6: AY8912 BDIR(R/W)
+ // P2 d7: AY8912 BC1
+ m_musicBus = data >> 6 & 3;
+ carnival_psg_latch();
+}
+
+void carnival_state::carnivala_audio(machine_config &config)
{
/* music board */
- I8039(config, m_audiocpu, XTAL(3'579'545));
+ I8035(config, m_audiocpu, XTAL(3'579'545));
m_audiocpu->set_addrmap(AS_PROGRAM, &carnival_state::mboard_map);
- m_audiocpu->p1_out_cb().set(FUNC(carnival_state::carnival_music_port_1_w));
- m_audiocpu->p2_out_cb().set(FUNC(carnival_state::carnival_music_port_2_w));
+ m_audiocpu->p1_out_cb().set(FUNC(carnival_state::carnivala_music_port_1_w));
+ m_audiocpu->p2_out_cb().set(FUNC(carnival_state::carnivala_music_port_2_w));
m_audiocpu->t1_in_cb().set(FUNC(carnival_state::carnival_music_port_t1_r));
- AY8912(config, m_psg, XTAL(3'579'545)/3).add_route(ALL_OUTPUTS, "mono", 0.25);
+ AY8912(config, m_psg, XTAL(3'579'545)/3).add_route(ALL_OUTPUTS, "mono", 0.25); // also seen with AY-3-8910, daughterboard has place for either chip
/* samples */
SAMPLES(config, m_samples);
@@ -214,3 +215,46 @@ void carnival_state::carnival_audio(machine_config &config)
m_samples->set_samples_names(carnival_sample_names);
m_samples->add_route(ALL_OUTPUTS, "mono", 0.5);
}
+
+
+// PIT8253 music
+
+WRITE8_MEMBER( carnival_state::carnivalb_music_port_1_w )
+{
+ // P1: PIT8253 d0-d7
+ m_musicData = data;
+}
+
+WRITE8_MEMBER( carnival_state::carnivalb_music_port_2_w )
+{
+ // P2 d7: PIT8253 write strobe
+ // P2 d5,d6: PIT8253 A0,A1
+ if (~m_musicBus & data & 0x80)
+ m_pit->write(data >> 5 & 3, m_musicData);
+
+ m_musicBus = data;
+}
+
+void carnival_state::carnivalb_audio(machine_config &config)
+{
+ // already inherited carnivala_audio
+ config.device_remove("psg");
+
+ m_audiocpu->p1_out_cb().set(FUNC(carnival_state::carnivalb_music_port_1_w));
+ m_audiocpu->p2_out_cb().set(FUNC(carnival_state::carnivalb_music_port_2_w));
+
+ PIT8253(config, m_pit, 0);
+ m_pit->set_clk<0>(XTAL(3'579'545)/3);
+ m_pit->set_clk<1>(XTAL(3'579'545)/3);
+ m_pit->set_clk<2>(XTAL(3'579'545)/3);
+
+ m_pit->out_handler<0>().set(m_dac[0], FUNC(dac_bit_interface::write));
+ m_pit->out_handler<1>().set(m_dac[1], FUNC(dac_bit_interface::write));
+ m_pit->out_handler<2>().set(m_dac[2], FUNC(dac_bit_interface::write));
+
+ for (int i = 0; i < 3; i++)
+ {
+ DAC_1BIT(config, m_dac[i]).add_route(ALL_OUTPUTS, "mono", 0.15);
+ VOLTAGE_REGULATOR(config, m_vref[i]).add_route(0, m_dac[i], 1.0, DAC_VREF_POS_INPUT);
+ }
+}