summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/segam1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/segam1.cpp')
-rw-r--r--src/mame/drivers/segam1.cpp445
1 files changed, 0 insertions, 445 deletions
diff --git a/src/mame/drivers/segam1.cpp b/src/mame/drivers/segam1.cpp
deleted file mode 100644
index 962d4da5b19..00000000000
--- a/src/mame/drivers/segam1.cpp
+++ /dev/null
@@ -1,445 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:David Haywood
-/*
-
-Sega M1 hardware (837-7571) (PCB)
-
-Sega Bingo Multicart (837-10675) (Sticker on PCB)
-
-used for redemption / gambling style machines in a satellite setup
-
-based on Caribbean Boule the following hardware setup is used
-
-One X-Board (segaxbd.cpp) drives a large rear-projection monitor which all players view to see the main game progress.
-
-Multiple M1 boards ("satellite" board) for each player for them to view information privately.
-
-One 'link' board which connects everything together. The link board has audio hardware, a 68K, and a Z80 as
-well as a huge bank of UARTS and toslink connectors, but no video. It's possible the main game logic runs
-on the 'link' board.
-
-
-Unfortunately we don't have any dumps of anything other than an M1 board right now.
-
----
-
-is this related to (or a component of?) bingoc.cpp, the EPR numbers are much lower there tho
-so it's probably an earlier version of the same thing or one of the 'link' boards?
-
-uses s24 style tilemaps (ram based?)
-
-
-*/
-
-
-#include "emu.h"
-#include "cpu/m68000/m68000.h"
-#include "cpu/z80/z80.h"
-#include "machine/315_5296.h"
-#include "machine/gen_latch.h"
-#include "machine/i8251.h"
-#include "machine/mb8421.h"
-#include "sound/2612intf.h"
-#include "video/segaic24.h"
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
-
-
-
-class segam1_state : public driver_device
-{
-public:
- segam1_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- , m_audiocpu(*this, "audiocpu")
- , m_m1comm(*this, "m1comm")
- , m_screen(*this, "screen")
- , m_palette(*this, "palette")
- , m_paletteram(*this, "paletteram")
- , m_tile(*this, "tile")
- , m_mixer(*this, "mixer")
- , m_ymsnd(*this, "ymsnd")
- { }
-
- void unkm1(machine_config &config);
- void segam1(machine_config &config);
-
-private:
- DECLARE_WRITE16_MEMBER(paletteram_w);
- DECLARE_WRITE8_MEMBER(sound_a0_bank_w);
-
- virtual void machine_start() override;
- virtual void video_start() override;
-
- uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- required_device<cpu_device> m_maincpu;
- required_device<z80_device> m_audiocpu;
- required_device<z80_device> m_m1comm;
- required_device<screen_device> m_screen;
- required_device<palette_device> m_palette;
- required_shared_ptr<u16> m_paletteram;
- required_device<segas24_tile_device> m_tile;
- required_device<segas24_mixer_device> m_mixer;
- required_device<ym3438_device> m_ymsnd;
- void segam1_comms_map(address_map &map);
- void segam1_map(address_map &map);
- void segam1_sound_io_map(address_map &map);
- void segam1_sound_map(address_map &map);
- void unkm1_sound_map(address_map &map);
-};
-
-void segam1_state::machine_start()
-{
- membank("soundbank")->configure_entries(0x00, 0x10, memregion("audiocpu")->base(), 0x2000);
-}
-
-void segam1_state::video_start()
-{
-}
-
-WRITE8_MEMBER(segam1_state::sound_a0_bank_w)
-{
- membank("soundbank")->set_entry(data & 0x0f);
-}
-
-// 315-5242
-
-WRITE16_MEMBER(segam1_state::paletteram_w)
-{
- COMBINE_DATA(&m_paletteram[offset]);
- data = m_paletteram[offset];
-
- u16 r = (data & 0x00f) << 4;
- if(data & 0x1000)
- r |= 8;
-
- u16 g = data & 0x0f0;
- if(data & 0x2000)
- g |= 8;
-
- u16 b = (data & 0xf00) >> 4;
- if(data & 0x4000)
- b |= 8;
-
- r |= r >> 5;
- g |= g >> 5;
- b |= b >> 5;
-
- m_palette->set_pen_color(offset, rgb_t(r, g, b));
-
- if(data & 0x8000) {
- r = 255-0.6*(255-r);
- g = 255-0.6*(255-g);
- b = 255-0.6*(255-b);
- } else {
- r = 0.6*r;
- g = 0.6*g;
- b = 0.6*b;
- }
- m_palette->set_pen_color(offset+m_palette->entries()/2, rgb_t(r, g, b));
-}
-
-
-// copied from segas24.cpp
-namespace {
- struct layer_sort {
- layer_sort(segas24_mixer_device *_mixer) { mixer = _mixer; }
-
- bool operator()(int l1, int l2) {
- static const int default_pri[12] = { 0, 1, 2, 3, 4, 5, 6, 7, -4, -3, -2, -1 };
- int p1 = mixer->get_reg(l1) & 7;
- int p2 = mixer->get_reg(l2) & 7;
- if(p1 != p2)
- return p1 - p2 < 0;
- return default_pri[l2] - default_pri[l1] < 0;
- }
-
- segas24_mixer_device *mixer;
- };
-}
-
-// copied from segas24.cpp
-uint32_t segam1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- if (m_mixer->get_reg(13) & 1)
- {
- bitmap.fill(m_palette->black_pen());
- return 0;
- }
-
- screen.priority().fill(0);
- bitmap.fill(0, cliprect);
-
- std::vector<int> order;
- order.resize(12);
- for(int i=0; i<12; i++)
- order[i] = i;
-
- std::sort(order.begin(), order.end(), layer_sort(m_mixer.target()));
-
- int level = 0;
- for(int i=0; i<12; i++)
- if(order[i] < 8)
- m_tile->draw(screen, bitmap, cliprect, order[i], level, 0);
- else
- level++;
-
- return 0;
-}
-
-
-
-void segam1_state::segam1_map(address_map &map)
-{
- map(0x000000, 0x07ffff).rom();
- map(0x340000, 0x340fff).rw("dpram", FUNC(mb8421_device::right_r), FUNC(mb8421_device::right_w)).umask16(0x00ff);
- map(0xb00000, 0xb0ffff).rw(m_tile, FUNC(segas24_tile_device::tile_r), FUNC(segas24_tile_device::tile_w));
- map(0xb20000, 0xb20001).nopw(); /* Horizontal split position (ABSEL) */
- map(0xb40000, 0xb40001).nopw(); /* Scanline trigger position (XHOUT) */
- map(0xb60000, 0xb60001).nopw(); /* Frame trigger position (XVOUT) */
- map(0xb70000, 0xb70001).nopw(); /* Synchronization mode */
- map(0xb80000, 0xbfffff).rw(m_tile, FUNC(segas24_tile_device::char_r), FUNC(segas24_tile_device::char_w));
- map(0xc00000, 0xc03fff).ram().w(FUNC(segam1_state::paletteram_w)).share("paletteram");
- map(0xc04000, 0xc0401f).rw(m_mixer, FUNC(segas24_mixer_device::read), FUNC(segas24_mixer_device::write));
- map(0xe00000, 0xe0001f).rw("io1", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0x00ff);
- map(0xe40000, 0xe40001).portr("INX");
- map(0xe40002, 0xe40003).portr("INY");
- map(0xe40005, 0xe40005).w("soundlatch", FUNC(generic_latch_8_device::write));
- map(0xe40006, 0xe40007).nopw();
- map(0xe40008, 0xe40009).portr("INZ");
- map(0xe80000, 0xe8001f).rw("io2", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0x00ff);
- map(0xf00000, 0xf03fff).mirror(0x0fc000).ram(); // NVRAM?
-}
-
-void segam1_state::segam1_sound_map(address_map &map)
-{
- map(0x0000, 0x7fff).rom();
- map(0xa000, 0xbfff).bankr("soundbank");
- map(0xf000, 0xffff).ram();
-}
-
-void segam1_state::unkm1_sound_map(address_map &map)
-{
- segam1_sound_map(map);
- map(0xe000, 0xefff).ram();
-}
-
-void segam1_state::segam1_sound_io_map(address_map &map)
-{
- map.global_mask(0xff);
- map(0x80, 0x83).rw(m_ymsnd, FUNC(ym3438_device::read), FUNC(ym3438_device::write));
- map(0xa0, 0xa0).w(FUNC(segam1_state::sound_a0_bank_w));
- map(0xc0, 0xc0).r("soundlatch", FUNC(generic_latch_8_device::read)).nopw();
-}
-
-void segam1_state::segam1_comms_map(address_map &map)
-{
- map(0x0000, 0x7fff).rom();
- map(0x8000, 0x9fff).ram();
- map(0xa000, 0xa7ff).rw("dpram", FUNC(mb8421_device::left_r), FUNC(mb8421_device::left_w));
- map(0xc000, 0xc001).rw("uart", FUNC(i8251_device::read), FUNC(i8251_device::write));
- map(0xe003, 0xe003).nopw(); // ???
-}
-
-
-static INPUT_PORTS_START( segam1 )
- PORT_START("INA")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
-
- PORT_START("INB")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
-
- PORT_START("INC")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
-
- PORT_START("IND")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
-
- PORT_START("INE")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
-
- PORT_START("INF")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
-
- PORT_START("ING")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
-
- PORT_START("INX")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xff00, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("INY")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xff00, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("INZ")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0xff00, IP_ACTIVE_LOW, IPT_UNUSED)
-INPUT_PORTS_END
-
-
-
-
-void segam1_state::segam1(machine_config &config)
-{
- M68000(config, m_maincpu, XTAL(20'000'000)/2);
- m_maincpu->set_addrmap(AS_PROGRAM, &segam1_state::segam1_map);
- m_maincpu->set_vblank_int("screen", FUNC(segam1_state::irq4_line_hold));
-
- Z80(config, m_audiocpu, 4000000); // unknown clock
- m_audiocpu->set_addrmap(AS_PROGRAM, &segam1_state::segam1_sound_map);
- m_audiocpu->set_addrmap(AS_IO, &segam1_state::segam1_sound_io_map);
-
- Z80(config, m_m1comm, 4000000); // unknown clock
- m_m1comm->set_addrmap(AS_PROGRAM, &segam1_state::segam1_comms_map);
-
- sega_315_5296_device &io1(SEGA_315_5296(config, "io1", 0)); // unknown clock
- io1.in_pa_callback().set_ioport("INA");
- io1.in_pb_callback().set_ioport("INB");
- io1.in_pc_callback().set_ioport("INC");
- io1.in_pd_callback().set_ioport("IND");
- io1.in_pe_callback().set_ioport("INE");
- io1.in_pf_callback().set_ioport("INF");
-
- sega_315_5296_device &io2(SEGA_315_5296(config, "io2", 0)); // unknown clock
- io2.in_pg_callback().set_ioport("ING");
-
- I8251(config, "uart", 4000000); // unknown clock
-
- mb8421_device &dpram(MB8421(config, "dpram"));
- dpram.intl_callback().set_inputline("m1comm", 0);
-
- S24TILE(config, m_tile, 0, 0x3fff).set_palette(m_palette);
- S24MIXER(config, m_mixer, 0);
-
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
- m_screen->set_raw(16000000, 656, 0, 496, 424, 0, 384); // copied from segas24.cpp; may not be accurate
- m_screen->set_screen_update(FUNC(segam1_state::screen_update));
- m_screen->set_palette(m_palette);
-
- PALETTE(config, m_palette).set_entries(8192*2);
-
- // sound hardware
- SPEAKER(config, "mono").front_center();
-
- GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline("audiocpu", INPUT_LINE_NMI);
-
- YM3438(config, m_ymsnd, 8000000);
- m_ymsnd->add_route(ALL_OUTPUTS, "mono", 0.40);
- //m_ymsnd->irq_handler().set(FUNC(segam1_state::ym3438_irq_handler));
-}
-
-void segam1_state::unkm1(machine_config &config)
-{
- segam1(config);
- m_audiocpu->set_addrmap(AS_PROGRAM, &segam1_state::unkm1_sound_map);
-
- m_m1comm->set_disable(); // not dumped yet
-}
-
-
-ROM_START( bingpty ) // 1994/05/01 string
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "epr-16648b.bin", 0x00000, 0x20000, CRC(e4fceb4c) SHA1(0a248bb328d2f6d72d540baefbe62838f4b76585) )
- ROM_LOAD16_BYTE( "epr-16649b.bin", 0x00001, 0x20000, CRC(736d8bbd) SHA1(c359ad513d4a7693cbb1a27ce26f89849e894d05) )
-
- ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 Code */
- ROM_LOAD( "epr-14845.bin", 0x00000, 0x20000, CRC(90d47101) SHA1(7bc002c104e3dbde1986aaec54112d5658eab523) )
-
- ROM_REGION( 0x8000, "m1comm", 0 ) /* Z80 Code */
- ROM_LOAD( "epr-14221a.bin", 0x00000, 0x8000, CRC(a13e67a4) SHA1(4cd269c7f04a64ae7806c8784f86bf6553a25d85) )
-
- // dumps of the X-Board part, and the LINK PCB are missing.
-ROM_END
-
-ROM_START( unkm1 ) // 1992.01.31 string
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */
- ROM_LOAD16_BYTE( "epr-14427.ic8", 0x00000, 0x40000, CRC(2d904fc6) SHA1(7062f47d77d09906420118c85e1cb565bec345a7) )
- ROM_LOAD16_BYTE( "epr-14428.ic7", 0x00001, 0x40000, CRC(97a317f4) SHA1(19bc4cf6b6c580caa44f36c929b445ed94b2d9eb) )
-
- ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 Code */
- ROM_LOAD( "epr-14429.ic104", 0x00000, 0x20000, CRC(1ff8262d) SHA1(fb90bd877b2dc65eb3e5495d6e21dee1f871fb44) )
-
- ROM_REGION( 0x8000, "m1comm", 0 )
- ROM_LOAD( "unkm1_comm.bin", 0x00000, 0x8000, NO_DUMP ) // CPU almost certainly exists, but not even type is confirmed
-
- ROM_REGION( 0x100, "plds", 0 )
- ROM_LOAD( "315-5472-01.ic22", 0x000, 0x0eb, CRC(828ee6e2) SHA1(f32dd0f6297cc8bd3049be4bca502c0f8ec738cf) )
- // dumps of the X-Board part, and the LINK PCB are missing.
-ROM_END
-
-GAME( 1994, bingpty, 0, segam1, segam1, segam1_state, empty_init, ROT0, "Sega", "Bingo Party Multicart (Rev B) (M1 Satellite board)", MACHINE_NOT_WORKING )
-GAME( 1992, unkm1, 0, unkm1, segam1, segam1_state, empty_init, ROT0, "Sega", "unknown Sega gambling game (M1 Satellite board)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )