summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2019-04-24 17:10:38 +0200
committer hap <happppp@users.noreply.github.com>2019-04-24 17:10:38 +0200
commitc5ad28736d7664105dd9167c443ce1e0dd3feaf9 (patch)
treec5c549a5a9dda1cb1b144121167eaa67af04c55f
parent6bb7175e52283d87f0a8760583ec32850c1a1a82 (diff)
New clone added
--------- Carnival (upright, PIT8253 music) [hap, Andrew Welburn]
-rw-r--r--src/mame/audio/carnival.cpp108
-rw-r--r--src/mame/drivers/vicdual.cpp59
-rw-r--r--src/mame/includes/vicdual.h30
-rw-r--r--src/mame/mame.lst1
4 files changed, 148 insertions, 50 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);
+ }
+}
diff --git a/src/mame/drivers/vicdual.cpp b/src/mame/drivers/vicdual.cpp
index bd38d1cec50..f2664f90bff 100644
--- a/src/mame/drivers/vicdual.cpp
+++ b/src/mame/drivers/vicdual.cpp
@@ -266,11 +266,11 @@ void carnival_state::machine_start()
{
vicdual_state::machine_start();
- m_psgData = 0;
- m_psgBus = 0;
+ m_musicData = 0;
+ m_musicBus = 0;
- save_item(NAME(m_psgData));
- save_item(NAME(m_psgBus));
+ save_item(NAME(m_musicData));
+ save_item(NAME(m_musicBus));
}
@@ -2204,7 +2204,15 @@ void carnival_state::carnival(machine_config &config)
/* audio hardware */
SPEAKER(config, "mono").front_center();
- carnival_audio(config);
+ carnivala_audio(config);
+}
+
+void carnival_state::carnivalb(machine_config &config)
+{
+ carnival(config);
+
+ /* audio hardware */
+ carnivalb_audio(config);
}
void carnival_state::carnivalh(machine_config &config)
@@ -3465,13 +3473,42 @@ ROM_START( carnival )
ROM_LOAD( "epr-666.u1", 0x3c00, 0x0400, CRC(4eec7fae) SHA1(cdc858165136c55b01511805c9d4dc6bc598fe1f) )
ROM_REGION( 0x0020, "proms", 0 )
- ROM_LOAD( "316-633", 0x0000, 0x0020, CRC(f0084d80) SHA1(95ec912ac2c64cd58a50c68afc0993746841a531) )
+ ROM_LOAD( "316-633", 0x0000, 0x0020, CRC(f0084d80) SHA1(95ec912ac2c64cd58a50c68afc0993746841a531) )
ROM_REGION( 0x0400, "audiocpu", 0 ) /* sound ROM */
- ROM_LOAD( "epr-412", 0x0000, 0x0400, CRC(0dbaa2b0) SHA1(eae7fc362a0ff8f908c42e093c7dbb603659373c) )
+ ROM_LOAD( "epr-412.u5", 0x0000, 0x0400, CRC(0dbaa2b0) SHA1(eae7fc362a0ff8f908c42e093c7dbb603659373c) )
ROM_REGION( 0x0020, "user1", 0 ) /* timing PROM */
- ROM_LOAD( "316-0206.u14", 0x0000, 0x0020, CRC(9617d796) SHA1(7cff2741866095ff42eadd8022bea349ec8d2f39) ) /* control PROM */
+ ROM_LOAD( "316-0206.u14", 0x0000, 0x0020, CRC(9617d796) SHA1(7cff2741866095ff42eadd8022bea349ec8d2f39) ) /* control PROM */
+ROM_END
+
+ROM_START( carnivalb )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "epr-651.u33", 0x0000, 0x0400, CRC(9f2736e6) SHA1(c3fb9197b5e83dc7d5335de2268e0acb30cf8328) )
+ ROM_LOAD( "epr-652.u32", 0x0400, 0x0400, CRC(a1f58beb) SHA1(e027beca7bf3ef5ef67e2195f909332fd194b5dc) )
+ ROM_LOAD( "epr-653.u31", 0x0800, 0x0400, CRC(67b17922) SHA1(46cdfd0371dec61a5440c2111660729c0f0ecdb8) )
+ ROM_LOAD( "epr-654.u30", 0x0c00, 0x0400, CRC(befb09a5) SHA1(da44b6a869b5eb0705e01fee4478696f6bef9de8) )
+ ROM_LOAD( "epr-655.u29", 0x1000, 0x0400, CRC(623fcdad) SHA1(35890964f5cf799c141002916641089ccec0fcc9) )
+ ROM_LOAD( "epr-656.u28", 0x1400, 0x0400, CRC(53040332) SHA1(ff7a06d93cb890abf0616770774668396d128ba3) )
+ ROM_LOAD( "epr-657.u27", 0x1800, 0x0400, CRC(f2537467) SHA1(262b859098f4f7e5e9bf2f83bda833044824226e) )
+ ROM_LOAD( "epr-658.u26", 0x1c00, 0x0400, CRC(fcc3854e) SHA1(7adbd6ca6f636dec75fa6eccdf3381686e074bc6) )
+ ROM_LOAD( "epr-659.u8", 0x2000, 0x0400, CRC(28be8d69) SHA1(2d9ac9a53f00fe2282e4317585e6bddadb676c0f) )
+ ROM_LOAD( "epr-660.u7", 0x2400, 0x0400, CRC(3873ccdb) SHA1(56be81fdee8947758ba966915c0739e5560a7f94) )
+ ROM_LOAD( "epr-661.u6", 0x2800, 0x0400, CRC(d9a96dff) SHA1(0366acf3418901bfeeda59d4cd51fe8ceaad4577) )
+ ROM_LOAD( "epr-662.u5", 0x2c00, 0x0400, CRC(d893ca72) SHA1(564176ab7f3757d51db8eef9fbc4228fa2ce328f) )
+ ROM_LOAD( "epr-663.u4", 0x3000, 0x0400, CRC(df8c63c5) SHA1(e8d0632b5cb5bd7f698485531f3edeb13efdc685) )
+ ROM_LOAD( "epr-664.u3", 0x3400, 0x0400, CRC(689a73e8) SHA1(b4134e8d892df7ba3352e4d3f581923decae6e54) )
+ ROM_LOAD( "epr-665.u2", 0x3800, 0x0400, CRC(28e7b2b6) SHA1(57eb5dd0f11da8ff8001e76036264246d6bc27d2) )
+ ROM_LOAD( "epr-666.u1", 0x3c00, 0x0400, CRC(4eec7fae) SHA1(cdc858165136c55b01511805c9d4dc6bc598fe1f) )
+
+ ROM_REGION( 0x0020, "proms", 0 )
+ ROM_LOAD( "316-633", 0x0000, 0x0020, CRC(f0084d80) SHA1(95ec912ac2c64cd58a50c68afc0993746841a531) )
+
+ ROM_REGION( 0x0400, "audiocpu", 0 ) /* sound ROM */
+ ROM_LOAD( "carnival_b.u5", 0x0000, 0x0400, CRC(422abb43) SHA1(edb6f74ccf9382624353e927ac225e1455bb1144) )
+
+ ROM_REGION( 0x0020, "user1", 0 ) /* timing PROM */
+ ROM_LOAD( "316-0206.u14", 0x0000, 0x0020, CRC(9617d796) SHA1(7cff2741866095ff42eadd8022bea349ec8d2f39) ) /* control PROM */
ROM_END
ROM_START( carnivalc )
@@ -3497,7 +3534,7 @@ ROM_START( carnivalc )
ROM_LOAD( "316-633", 0x0000, 0x0020, CRC(f0084d80) SHA1(95ec912ac2c64cd58a50c68afc0993746841a531) )
ROM_REGION( 0x0400, "audiocpu", 0 ) /* sound ROM */
- ROM_LOAD( "epr-412", 0x0000, 0x0400, CRC(0dbaa2b0) SHA1(eae7fc362a0ff8f908c42e093c7dbb603659373c) )
+ ROM_LOAD( "epr-412.u5", 0x0000, 0x0400, CRC(0dbaa2b0) SHA1(eae7fc362a0ff8f908c42e093c7dbb603659373c) )
ROM_REGION( 0x0020, "user1", 0 ) /* timing PROM */
ROM_LOAD( "316-0206.u14", 0x0000, 0x0020, CRC(9617d796) SHA1(7cff2741866095ff42eadd8022bea349ec8d2f39) ) /* control PROM */
@@ -3866,6 +3903,7 @@ ROM_END
*
*************************************/
+// YEAR NAME PARENT MACHINE INPUT CLASS INIT ORIENT. COMPANY, FULLNAME, FLAGS
GAMEL(1977, depthch, 0, depthch, depthch, vicdual_state, empty_init, ROT0, "Gremlin", "Depthcharge", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_depthch )
GAMEL(1977, depthcho, depthch, depthch, depthch, vicdual_state, empty_init, ROT0, "Gremlin", "Depthcharge (older)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_depthch )
GAMEL(1977, subhunt, depthch, depthch, depthch, vicdual_state, empty_init, ROT0, "Gremlin (Taito license)", "Sub Hunter (Gremlin / Taito)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_depthch )
@@ -3897,7 +3935,8 @@ GAME( 1979, carhntds, 0, carhntds, carhntds, vicdual_state, empty_in
GAME( 1980, tranqgun, 0, tranqgun, tranqgun, vicdual_state, empty_init, ROT270, "Sega", "Tranquillizer Gun", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1980, spacetrk, 0, spacetrk, spacetrk, vicdual_state, empty_init, ROT270, "Sega", "Space Trek (upright)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1980, spacetrkc, spacetrk, spacetrk, spacetrkc, vicdual_state, empty_init, ROT270, "Sega", "Space Trek (cocktail)", MACHINE_IMPERFECT_GRAPHICS |MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1980, carnival, 0, carnival, carnival, carnival_state, empty_init, ROT270, "Sega", "Carnival (upright)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1980, carnival, 0, carnival, carnival, carnival_state, empty_init, ROT270, "Sega", "Carnival (upright, AY8912 music)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1980, carnivalb, carnival, carnivalb, carnival, carnival_state, empty_init, ROT270, "Sega", "Carnival (upright, PIT8253 music)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1980, carnivalc, carnival, carnival, carnivalc, carnival_state, empty_init, ROT270, "Sega", "Carnival (cocktail)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1980, carnivalh, carnival, carnivalh, carnivalh, carnival_state, empty_init, ROT270, "Sega", "Carnival (Head On hardware, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1980, carnivalha, carnival, carnivalh, carnivalh, carnival_state, empty_init, ROT270, "Sega", "Carnival (Head On hardware, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/includes/vicdual.h b/src/mame/includes/vicdual.h
index cd461c54e6f..0a453acdba8 100644
--- a/src/mame/includes/vicdual.h
+++ b/src/mame/includes/vicdual.h
@@ -7,10 +7,13 @@
*************************************************************************/
#include "cpu/mcs48/mcs48.h"
+#include "machine/pit8253.h"
#include "machine/timer.h"
#include "sound/ay8910.h"
+#include "sound/dac.h"
#include "sound/discrete.h"
#include "sound/samples.h"
+#include "sound/volt_reg.h"
#include "screen.h"
#include "audio/vicdual-97271p.h"
#include "video/vicdual-97269pb.h"
@@ -247,24 +250,33 @@ public:
carnival_state(const machine_config &mconfig, device_type type, const char *tag) :
vicdual_state(mconfig, type, tag),
m_audiocpu(*this, "audiocpu"),
- m_psg(*this, "psg")
+ m_psg(*this, "psg"),
+ m_pit(*this, "pit"),
+ m_dac(*this, "dac%u", 0),
+ m_vref(*this, "vref%u", 0)
{ }
void carnival(machine_config &config);
- void carnival_audio(machine_config &config);
+ void carnivalb(machine_config &config);
void carnivalh(machine_config &config);
+ void carnivala_audio(machine_config &config);
+ void carnivalb_audio(machine_config &config);
+
protected:
virtual void machine_start() override;
- optional_device<i8039_device> m_audiocpu;
+ required_device<i8035_device> m_audiocpu;
optional_device<ay8910_device> m_psg;
+ optional_device<pit8253_device> m_pit;
+ optional_device_array<dac_bit_interface, 3> m_dac;
+ optional_device_array<voltage_regulator_device, 3> m_vref;
void carnival_io_map(address_map &map);
void mboard_map(address_map &map);
- int m_psgData;
- int m_psgBus;
+ int m_musicData;
+ int m_musicBus;
DECLARE_WRITE8_MEMBER(carnival_io_w);
@@ -272,9 +284,11 @@ protected:
DECLARE_WRITE8_MEMBER( carnival_audio_1_w );
DECLARE_WRITE8_MEMBER( carnival_audio_2_w );
DECLARE_READ_LINE_MEMBER( carnival_music_port_t1_r );
- DECLARE_WRITE8_MEMBER( carnival_music_port_1_w );
- DECLARE_WRITE8_MEMBER( carnival_music_port_2_w );
- void carnival_psg_latch(address_space &space);
+ DECLARE_WRITE8_MEMBER( carnivala_music_port_1_w );
+ DECLARE_WRITE8_MEMBER( carnivala_music_port_2_w );
+ void carnival_psg_latch();
+ DECLARE_WRITE8_MEMBER( carnivalb_music_port_1_w );
+ DECLARE_WRITE8_MEMBER( carnivalb_music_port_2_w );
};
class headonsa_state : public vicdual_state
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index a1111be9248..46f8d50323d 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -38735,6 +38735,7 @@ brdrlins // Sidam bootleg
car2 // bootleg
carhntds //
carnival // 651-666 (c) 1980 Sega
+carnivalb //
carnivalc // 501-516 (c) 1980 Sega
carnivalh //
carnivalha //