mirror of
https://github.com/holub/mame
synced 2025-04-23 17:00:53 +03:00
New clone added
--------- Carnival (upright, PIT8253 music) [hap, Andrew Welburn]
This commit is contained in:
parent
6bb7175e52
commit
c5ad28736d
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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 )
|
||||
|
@ -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
|
||||
|
@ -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 //
|
||||
|
Loading…
Reference in New Issue
Block a user