summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/vsystem/suprslam.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/vsystem/suprslam.cpp')
-rw-r--r--src/mame/vsystem/suprslam.cpp502
1 files changed, 502 insertions, 0 deletions
diff --git a/src/mame/vsystem/suprslam.cpp b/src/mame/vsystem/suprslam.cpp
new file mode 100644
index 00000000000..76a27881491
--- /dev/null
+++ b/src/mame/vsystem/suprslam.cpp
@@ -0,0 +1,502 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+/*** DRIVER INFORMATION & NOTES ***********************************************
+
+Super Slams - Driver by David Haywood
+ Sound Information from R. Belmont
+ DSWs corrected by Stephh
+
+TODO :
+
+sprite offset control?
+priorities (see hi-score table during attract mode)
+unknown reads / writes (also KONAMI chip ..?)
+
+WORKING NOTES :
+
+68k interrupts
+lev 1 : 0x64 : 0000 0406 - vblank?
+lev 2 : 0x68 : 0000 06ae - x
+lev 3 : 0x6c : 0000 06b4 - x
+lev 4 : 0x70 : 0000 06ba - x
+lev 5 : 0x74 : 0000 06c0 - x
+lev 6 : 0x78 : 0000 06c6 - x
+lev 7 : 0x7c : 0000 06cc - x
+
+******************************************************************************/
+
+
+/*** README INFORMATION *******************************************************
+
+Super Slam
+(C) 1995 Banpresto
+
+(C) 1995 Banpresto / Toei Animation
+
+PCB: VSEP-26
+CPU: TMP68HC000P16 (68000, 64 pin DIP)
+SND: Z8400B (Z80B, 40 pin DIP), YM2610, YM3016
+OSC: 14.318180 MHz (Near VS920D & 053936), 24.000000 MHz, 32.000 MHz (Both near VS920F & EB26IC66)
+Other Chips:
+ Fujitsu CG10103 145 9520 Z14 (160 Pin PQFP)
+ VS9210 4L06F1056 JAPAN 9525EAI (176 Pin PQFP)
+ VS920F 4L01F1435 JAPAN 9524EAI (100 Pin PQFP)
+ VS920E 4L06F1057 JAPAN 9533EAI (176 pin PQFP)
+ VS9209 4L01F1429 JAPAN 9523EAI (80 pin PQFP)
+ VS920D 4L04F1689 JAPAN 9524EAI (160 pin PQFP)
+ KONAMI KS10011-PF 053936 PSAC2 9522 Z02 (80 pin PQFP)
+
+RAM:
+ LGS GM76C28K-10 x 1 (Connected/Near Z80B)
+ LGS GM76C28K-10 x 2 (Connected/Near 053936)
+ SEC KM6264BLS-7 x 2 (Connected/Near VS920D)
+ SEC KM6264BLS-7 x 2 (Connected/Near VS9210)
+ UM61256FK-15 x 2 (Connected/Near VS9210)
+ CY7C195-25PC x 1 -\
+ UM61256FK-15 x 4 > (Connected/Near Fujitsu CG10103 145 9520 Z14)
+ SEC KM6264BLS-7 x 4 -/
+ LGS GM76C28K-10 x 2 (Connected/Near VS920F)
+ LGS GM76C28K-10 x 2 (Connected/Near VS920E)
+ UM61256FK-15 x 2 (Connected/Near 68000 & VS9209)
+
+PALs: (4 total, not dumped, 2 located near 68000, 1 near Z80B, 1 near VS9210)
+
+DIPs: 8 position x 3 (ALL DIPs linked to VS9209)
+
+Info taken from sheet supplied with PCB, no info for SW3 (which is never read?).
+
+ROMs: (on ALL ROMs is written only "EB26")
+
+EB26_100.BIN 16M Mask \
+EB26_101.BIN 16M Mask |
+EB26IC09.BIN 16M Mask | GFX (near VS9210, 053936 & VS920D)
+EB26IC10.BIN 16M Mask |
+EB26IC12.BIN 16M Mask /
+EB26IC36.BIN 16M Mask
+EB26IC43.BIN 16M Mask GFX (Near VS920F & VS920E)
+EB26IC59.BIN 8M Mask Sound (Near YM2610)
+EB26IC66.BIN 16M Mask Sound (Near YM2610)
+EB26IC38.BIN 27C1001 Sound Program (Near Z80B)
+EB26IC47.BIN 27C240 \
+EB26IC73.BIN 27C240 / Main Program
+
+******************************************************************************/
+
+#include "emu.h"
+
+#include "vs9209.h"
+#include "vsystem_spr.h"
+
+#include "cpu/z80/z80.h"
+#include "cpu/m68000/m68000.h"
+#include "machine/gen_latch.h"
+#include "sound/ymopn.h"
+#include "video/k053936.h"
+
+#include "screen.h"
+#include "speaker.h"
+#include "tilemap.h"
+
+
+namespace {
+
+class suprslam_state : public driver_device
+{
+public:
+ suprslam_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_k053936(*this, "k053936"),
+ m_spr(*this, "vsystem_spr"),
+ m_palette(*this, "palette"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_soundlatch(*this, "soundlatch"),
+ m_screen_videoram(*this, "screen_videoram"),
+ m_bg_videoram(*this, "bg_videoram"),
+ m_sp_videoram(*this, "sp_videoram"),
+ m_spriteram(*this, "spriteram"),
+ m_screen_vregs(*this, "screen_vregs"),
+ m_soundbank(*this, "soundbank")
+ { }
+
+ void suprslam(machine_config &config);
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD;
+ virtual void video_start() override ATTR_COLD;
+
+private:
+ // devices
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ required_device<k053936_device> m_k053936;
+ required_device<vsystem_spr_device> m_spr;
+ required_device<palette_device> m_palette;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<generic_latch_8_device> m_soundlatch;
+
+ // memory pointers
+ required_shared_ptr<uint16_t> m_screen_videoram;
+ required_shared_ptr<uint16_t> m_bg_videoram;
+ required_shared_ptr<uint16_t> m_sp_videoram;
+ required_shared_ptr<uint16_t> m_spriteram;
+ required_shared_ptr<uint16_t> m_screen_vregs;
+ required_memory_bank m_soundbank;
+
+ // video-related
+ tilemap_t *m_screen_tilemap = nullptr;
+ tilemap_t *m_bg_tilemap = nullptr;
+ uint16_t m_screen_bank = 0;
+ uint16_t m_bg_bank = 0;
+ uint8_t m_spr_ctrl = 0;
+
+ uint32_t tile_callback(uint32_t code);
+ void sh_bankswitch_w(uint8_t data);
+ void screen_videoram_w(offs_t offset, uint16_t data);
+ void bg_videoram_w(offs_t offset, uint16_t data);
+ void bank_w(uint16_t data);
+ void spr_ctrl_w(uint8_t data);
+ TILE_GET_INFO_MEMBER(get_tile_info);
+ TILE_GET_INFO_MEMBER(get_bg_tile_info);
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ void sound_io_map(address_map &map) ATTR_COLD;
+ void sound_map(address_map &map) ATTR_COLD;
+ void main_map(address_map &map) ATTR_COLD;
+};
+
+
+// FG 'SCREEN' LAYER
+
+void suprslam_state::screen_videoram_w(offs_t offset, uint16_t data)
+{
+ m_screen_videoram[offset] = data;
+ m_screen_tilemap->mark_tile_dirty(offset);
+}
+
+
+TILE_GET_INFO_MEMBER(suprslam_state::get_tile_info)
+{
+ int tileno = m_screen_videoram[tile_index] & 0x0fff;
+ int colour = m_screen_videoram[tile_index] & 0xf000;
+
+ tileno += m_screen_bank;
+ colour = colour >> 12;
+
+ tileinfo.set(0, tileno, colour, 0);
+}
+
+
+// BG LAYER
+void suprslam_state::bg_videoram_w(offs_t offset, uint16_t data)
+{
+ m_bg_videoram[offset] = data;
+ m_bg_tilemap->mark_tile_dirty(offset);
+}
+
+
+TILE_GET_INFO_MEMBER(suprslam_state::get_bg_tile_info)
+{
+ int tileno = m_bg_videoram[tile_index] & 0x0fff;
+ int colour = m_bg_videoram[tile_index] & 0xf000;
+
+ tileno += m_bg_bank;
+ colour = colour >> 12;
+
+ tileinfo.set(1, tileno, colour, 0);
+}
+
+
+uint32_t suprslam_state::tile_callback(uint32_t code)
+{
+ return m_sp_videoram[code];
+}
+
+
+
+void suprslam_state::video_start()
+{
+ m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(suprslam_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 64, 64);
+ m_screen_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(suprslam_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+
+ m_spr_ctrl = 0;
+ m_screen_tilemap->set_transparent_pen(15);
+}
+
+void suprslam_state::spr_ctrl_w(uint8_t data)
+{
+ m_spr_ctrl = data;
+}
+
+uint32_t suprslam_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ m_screen_tilemap->set_scrollx(0, m_screen_vregs[0x04 / 2] );
+
+ bitmap.fill(m_palette->black_pen(), cliprect);
+ m_k053936->zoom_draw(screen, bitmap, cliprect, m_bg_tilemap, 0, 0, 1);
+ if (!(m_spr_ctrl & 8))
+ m_spr->draw_sprites(m_spriteram, m_spriteram.bytes(), screen, bitmap, cliprect);
+ m_screen_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+ if (m_spr_ctrl & 8)
+ m_spr->draw_sprites(m_spriteram, m_spriteram.bytes(), screen, bitmap, cliprect);
+ return 0;
+}
+
+void suprslam_state::bank_w(uint16_t data)
+{
+ uint16_t old_screen_bank = m_screen_bank;
+ uint16_t old_bg_bank = m_bg_bank;
+
+ m_screen_bank = data & 0xf000;
+ m_bg_bank = (data & 0x0f00) << 4;
+
+ if (m_screen_bank != old_screen_bank)
+ m_screen_tilemap->mark_all_dirty();
+ if (m_bg_bank != old_bg_bank)
+ m_bg_tilemap->mark_all_dirty();
+}
+
+
+/*** SOUND *******************************************************************/
+
+void suprslam_state::sh_bankswitch_w(uint8_t data)
+{
+ m_soundbank->set_entry(data & 0x03);
+}
+
+/*** MEMORY MAPS *************************************************************/
+
+void suprslam_state::main_map(address_map &map)
+{
+ map(0x000000, 0x0fffff).rom();
+ map(0xfb0000, 0xfb1fff).ram().share(m_spriteram);
+ map(0xfc0000, 0xfcffff).ram().share(m_sp_videoram);
+ map(0xfd0000, 0xfdffff).ram();
+ map(0xfe0000, 0xfe0fff).ram().w(FUNC(suprslam_state::screen_videoram_w)).share(m_screen_videoram);
+ map(0xff0000, 0xff1fff).ram().w(FUNC(suprslam_state::bg_videoram_w)).share(m_bg_videoram);
+ map(0xff2000, 0xff203f).ram().share(m_screen_vregs);
+ map(0xff3000, 0xff3001).nopw(); // sprite buffer trigger?
+ map(0xff8000, 0xff8fff).rw(m_k053936, FUNC(k053936_device::linectrl_r), FUNC(k053936_device::linectrl_w));
+ map(0xff9001, 0xff9001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
+ map(0xffa000, 0xffafff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
+ map(0xffd000, 0xffd01f).w(m_k053936, FUNC(k053936_device::ctrl_w));
+ map(0xffe000, 0xffe001).w(FUNC(suprslam_state::bank_w));
+ map(0xfff000, 0xfff01f).rw("io", FUNC(vs9209_device::read), FUNC(vs9209_device::write)).umask16(0x00ff);
+}
+
+void suprslam_state::sound_map(address_map &map)
+{
+ map(0x0000, 0x77ff).rom();
+ map(0x7800, 0x7fff).ram();
+ map(0x8000, 0xffff).bankr(m_soundbank);
+}
+
+void suprslam_state::sound_io_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x00, 0x00).w(FUNC(suprslam_state::sh_bankswitch_w));
+ map(0x04, 0x04).rw(m_soundlatch, FUNC(generic_latch_8_device::read), FUNC(generic_latch_8_device::acknowledge_w));
+ map(0x08, 0x0b).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
+}
+
+/*** INPUT PORTS *************************************************************/
+
+static INPUT_PORTS_START( suprslam )
+ PORT_START("P1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+
+ PORT_START("P2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+
+ PORT_START("SYSTEM")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) // Only in "test mode"
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 ) // "Test"
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
+
+ PORT_START("DSW1")
+ PORT_DIPNAME( 0x01, 0x01, "Coin Slots" )
+ PORT_DIPSETTING( 0x01, "Common" )
+ PORT_DIPSETTING( 0x00, "Separate" )
+ PORT_DIPNAME( 0x0e, 0x0e, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x0a, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0c, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0e, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) )
+ PORT_DIPNAME( 0x70, 0x70, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x50, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x70, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0c, 0x0c, "Play Time" )
+ PORT_DIPSETTING( 0x08, "2:00" )
+ PORT_DIPSETTING( 0x0c, "3:00" )
+ PORT_DIPSETTING( 0x04, "4:00" )
+ PORT_DIPSETTING( 0x00, "5:00" )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_SERVICE( 0x40, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x80, 0x00, "Country" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Japan ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( World ) )
+INPUT_PORTS_END
+
+/*** GFX DECODE **************************************************************/
+
+static GFXDECODE_START( gfx_suprslam )
+ GFXDECODE_ENTRY( "fgtiles", 0, gfx_8x8x4_packed_lsb, 0x000, 16 )
+ GFXDECODE_ENTRY( "bgtiles", 0, gfx_16x16x4_packed_msb, 0x100, 16 )
+GFXDECODE_END
+
+static GFXDECODE_START( gfx_suprslam_spr )
+ GFXDECODE_ENTRY( "sprites", 0, gfx_16x16x4_packed_msb, 0x200, 16 )
+GFXDECODE_END
+
+
+/*** MACHINE DRIVER **********************************************************/
+
+void suprslam_state::machine_start()
+{
+ save_item(NAME(m_screen_bank));
+ save_item(NAME(m_bg_bank));
+ save_item(NAME(m_spr_ctrl));
+
+ m_soundbank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x8000);
+}
+
+void suprslam_state::machine_reset()
+{
+ m_screen_bank = 0;
+ m_bg_bank = 0;
+}
+
+void suprslam_state::suprslam(machine_config &config)
+{
+ M68000(config, m_maincpu, 32_MHz_XTAL / 2); // divider not verified
+ m_maincpu->set_addrmap(AS_PROGRAM, &suprslam_state::main_map);
+ m_maincpu->set_vblank_int("screen", FUNC(suprslam_state::irq1_line_hold));
+
+ Z80(config, m_audiocpu, 32_MHz_XTAL / 8); // 4 MHz ??? not verified
+ m_audiocpu->set_addrmap(AS_PROGRAM, &suprslam_state::sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &suprslam_state::sound_io_map);
+
+ vs9209_device &io(VS9209(config, "io", 0));
+ io.porta_input_cb().set_ioport("P1");
+ io.portb_input_cb().set_ioport("P2");
+ io.portc_input_cb().set_ioport("SYSTEM");
+ io.portd_input_cb().set_ioport("DSW1");
+ io.porte_input_cb().set_ioport("DSW2");
+ io.porth_output_cb().set(FUNC(suprslam_state::spr_ctrl_w));
+
+ GFXDECODE(config, m_gfxdecode, m_palette, gfx_suprslam);
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2300)); // hand-tuned
+ screen.set_size(64*8, 64*8);
+ screen.set_visarea(0*8, 40*8-1, 0*8, 28*8-1);
+ screen.set_screen_update(FUNC(suprslam_state::screen_update));
+ screen.set_palette(m_palette);
+
+ PALETTE(config, m_palette).set_format(palette_device::xGBR_555, 0x800);
+
+ VSYSTEM_SPR(config, m_spr, 0, m_palette, gfx_suprslam_spr);
+ m_spr->set_tile_indirect_cb(FUNC(suprslam_state::tile_callback));
+
+ K053936(config, m_k053936, 0);
+ m_k053936->set_wrap(1);
+ m_k053936->set_offsets(-45, -21);
+
+ SPEAKER(config, "speaker", 2).front();
+
+ GENERIC_LATCH_8(config, m_soundlatch);
+ m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
+ m_soundlatch->set_separate_acknowledge(true);
+
+ ym2610_device &ymsnd(YM2610(config, "ymsnd", 32_MHz_XTAL / 4)); // not verified
+ ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
+ ymsnd.add_route(0, "speaker", 0.75, 0);
+ ymsnd.add_route(0, "speaker", 0.75, 1);
+ ymsnd.add_route(1, "speaker", 1.0, 0);
+ ymsnd.add_route(2, "speaker", 1.0, 1);
+}
+
+/*** ROM LOADING *************************************************************/
+
+ROM_START( suprslam )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 Code
+ ROM_LOAD16_WORD_SWAP( "eb26ic47.bin", 0x000000, 0x080000, CRC(8d051fd8) SHA1(1820209306116e5b09cc10a8b3661d232c688b24) )
+ ROM_LOAD16_WORD_SWAP( "eb26ic73.bin", 0x080000, 0x080000, CRC(ca4ad383) SHA1(143ee475761fa54d5b3a9f4e3fb3acc8408972fd) )
+
+ ROM_REGION( 0x030000, "audiocpu", 0 ) // Z80 Code
+ ROM_LOAD( "eb26ic38.bin", 0x000000, 0x020000, CRC(153f2c50) SHA1(b70f248cfb18239fcd26e36fb36159f219debf2c) )
+
+ ROM_REGION( 0x200000, "ymsnd:adpcma", 0 ) // Samples
+ ROM_LOAD( "eb26ic66.bin", 0x000000, 0x200000, CRC(8cb33682) SHA1(0e6189ef0673227d35b9a154e333cc6cf9b65df6) )
+
+ ROM_REGION( 0x100000, "ymsnd:adpcmb", 0 ) // Samples
+ ROM_LOAD( "eb26ic59.bin", 0x000000, 0x100000, CRC(4ae4095b) SHA1(62b0600b18febb6cecb6370b03a2d6b7756840a2) )
+
+ ROM_REGION( 0x200000, "fgtiles", 0 ) // 8x8x4 'Screen' Layer GFX
+ ROM_LOAD( "eb26ic43.bin", 0x000000, 0x200000, CRC(9dfb0959) SHA1(ba479192a422a55efcf8aa7ff995c914525b4a56) )
+
+ ROM_REGION( 0x800000, "sprites", 0 ) // 16x16x4 Sprites GFX
+ ROM_LOAD16_WORD_SWAP( "eb26ic09.bin", 0x000000, 0x200000, CRC(5a415365) SHA1(a59a4ab231980b0540e9a8356a02530217779dbd) )
+ ROM_LOAD16_WORD_SWAP( "eb26ic10.bin", 0x200000, 0x200000, CRC(a04f3140) SHA1(621ff823d93fecdde801912064ac951727b71677) )
+ ROM_LOAD16_WORD_SWAP( "eb26_100.bin", 0x400000, 0x200000, CRC(c2ee5eb6) SHA1(4b61e77a0d0f38b542d5e32fa25799a4c85bf651) )
+ ROM_LOAD16_WORD_SWAP( "eb26_101.bin", 0x600000, 0x200000, CRC(7df654b7) SHA1(3a5ed6ee7cc31566e908b835a065e9bce60389fb) )
+
+ ROM_REGION( 0x400000, "bgtiles", 0 ) // 16x16x4 BG GFX
+ ROM_LOAD16_WORD_SWAP( "eb26ic12.bin", 0x000000, 0x200000, CRC(14561bd7) SHA1(5f69f68a305aba9acb21b844c8aa5b1de60f89ff) )
+ ROM_LOAD16_WORD_SWAP( "eb26ic36.bin", 0x200000, 0x200000, CRC(92019d89) SHA1(dbf6f8384341707996e4b9e07a3d4f536cf4905b) )
+ROM_END
+
+} // anonymous namespace
+
+
+/*** GAME DRIVERS ************************************************************/
+
+GAME( 1995, suprslam, 0, suprslam, suprslam, suprslam_state, empty_init, ROT0, "Banpresto / Toei Animation / Video System Co.", "From TV Animation Slam Dunk - Super Slams", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // Video System credited in ending screen