New clone added

---------
Carnival (upright, PIT8253 music) [hap, Andrew Welburn]
This commit is contained in:
hap 2019-04-24 17:10:38 +02:00
parent 6bb7175e52
commit c5ad28736d
4 changed files with 148 additions and 50 deletions

View File

@ -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);
}
}
// common
WRITE8_MEMBER( carnival_state::carnival_music_port_1_w )
void carnival_state::mboard_map(address_map &map)
{
// P1: ay8912 d0-d7
m_psgData = data;
carnival_psg_latch(space);
map(0x0000, 0x03ff).rom();
}
WRITE8_MEMBER( carnival_state::carnival_music_port_2_w )
{
// P2 d6: AY8912 BDIR(R/W)
// P2 d7: AY8912 BC1
m_psgBus = data >> 6 & 3;
carnival_psg_latch(space);
}
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);
}
}

View File

@ -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 )

View File

@ -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

View File

@ -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 //