diff options
Diffstat (limited to 'src/mame/drivers/sslam.cpp')
-rw-r--r-- | src/mame/drivers/sslam.cpp | 933 |
1 files changed, 0 insertions, 933 deletions
diff --git a/src/mame/drivers/sslam.cpp b/src/mame/drivers/sslam.cpp deleted file mode 100644 index 6cb9436f92d..00000000000 --- a/src/mame/drivers/sslam.cpp +++ /dev/null @@ -1,933 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Pierpaolo Prazzoli, Quench -/* Super Slam (c)1993 Playmark */ - -/* - -Still some unknown reads / writes (it writes all over the place ...) -Inputs / DSW's need finishing / verifying. - -The 87C751 MCU for sound has not had its internal program ROM dumped. -So the sound MCU is simulated here - and therefore not 100% correct. - -Update 12/03/2005 - Pierpaolo Prazzoli -- Fixed sprites -- Fixed text tilemap colors -- Fixed text tilemap scrolls -- Fixed VSync -- Fixed middle tilemap removing wraparound in the title screen (24/03/2005) - - Sound command 29h is fired when the game is completed successfully. It requires - a melody from bank one to be playing, the real MCU doesn't set the bank though. - Consequently, the "Game, Set and Match" vocal is not played. -*/ - -/* - -Here's the info about this dump: - -Name: Super Slam -Manufacturer: PlayMark -Year: 1993 -Date Dumped: 18-07-2002 - -CPU: ST TS68000CP12, Signetics 87C751 -SOUND: OKIM6295 -GFX: TI TPC1020AFN-084C -CRYSTALS: 12MHz, 26MHz -DIPSW: Two 8-Way -Country: Italy - -About the game: - -This is a Tennis game :) You can play with some boys and girls, an old man, -a small kid and even with a dog! And remember, Winners don't use Drugs ;) - - - -PCB Layout ----------- - ----------------------------------------------------- -| 6295 3 62256 4 | -| 87C751 62256 | -| 1MHz 5 | -| 6116 | -| 6116 6 | -| DSW1(8) | -|J 7 | -|A TPC1020 | -|M DSW2(8) 8 | -|M | -|A 9 | -| | -| 10 | -| | -| 11 | -|12MHz 2018 2018 | -| 68000P12 62256 | -| 2 2018 2018 | -| 62256 | -| 1 26MHz | ----------------------------------------------------- - -Notes: - 68k clock: 12MHz - VSync: 58Hz - HSync: 14.62kHz - 87C751 clock: 12MHz (87C751 is 8051 based DIP24 MCU with) - (2Kx8 OTP EPROM and 64Kx8 SRAM) - (unfortunately, it's protected) -*/ - - - -#include "emu.h" -#include "includes/sslam.h" - -#include "cpu/m68000/m68000.h" -#include "screen.h" -#include "speaker.h" - - -#define oki_time_base 0x08 - - - - -/************************************************************************** - This table converts commands sent from the main CPU, into sample numbers - played back by the sound processor (the 87C751). - Values of 0xff indicate unused commands. - Note, that some samples such as 60, 61 and 62 are sequenced to form a - music track. Ditto for samples 65, 66, 67 and 68, and also 6A and 6B. - The sequencing of the music tracks are handled in the second table below. -*/ - -static const uint8_t sslam_snd_cmd[64] = -{ -/*00*/ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, -/*08*/ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x70, 0x71, -/*10*/ 0x72, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, -/*18*/ 0x15, 0x16, 0x17, 0x18, 0x19, 0x73, 0x74, 0x75, -/*20*/ 0x76, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x63, -/*28*/ 0x64, 0x6b, 0xff, 0xff, 0x60, 0x20, 0x6c, 0x65, -/*30*/ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, -/*38*/ 0x29, 0x2a, 0x2b, 0xff, 0x69, 0xff, 0x20, 0xff -}; - - -/************************************************************************** - Music Sequencing: - The columns contain the sequence (from left to right) of samples to play in each backing music track - The first row is zero as a place holder to indicate that music has/should stop - The second row onwards are the various music tracks - The last (right most) byte in each row (track) is a flag to indicate what to do at the end of the sequence: - If the last byte is 0x00, the track should not be repeated - If the last byte is 0xff, the track should loop by restarting at the first column sample -*/ - -static const uint8_t sslam_snd_loop[8][19] = -{ -/*NA*/ { 0x00, 0x00 }, /* Not a loop - just a parking position for stopping track playback */ -/*60*/ { 0x60, 0x60, 0x61, 0x61, 0x60, 0x60, 0x61, 0x62, 0xff }, -/*63*/ { 0x63, 0x00 }, -/*64*/ { 0x64, 0x00 }, -/*65*/ { 0x65, 0x65, 0x66, 0x66, 0x65, 0x65, 0x66, 0x67, 0x67, 0x68, 0x65, 0x65, 0x67, 0x65, 0x66, 0x66, 0x67, 0x68, 0xff }, -/*69*/ { 0x69, 0xff }, -/*6B*/ { 0x6b, 0x6a, 0x6a, 0x6b, 0x6a, 0xff }, -/*6C*/ { 0x6c, 0xff } -}; - - - - -/* Sound numbers in the Super Slam sample ROM -01 "Out" -02 "Fault" -03 "Deuce" -04 "Let" -05 "Net" -06 "Let's Play" -07 "Play" -08 "Love" -09 "All" -0a "15" -0b "30" -0c "40" -0d "Change Court" -0e "Game" -0f "0" -10 "1" -11 "2" -12 "3" -13 "4" -14 "5" -15 "6" -16 "7" -17 "8" -18 "9" -19 "10" -1a Ball Hit -1b Ball Hit -1c Ball Bounce -1d Swing -1e Crowd Cheer -1f Crowd Clap -20 Horns -21 Ball Smash -22 Ball Hit -23 "Oww!" -24 "Ooh" -25 "Set Point" -26 "Match Point" -27 Boy "Ouch" -28 Girl "Ouch" -29 Synth -2a Three step rising synth -2b Ball Hit - -60 Melody A1 ------------- -61 Melody A2 -62 Melody A3 Bank 0 -63 Pattern B -64 Pattern C ------------ - -65 Melody D1 ------------- -66 Melody D2 Bank 1 -67 Melody D3 -68 Melody D4 ------------- - -69 Melody E -------------- -6a Melody F1 Bank 2 -6b Melody F2 -6c Melody G -------------- - -70 "Tie Break" ------------- -71 "Advantage Server" -72 "Advantage Receiver" -73 "Game and First Set" Bank 1 -74 "Game and Second Set" -75 "Game and Third Set" -76 "Game Set and Match" ------------- -*/ - - - - - -TIMER_CALLBACK_MEMBER(sslam_state::music_playback) -{ - int pattern = 0; - if ((m_oki->read() & 0x08) == 0) - { - m_bar += 1; - pattern = sslam_snd_loop[m_melody][m_bar]; - - if (pattern) { - if (pattern == 0xff) { /* Repeat track from first bar */ - m_bar = 0; - pattern = sslam_snd_loop[m_melody][m_bar]; - } - logerror("Changing bar in music track to pattern %02x\n",pattern); - m_oki->write(0x80 | pattern); - m_oki->write(0x81); - } - else if (pattern == 0x00) { /* Non-looped track. Stop playing it */ - m_track = 0; - m_melody = 0; - m_bar = 0; - m_music_timer->enable(false); - } - } - - if (0) - { - pattern = sslam_snd_loop[m_melody][m_bar]; - popmessage("Music track: %02x, Melody: %02x, Pattern: %02x, Bar:%02d",m_track,m_melody,pattern,m_bar); - } -} - - -void sslam_state::sslam_play(int track, int data) -{ - int status = m_oki->read(); - - if (data < 0x80) { - if (track) { - if (m_track != data) { - m_track = data; - m_bar = 0; - if (status & 0x08) - m_oki->write(0x40); - m_oki->write((0x80 | data)); - m_oki->write(0x81); - m_music_timer->adjust(attotime::from_msec(4), 0, attotime::from_hz(250)); /* 250Hz for smooth sequencing */ - } - } - else { - if ((status & 0x01) == 0) { - m_oki->write((0x80 | data)); - m_oki->write(0x11); - } - else if ((status & 0x02) == 0) { - m_oki->write((0x80 | data)); - m_oki->write(0x21); - } - else if ((status & 0x04) == 0) { - m_oki->write((0x80 | data)); - m_oki->write(0x41); - } - } - } - else { /* use above 0x80 to turn off channels */ - if (track) { - m_music_timer->enable(false); - m_track = 0; - m_melody = 0; - m_bar = 0; - } - data &= 0x7f; - m_oki->write(data); - } -} - -WRITE8_MEMBER(sslam_state::sslam_snd_w) -{ - logerror("%s Writing %04x to Sound CPU\n",machine().describe_context(),data); - if (data >= 0x40) { - if (data == 0xfe) { - /* This should reset the sound MCU and stop audio playback, but here, it */ - /* chops the first coin insert. So let's only stop any playing melodies. */ - sslam_play(1, (0x80 | 0x40)); /* Stop playing the melody */ - } - else { - logerror("Unknown command (%02x) sent to the Sound controller\n",data); - popmessage("Unknown command (%02x) sent to the Sound controller",data); - } - } - else if (data == 0) { - m_bar = 0; /* Complete any current bars then stop sequencing */ - m_melody = 0; - } - else { - m_sound = sslam_snd_cmd[data]; - - if (m_sound == 0xff) { - popmessage("Unmapped sound command %02x on Bank %02x",data,m_snd_bank); - } - else if (m_sound >= 0x70) { - /* These vocals are in bank 1, but a bug in the actual MCU doesn't set the bank */ -// if (m_snd_bank != 1) -// m_oki->set_rom_bank(1); -// sslam_snd_bank = 1; - sslam_play(0, m_sound); - } - else if (m_sound >= 0x69) { - if (m_snd_bank != 2) - m_oki->set_rom_bank(2); - m_snd_bank = 2; - switch (m_sound) - { - case 0x69: m_melody = 5; break; - case 0x6b: m_melody = 6; break; - case 0x6c: m_melody = 7; break; - default: m_melody = 0; m_bar = 0; break; /* Invalid */ - } - sslam_play(m_melody, m_sound); - } - else if (m_sound >= 0x65) { - if (m_snd_bank != 1) - m_oki->set_rom_bank(1); - m_snd_bank = 1; - m_melody = 4; - sslam_play(m_melody, m_sound); - } - else if (m_sound >= 0x60) { - if (m_snd_bank != 0) - m_oki->set_rom_bank(0); - m_snd_bank = 0; - switch (m_sound) - { - case 0x60: m_melody = 1; break; - case 0x63: m_melody = 2; break; - case 0x64: m_melody = 3; break; - default: m_melody = 0; m_bar = 0; break; /* Invalid */ - } - sslam_play(m_melody, m_sound); - } - else { - sslam_play(0, m_sound); - } - } -} - - - -WRITE16_MEMBER(powerbls_state::powerbls_sound_w) -{ - m_soundlatch->write(data & 0xff); - m_audiocpu->set_input_line(MCS51_INT1_LINE, HOLD_LINE); -} - -/* Memory Maps */ - -/* these will need verifying .. the game writes all over the place ... */ - -void sslam_state::sslam_program_map(address_map &map) -{ - map(0x000000, 0xffffff).rom(); /* I don't honestly know where the rom is mirrored .. so all unmapped reads / writes go to rom */ - - map(0x000400, 0x07ffff).ram(); - map(0x100000, 0x103fff).ram().w(FUNC(sslam_state::sslam_bg_tileram_w)).share("bg_tileram"); - map(0x104000, 0x107fff).ram().w(FUNC(sslam_state::sslam_md_tileram_w)).share("md_tileram"); - map(0x108000, 0x10ffff).ram().w(FUNC(sslam_state::sslam_tx_tileram_w)).share("tx_tileram"); - map(0x110000, 0x11000d).ram().share("regs"); - map(0x200000, 0x200001).nopw(); - map(0x280000, 0x280fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0x201000, 0x201fff).ram().share("spriteram"); - map(0x304000, 0x304001).nopw(); - map(0x300010, 0x300011).portr("IN0"); - map(0x300012, 0x300013).portr("IN1"); - map(0x300014, 0x300015).portr("IN2"); - map(0x300016, 0x300017).portr("IN3"); - map(0x300018, 0x300019).portr("IN4"); - map(0x30001a, 0x30001b).portr("DSW2"); - map(0x30001c, 0x30001d).portr("DSW1"); - map(0x30001f, 0x30001f).w(FUNC(sslam_state::sslam_snd_w)); - map(0xf00000, 0xffffff).ram(); /* Main RAM */ -} - -void powerbls_state::powerbls_map(address_map &map) -{ - map(0x000000, 0x07ffff).rom(); - map(0x100000, 0x103fff).ram().w(FUNC(powerbls_state::powerbls_bg_tileram_w)).share("bg_tileram"); - map(0x104000, 0x107fff).ram(); // not used - map(0x110000, 0x11000d).ram().share("regs"); - map(0x200000, 0x200001).nopw(); - map(0x201000, 0x201fff).ram().share("spriteram"); - map(0x280000, 0x2803ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0x300010, 0x300011).portr("IN0"); - map(0x300012, 0x300013).portr("IN1"); - map(0x300014, 0x300015).portr("IN2"); - map(0x30001a, 0x30001b).portr("DSW1"); - map(0x30001c, 0x30001d).portr("DSW2"); - map(0x30001e, 0x30001f).w(FUNC(powerbls_state::powerbls_sound_w)); - map(0x304000, 0x304001).nopw(); - map(0xff0000, 0xffffff).ram(); /* Main RAM */ -} - - -/* - Sound MCU mapping -*/ - -READ8_MEMBER(sslam_state::playmark_snd_command_r) -{ - uint8_t data = 0; - - if ((m_oki_control & 0x38) == 0x30) - data = m_soundlatch->read(); - else if ((m_oki_control & 0x38) == 0x28) - data = (m_oki->read() & 0x0f); - - return data; -} - -WRITE8_MEMBER(sslam_state::playmark_oki_w) -{ - m_oki_command = data; -} - -WRITE8_MEMBER(sslam_state::playmark_snd_control_w) -{ - m_oki_control = data; - - if (data & 3) - { - if (m_oki_bank != ((data & 3) - 1)) - { - m_oki_bank = (data & 3) - 1; - m_oki->set_rom_bank(m_oki_bank); - } - } - - if ((data & 0x38) == 0x18) - { - m_oki->write(m_oki_command); - } - -// !(data & 0x80) -> sound enable -// (data & 0x40) -> always set -} - -/* Input Ports */ - -static INPUT_PORTS_START( sslam ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN4 ) - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) 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_START1 ) - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) 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_START2 ) - - PORT_START("IN3") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 ) - - PORT_START("IN4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 ) - - PORT_START("DSW1") - PORT_DIPNAME( 0x07, 0x07, "Coin(s) per Player" ) PORT_DIPLOCATION("SW1:1,2,3") - PORT_DIPSETTING( 0x07, "1" ) - PORT_DIPSETTING( 0x06, "2" ) - PORT_DIPSETTING( 0x05, "3" ) - PORT_DIPSETTING( 0x04, "4" ) - PORT_DIPSETTING( 0x03, "5" ) - PORT_DIPSETTING( 0x02, "6" ) - PORT_DIPSETTING( 0x01, "7" ) - PORT_DIPSETTING( 0x00, "8" ) - PORT_DIPNAME( 0x38, 0x38, "Coin Multiplicator" ) PORT_DIPLOCATION("SW1:4,5,6") - PORT_DIPSETTING( 0x38, "*1" ) - PORT_DIPSETTING( 0x30, "*2" ) - PORT_DIPSETTING( 0x28, "*3" ) - PORT_DIPSETTING( 0x20, "*4" ) - PORT_DIPSETTING( 0x18, "*5" ) - PORT_DIPSETTING( 0x10, "*6" ) - PORT_DIPSETTING( 0x08, "*7" ) - PORT_DIPSETTING( 0x00, "*8" ) - PORT_DIPNAME( 0x40, 0x40, "On Time Up" ) PORT_DIPLOCATION("SW1:7") - PORT_DIPSETTING( 0x00, "End After Point" ) - PORT_DIPSETTING( 0x40, "End After Game" ) - PORT_DIPNAME( 0x80, 0x80, "Coin Slots" ) PORT_DIPLOCATION("SW1:8") - PORT_DIPSETTING( 0x80, "Common" ) - PORT_DIPSETTING( 0x00, "Individual" ) - - PORT_START("DSW2") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1,2") // 0x000522 = 0x00400e - PORT_DIPSETTING( 0x03, "0" ) - PORT_DIPSETTING( 0x02, "1" ) - PORT_DIPSETTING( 0x01, "2" ) - PORT_DIPSETTING( 0x00, "3" ) - PORT_DIPNAME( 0x04, 0x04, "Singles Game Time" ) PORT_DIPLOCATION("SW2:3") - PORT_DIPSETTING( 0x04, "180 Seconds" ) - PORT_DIPSETTING( 0x00, "120 Seconds" ) - PORT_DIPNAME( 0x08, 0x08, "Doubles Game Time" ) PORT_DIPLOCATION("SW2:4") - PORT_DIPSETTING( 0x08, "180 Seconds" ) - PORT_DIPSETTING( 0x00, "120 Seconds" ) - PORT_DIPNAME( 0x30, 0x30, "Starting Score" ) PORT_DIPLOCATION("SW2:5,6") - PORT_DIPSETTING( 0x30, "4-4" ) - PORT_DIPSETTING( 0x20, "3-4" ) - PORT_DIPSETTING( 0x10, "3-3" ) - PORT_DIPSETTING( 0x00, "0-0" ) - PORT_DIPNAME( 0x40, 0x40, "Play Mode" ) PORT_DIPLOCATION("SW2:7") - PORT_DIPSETTING( 0x00, "2 Players" ) - PORT_DIPSETTING( 0x40, "4 Players" ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8") - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) -INPUT_PORTS_END - -static INPUT_PORTS_START( powerbls ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) 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_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) 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_UNUSED ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) - - PORT_START("DSW1") - PORT_DIPNAME( 0x03, 0x01, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:1,2") - PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) - PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:3,4") - PORT_DIPSETTING( 0x0c, "1" ) - PORT_DIPSETTING( 0x04, "2" ) - PORT_DIPSETTING( 0x08, "3" ) - PORT_DIPSETTING( 0x00, "4" ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Language ) ) PORT_DIPLOCATION("SW1:5") - PORT_DIPSETTING( 0x10, DEF_STR( English ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Italian ) ) - PORT_DIPNAME( 0x20, 0x00, "Weapon" ) PORT_DIPLOCATION("SW1:6") - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:7") - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:8") - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - - PORT_START("DSW2") - PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3") - PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_4C ) ) - PORT_DIPSETTING( 0x04, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x06, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:4,5,6") - PORT_DIPSETTING( 0x10, DEF_STR( 6C_1C ) ) - PORT_DIPSETTING( 0x30, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x28, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x20, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 4C_3C ) ) - PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7") - PORT_DIPSETTING( 0x00, DEF_STR( No ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8") - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) -INPUT_PORTS_END - -/* GFX Decodes */ - -static const gfx_layout tiles8x8_layout = -{ - 8,8, - RGN_FRAC(1,4), - 4, - { 0, RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 8*8 -}; - -static const gfx_layout tiles16x16_layout = -{ - 16,16, - RGN_FRAC(1,4), - 4, - { 0, RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, - { 0, 1, 2, 3, 4, 5, 6, 7, - 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, - 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, - 16*16 -}; - -static GFXDECODE_START( gfx_sslam ) - GFXDECODE_ENTRY( "gfx2", 0, tiles8x8_layout, 0x300, 16 ) /* spr */ - GFXDECODE_ENTRY( "gfx1", 0, tiles16x16_layout, 0, 16 ) /* bg */ - GFXDECODE_ENTRY( "gfx1", 0, tiles16x16_layout, 0x100, 16 ) /* mid */ - GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0x200, 16 ) /* tx */ -GFXDECODE_END - -static GFXDECODE_START( gfx_powerbls ) - GFXDECODE_ENTRY( "gfx2", 0, tiles8x8_layout, 0x100, 16 ) /* spr */ - GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 16 ) /* bg */ -GFXDECODE_END - - -/* Machine Driver */ - -void sslam_state::machine_start() -{ - m_track = 0; - m_melody = 0; - m_bar = 0; - - save_item(NAME(m_track)); - save_item(NAME(m_melody)); - save_item(NAME(m_bar)); - save_item(NAME(m_snd_bank)); - - m_music_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sslam_state::music_playback),this)); -} - -void powerbls_state::machine_start() -{ - sslam_state::machine_start(); - - save_item(NAME(m_oki_control)); - save_item(NAME(m_oki_command)); - save_item(NAME(m_oki_bank)); -} - -void sslam_state::sslam(machine_config &config) -{ - /* basic machine hardware */ - M68000(config, m_maincpu, 12000000); /* 12 MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &sslam_state::sslam_program_map); - m_maincpu->set_vblank_int("screen", FUNC(sslam_state::irq2_line_hold)); - - I8051(config, m_audiocpu, 12000000); - m_audiocpu->set_disable(); /* Internal code is not dumped - 2 boards were protected */ - - /* video hardware */ - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(58); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen.set_size(64*8, 32*8); - screen.set_visarea(1*8, 39*8-1, 1*8, 31*8-1); - screen.set_screen_update(FUNC(sslam_state::screen_update)); - screen.set_palette(m_palette); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_sslam); - PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x800); - - /* sound hardware */ - SPEAKER(config, "mono").front_center(); - - OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH); - m_oki->add_route(ALL_OUTPUTS, "mono", 0.80); -} - -void powerbls_state::powerbls(machine_config &config) -{ - /* basic machine hardware */ - M68000(config, m_maincpu, 12000000); /* 12 MHz */ - m_maincpu->set_addrmap(AS_PROGRAM, &powerbls_state::powerbls_map); - m_maincpu->set_vblank_int("screen", FUNC(sslam_state::irq2_line_hold)); - - I80C51(config, m_audiocpu, 12000000); /* 83C751 */ - m_audiocpu->port_out_cb<1>().set(FUNC(powerbls_state::playmark_snd_control_w)); - m_audiocpu->port_in_cb<3>().set(FUNC(powerbls_state::playmark_snd_command_r)); - m_audiocpu->port_out_cb<3>().set(FUNC(powerbls_state::playmark_oki_w)); - - /* video hardware */ - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(58); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen.set_size(64*8, 32*8); - screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1); - screen.set_screen_update(FUNC(powerbls_state::screen_update)); - screen.set_palette(m_palette); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_powerbls); - PALETTE(config, m_palette).set_format(palette_device::RRRRGGGGBBBBRGBx, 0x200); - - /* sound hardware */ - SPEAKER(config, "mono").front_center(); - - GENERIC_LATCH_8(config, m_soundlatch); - - OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH); /* verified on original PCB */ - m_oki->add_route(ALL_OUTPUTS, "mono", 0.80); -} - - - -#define ROM_RELOAD_SSLAM(base) \ - ROM_RELOAD ( base+0x000000, 0x80000 ) \ - ROM_RELOAD ( base+0x100000, 0x80000 ) \ - ROM_RELOAD ( base+0x200000, 0x80000 ) \ - ROM_RELOAD ( base+0x300000, 0x80000 ) \ - ROM_RELOAD ( base+0x400000, 0x80000 ) \ - ROM_RELOAD ( base+0x500000, 0x80000 ) \ - ROM_RELOAD ( base+0x600000, 0x80000 ) \ - ROM_RELOAD ( base+0x700000, 0x80000 ) \ - ROM_RELOAD ( base+0x800000, 0x80000 ) \ - ROM_RELOAD ( base+0x900000, 0x80000 ) \ - ROM_RELOAD ( base+0xa00000, 0x80000 ) \ - ROM_RELOAD ( base+0xb00000, 0x80000 ) \ - ROM_RELOAD ( base+0xc00000, 0x80000 ) \ - ROM_RELOAD ( base+0xd00000, 0x80000 ) \ - ROM_RELOAD ( base+0xe00000, 0x80000 ) - - - -ROM_START( sslam ) // verified on 2 PCBs - ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "2.u67", 0x00000, 0x80000, CRC(1ce52917) SHA1(b9b1d14ea44c248ce6e615c5c553c0d485c1302b) ) - ROM_RELOAD_SSLAM(0x100000) - ROM_LOAD16_BYTE( "1.u56", 0x00001, 0x80000, CRC(59bec8ae) SHA1(2d53213a1d335184384b2138d18d496b602dc3fb) ) - ROM_RELOAD_SSLAM(0x100001) - - ROM_REGION( 0x1000, "audiocpu", 0 ) - ROM_LOAD( "s87c751.bin", 0x0000, 0x0800, NO_DUMP ) - - ROM_REGION( 0x200000, "gfx1", 0 ) /* Bg */ - ROM_LOAD( "7.u45", 0x000000, 0x80000, CRC(64ecdde9) SHA1(576ba1169d90970622249e532baa4209bf12de5a) ) - ROM_LOAD( "6.u39", 0x080000, 0x80000, CRC(6928065c) SHA1(ad5b1889bebf0358df0295d6041b798ac53ac625) ) - ROM_LOAD( "5.u42", 0x100000, 0x80000, CRC(8d18bdc6) SHA1(cacc4f475f85438a00ead4911730202e995983a7) ) - ROM_LOAD( "4.u36", 0x180000, 0x80000, CRC(8e15fb9d) SHA1(47917d8aac1bce2e15f36904f5c2534e5b80236b) ) - - ROM_REGION( 0x200000, "gfx2", 0 ) /* Sprites */ - ROM_LOAD( "8.u83", 0x000000, 0x80000, CRC(19bb89dd) SHA1(c2a0c32d350a193d366b5086502998281fd0bec4) ) - ROM_LOAD( "9.u84", 0x080000, 0x80000, CRC(d50d86c7) SHA1(7ecbcc03851a8174610f7f5ad889e40543da928e) ) - ROM_LOAD( "10.u85", 0x100000, 0x80000, CRC(681b8ac8) SHA1(ebfeffc091f53af246311574b9c5d83d2716a7be) ) - ROM_LOAD( "11.u86", 0x180000, 0x80000, CRC(e41f89e3) SHA1(e4b39411a4cea6aa6c01564f74bb8e432d382a73) ) - - /* $00000-$20000 stays the same in all sound banks, */ - /* the second half of the bank is the area that gets switched */ - ROM_REGION( 0xc0000, "oki", 0 ) /* OKI Samples */ - ROM_LOAD( "3.u13", 0x00000, 0x40000, CRC(d0a9245f) SHA1(2e840cdd7bdfe7c6f986daf88576de0559597499) ) - ROM_CONTINUE( 0x60000, 0x20000 ) - ROM_CONTINUE( 0xa0000, 0x20000 ) - ROM_COPY( "oki", 0x00000,0x40000, 0x20000) - ROM_COPY( "oki", 0x00000,0x80000, 0x20000) -ROM_END - -ROM_START( sslama ) // this might be a bad dump, the ONLY difference vs. the parent set is the initial stack pointer (0xff0000 in this vs 0x010000 in the other sets) - ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "2.u67", 0x00000, 0x80000, CRC(1ce52917) SHA1(b9b1d14ea44c248ce6e615c5c553c0d485c1302b) ) - ROM_RELOAD_SSLAM(0x100000) - ROM_LOAD16_BYTE( "it_22.bin", 0x00001, 0x80000, CRC(51c56828) SHA1(d71d64b0268c156456bed64b4c13b98181fa3e0f) ) - ROM_RELOAD_SSLAM(0x100001) - - - ROM_REGION( 0x1000, "audiocpu", 0 ) - ROM_LOAD( "s87c751.bin", 0x0000, 0x0800, NO_DUMP ) - - ROM_REGION( 0x200000, "gfx1", 0 ) /* Bg */ - ROM_LOAD( "7.u45", 0x000000, 0x80000, CRC(64ecdde9) SHA1(576ba1169d90970622249e532baa4209bf12de5a) ) - ROM_LOAD( "6.u39", 0x080000, 0x80000, CRC(6928065c) SHA1(ad5b1889bebf0358df0295d6041b798ac53ac625) ) - ROM_LOAD( "5.u42", 0x100000, 0x80000, CRC(8d18bdc6) SHA1(cacc4f475f85438a00ead4911730202e995983a7) ) - ROM_LOAD( "4.u36", 0x180000, 0x80000, CRC(8e15fb9d) SHA1(47917d8aac1bce2e15f36904f5c2534e5b80236b) ) - - ROM_REGION( 0x200000, "gfx2", 0 ) /* Sprites */ - ROM_LOAD( "8.u83", 0x000000, 0x80000, CRC(19bb89dd) SHA1(c2a0c32d350a193d366b5086502998281fd0bec4) ) - ROM_LOAD( "9.u84", 0x080000, 0x80000, CRC(d50d86c7) SHA1(7ecbcc03851a8174610f7f5ad889e40543da928e) ) - ROM_LOAD( "10.u85", 0x100000, 0x80000, CRC(681b8ac8) SHA1(ebfeffc091f53af246311574b9c5d83d2716a7be) ) - ROM_LOAD( "11.u86", 0x180000, 0x80000, CRC(e41f89e3) SHA1(e4b39411a4cea6aa6c01564f74bb8e432d382a73) ) - - /* $00000-$20000 stays the same in all sound banks, */ - /* the second half of the bank is the area that gets switched */ - ROM_REGION( 0xc0000, "oki", 0 ) /* OKI Samples */ - ROM_LOAD( "3.u13", 0x00000, 0x40000, CRC(d0a9245f) SHA1(2e840cdd7bdfe7c6f986daf88576de0559597499) ) - ROM_CONTINUE( 0x60000, 0x20000 ) - ROM_CONTINUE( 0xa0000, 0x20000 ) - ROM_COPY( "oki", 0x00000,0x40000, 0x20000) - ROM_COPY( "oki", 0x00000,0x80000, 0x20000) -ROM_END - -// prg roms on this had hand drawn labels (including playmark logo) -// other labels seem to be that of the powerbals set below, but with sslam content, maybe it was -// factory converted to powerbals at one time, then back again? -// there are quite a lot of changes from the above sets. -ROM_START( sslamb ) - ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "21.u67", 0x00000, 0x80000, CRC(a7c57d58) SHA1(28964c30a12bf7b236fd10bd3b1da341b54f4b7c) ) - ROM_RELOAD_SSLAM(0x100000) - ROM_LOAD16_BYTE( "22.u68", 0x00001, 0x80000, CRC(782ecd53) SHA1(27a712a4f9d031b1bff7618f60ee6cf7a5241aa1) ) - ROM_RELOAD_SSLAM(0x100001) - - ROM_REGION( 0x1000, "audiocpu", 0 ) - ROM_LOAD( "s87c751.bin", 0x0000, 0x0800, NO_DUMP ) - - ROM_REGION( 0x200000, "gfx1", 0 ) /* Bg */ - ROM_LOAD( "7.u45", 0x000000, 0x80000, CRC(64ecdde9) SHA1(576ba1169d90970622249e532baa4209bf12de5a) ) // 26.u45 - ROM_LOAD( "6.u39", 0x080000, 0x80000, CRC(6928065c) SHA1(ad5b1889bebf0358df0295d6041b798ac53ac625) ) // 25.u39 - ROM_LOAD( "5.u42", 0x100000, 0x80000, CRC(8d18bdc6) SHA1(cacc4f475f85438a00ead4911730202e995983a7) ) // 24.u42 - ROM_LOAD( "4.u36", 0x180000, 0x80000, CRC(8e15fb9d) SHA1(47917d8aac1bce2e15f36904f5c2534e5b80236b) ) // 23.u36 - - ROM_REGION( 0x200000, "gfx2", 0 ) /* Sprites */ - ROM_LOAD( "8.u83", 0x000000, 0x80000, CRC(19bb89dd) SHA1(c2a0c32d350a193d366b5086502998281fd0bec4) ) // 27.u83 - ROM_LOAD( "9.u84", 0x080000, 0x80000, CRC(d50d86c7) SHA1(7ecbcc03851a8174610f7f5ad889e40543da928e) ) // 28.u84 - ROM_LOAD( "10.u85", 0x100000, 0x80000, CRC(681b8ac8) SHA1(ebfeffc091f53af246311574b9c5d83d2716a7be) ) // 29.u85 - ROM_LOAD( "11.u86", 0x180000, 0x80000, CRC(e41f89e3) SHA1(e4b39411a4cea6aa6c01564f74bb8e432d382a73) ) // 30.u86 - - /* $00000-$20000 stays the same in all sound banks, */ - /* the second half of the bank is the area that gets switched */ - ROM_REGION( 0xc0000, "oki", 0 ) /* OKI Samples */ - ROM_LOAD( "3.u13", 0x00000, 0x40000, CRC(d0a9245f) SHA1(2e840cdd7bdfe7c6f986daf88576de0559597499) ) // 20.io13 - ROM_CONTINUE( 0x60000, 0x20000 ) - ROM_CONTINUE( 0xa0000, 0x20000 ) - ROM_COPY( "oki", 0x00000,0x40000, 0x20000) - ROM_COPY( "oki", 0x00000,0x80000, 0x20000) -ROM_END - - -// it's a conversion for a sslam pcb -ROM_START( powerbals ) - ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "21.u67", 0x00000, 0x40000, CRC(4e302381) SHA1(5685d15fd3137866093ff13b95a7df2265a8bc64) ) - ROM_LOAD16_BYTE( "22.u66", 0x00001, 0x40000, CRC(89b70599) SHA1(57a5d71e4d8ca62fffe2e81116c5236d2194ae11) ) - - ROM_REGION( 0x1000, "audiocpu", 0 ) - ROM_LOAD( "s87c751.bin", 0x0000, 0x0800, CRC(5b8b2d3a) SHA1(c3409243dfc0ca959a80f6890c87b4ce9eb0741d) ) - - ROM_REGION( 0x200000, "gfx1", 0 ) /* Bg */ - ROM_LOAD( "26.u45", 0x000000, 0x80000, CRC(fc9d25c7) SHA1(057702753eddffb9e7bff76311c5e8891343174b) ) - ROM_LOAD( "25.u39", 0x080000, 0x80000, CRC(f20ea774) SHA1(fd284a5ee2cd9d1b5db53225bdfb31dc5bd3f581) ) - ROM_LOAD( "24.u42", 0x100000, 0x80000, CRC(e1829809) SHA1(2fdf0b5580609bff0040c909d2e1ff9fae7dcc9c) ) - ROM_LOAD( "23.u36", 0x180000, 0x80000, CRC(7805275e) SHA1(f0499cf4c84704a6de93a2a1a229af6068ad8771) ) - - ROM_REGION( 0x200000, "gfx2", 0 ) /* Sprites */ - ROM_LOAD( "27.u83", 0x000000, 0x80000, CRC(92d7d40a) SHA1(81879945790feb9aeb45750e9b5ded3356571503) ) - ROM_LOAD( "28.u84", 0x080000, 0x80000, CRC(90412135) SHA1(499619c72613a1dd63a6504e39b159a18a71f4fa) ) - ROM_LOAD( "29.u85", 0x100000, 0x80000, CRC(e7bcd2e7) SHA1(01a5e5ac5da2fd79a0c9088f775096b9915bae92) ) - ROM_LOAD( "30.u86", 0x180000, 0x80000, CRC(4130694c) SHA1(581d0035ce1624568f635bd79290be6c587a2533) ) - - /* $00000-$20000 stays the same in all sound banks, */ - /* the second half of the bank is the area that gets switched */ - ROM_REGION( 0xc0000, "oki", 0 ) /* OKI Samples */ - ROM_LOAD( "20.i013", 0x00000, 0x40000, CRC(12776dbc) SHA1(9ab9930fd581296642834d2cb4ba65264a588af3) ) - ROM_CONTINUE( 0x60000, 0x20000 ) - ROM_CONTINUE( 0xa0000, 0x20000 ) - ROM_COPY( "oki", 0x00000,0x40000, 0x20000) - ROM_COPY( "oki", 0x00000,0x80000, 0x20000) -ROM_END - -GAME( 1993, sslam, 0, sslam, sslam, sslam_state, empty_init, ROT0, "Playmark", "Super Slam (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1993, sslama, sslam, sslam, sslam, sslam_state, empty_init, ROT0, "Playmark", "Super Slam (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1993, sslamb, sslam, sslam, sslam, sslam_state, empty_init, ROT0, "Playmark", "Super Slam (set 3)", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, powerbals,powerbal, powerbls, powerbls, powerbls_state, empty_init, ROT0, "Playmark", "Power Balls (Super Slam conversion)", MACHINE_SUPPORTS_SAVE ) |