diff options
Diffstat (limited to 'src/mame/drivers/igs009.cpp')
-rw-r--r-- | src/mame/drivers/igs009.cpp | 1189 |
1 files changed, 0 insertions, 1189 deletions
diff --git a/src/mame/drivers/igs009.cpp b/src/mame/drivers/igs009.cpp deleted file mode 100644 index 88a622f316c..00000000000 --- a/src/mame/drivers/igs009.cpp +++ /dev/null @@ -1,1189 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Luca Elia, David Haywood, Roberto Fresca -/*************************************************************************** - - -= IGS009 Based Games =- - - driver by Luca Elia and David Haywood - -CPU : Z180 -Sound : M6295 + YM2413 -Video : IGS009 -NVRAM : Battery for main RAM - -- The hardware is similar to other IGS002 + IGS003 based boards. - The interesting part is the background tilemap, that is designed specifically - for simulating the nine reels of a slot machine. - ---------------------------------------------------------------------------- -Year Game Manufacturer Notes ---------------------------------------------------------------------------- -1997 Jingle Bell (US, V157US) IGS patched protection -1997 Jingle Bell (EU, V155UE) IGS patched protection -1997 Jingle Bell (EU, V153UE) IGS patched protection -1995 Jingle Bell (EU, V141UE) IGS patched protection -1995? Jingle Bell (Italy, V133I) IGS patched protection -1998 Grand Prix '98 Romtec ---------------------------------------------------------------------------- - -***************************************************************************/ - -#include "emu.h" -#include "cpu/z180/z180.h" -#include "machine/i8255.h" -#include "sound/ym2413.h" -#include "sound/okim6295.h" -#include "machine/nvram.h" -#include "emupal.h" -#include "screen.h" -#include "speaker.h" -#include "tilemap.h" - - -class igs009_state : public driver_device -{ -public: - igs009_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") - , m_gfxdecode(*this, "gfxdecode") - , m_screen(*this, "screen") - , m_palette(*this, "palette") - , m_bg_scroll(*this, "bg_scroll") - , m_reel1_ram(*this, "reel1_ram") - , m_reel2_ram(*this, "reel2_ram") - , m_reel3_ram(*this, "reel3_ram") - , m_reel4_ram(*this, "reel4_ram") - , m_bg_scroll2(*this, "bg_scroll2") - , m_fg_tile_ram(*this, "fg_tile_ram") - , m_fg_color_ram(*this, "fg_color_ram") - , m_leds(*this, "led%u", 0U) - { } - - void gp98(machine_config &config); - void jingbell(machine_config &config); - - void init_jingbell(); - void init_jingbelli(); - - DECLARE_READ_LINE_MEMBER(hopper_r); - -private: - DECLARE_WRITE8_MEMBER(reel1_ram_w); - DECLARE_WRITE8_MEMBER(reel2_ram_w); - DECLARE_WRITE8_MEMBER(reel3_ram_w); - DECLARE_WRITE8_MEMBER(reel4_ram_w); - DECLARE_WRITE8_MEMBER(bg_scroll_w); - DECLARE_WRITE8_MEMBER(fg_tile_w); - DECLARE_WRITE8_MEMBER(fg_color_w); - DECLARE_WRITE8_MEMBER(nmi_and_coins_w); - DECLARE_WRITE8_MEMBER(video_and_leds_w); - DECLARE_WRITE8_MEMBER(leds_w); - DECLARE_WRITE8_MEMBER(magic_w); - DECLARE_READ8_MEMBER(magic_r); - - void show_out(); - DECLARE_WRITE_LINE_MEMBER(vblank_irq); - - TILE_GET_INFO_MEMBER(get_jingbell_reel1_tile_info); - TILE_GET_INFO_MEMBER(get_gp98_reel1_tile_info); - TILE_GET_INFO_MEMBER(get_jingbell_reel2_tile_info); - TILE_GET_INFO_MEMBER(get_gp98_reel2_tile_info); - TILE_GET_INFO_MEMBER(get_jingbell_reel3_tile_info); - TILE_GET_INFO_MEMBER(get_gp98_reel3_tile_info); - TILE_GET_INFO_MEMBER(get_jingbell_reel4_tile_info); - TILE_GET_INFO_MEMBER(get_gp98_reel4_tile_info); - TILE_GET_INFO_MEMBER(get_fg_tile_info); - - void decrypt_jingbell(); - - DECLARE_VIDEO_START(gp98); - - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void gp98_portmap(address_map &map); - void jingbell_map(address_map &map); - void jingbell_portmap(address_map &map); - - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - - required_device<cpu_device> m_maincpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<screen_device> m_screen; - required_device<palette_device> m_palette; - - required_shared_ptr<uint8_t> m_bg_scroll; - required_shared_ptr<uint8_t> m_reel1_ram; - required_shared_ptr<uint8_t> m_reel2_ram; - required_shared_ptr<uint8_t> m_reel3_ram; - required_shared_ptr<uint8_t> m_reel4_ram; - required_shared_ptr<uint8_t> m_bg_scroll2; - required_shared_ptr<uint8_t> m_fg_tile_ram; - required_shared_ptr<uint8_t> m_fg_color_ram; - output_finder<7> m_leds; - - tilemap_t *m_reel1_tilemap; - tilemap_t *m_reel2_tilemap; - tilemap_t *m_reel3_tilemap; - tilemap_t *m_reel4_tilemap; - tilemap_t *m_fg_tilemap; - int m_video_enable; - int m_nmi_enable; - int m_hopper; - uint8_t m_out[3]; - uint8_t m_igs_magic[2]; -}; - - -/*************************************************************************** - Video Hardware -***************************************************************************/ - - - -WRITE8_MEMBER(igs009_state::reel1_ram_w) -{ - m_reel1_ram[offset] = data; - m_reel1_tilemap->mark_tile_dirty(offset); -} - -TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel1_tile_info) -{ - int code = m_reel1_ram[tile_index]; - - SET_TILE_INFO_MEMBER(0, - (code)+(((tile_index+1)&0x3)*0x100), - (code & 0x80) ? 0xc : 0, - 0); -} - - -TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel1_tile_info) -{ - int code = m_reel1_ram[tile_index]; - - SET_TILE_INFO_MEMBER(0, - (code*4)+(tile_index&0x3), - 0, - 0); -} - - -WRITE8_MEMBER(igs009_state::reel2_ram_w) -{ - m_reel2_ram[offset] = data; - m_reel2_tilemap->mark_tile_dirty(offset); -} - -TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel2_tile_info) -{ - int code = m_reel2_ram[tile_index]; - - SET_TILE_INFO_MEMBER(0, - (code)+(((tile_index+1)&0x3)*0x100), - (code & 0x80) ? 0xc : 0, - 0); -} - -TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel2_tile_info) -{ - int code = m_reel2_ram[tile_index]; - - SET_TILE_INFO_MEMBER(0, - (code*4)+(tile_index&0x3), - 0, - 0); -} - - - -WRITE8_MEMBER(igs009_state::reel3_ram_w) -{ - m_reel3_ram[offset] = data; - m_reel3_tilemap->mark_tile_dirty(offset); -} - -TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel3_tile_info) -{ - int code = m_reel3_ram[tile_index]; - - SET_TILE_INFO_MEMBER(0, - (code)+(((tile_index+1)&0x3)*0x100), - (code & 0x80) ? 0xc : 0, - 0); -} - -TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel3_tile_info) -{ - int code = m_reel3_ram[tile_index]; - - SET_TILE_INFO_MEMBER(0, - (code*4)+(tile_index&0x3), - 0, - 0); -} - - - -WRITE8_MEMBER(igs009_state::reel4_ram_w) -{ - m_reel4_ram[offset] = data; - m_reel4_tilemap->mark_tile_dirty(offset); -} - -TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel4_tile_info) -{ - int code = m_reel4_ram[tile_index]; - - SET_TILE_INFO_MEMBER(0, - (code)+(((tile_index+1)&0x3)*0x100), - (code & 0x80) ? 0xc : 0, - 0); -} - -TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel4_tile_info) -{ - int code = m_reel4_ram[tile_index]; - - SET_TILE_INFO_MEMBER(0, - (code*4)+(tile_index&0x3), - 0, - 0); -} - - - -WRITE8_MEMBER(igs009_state::bg_scroll_w) -{ - m_bg_scroll[offset] = data; -// bg_tilemap->set_scrolly(offset,data); -} - - -TILE_GET_INFO_MEMBER(igs009_state::get_fg_tile_info) -{ - int code = m_fg_tile_ram[tile_index] | (m_fg_color_ram[tile_index] << 8); - SET_TILE_INFO_MEMBER(1, code, (4*(code >> 14)+3), 0); -} - -WRITE8_MEMBER(igs009_state::fg_tile_w) -{ - m_fg_tile_ram[offset] = data; - m_fg_tilemap->mark_tile_dirty(offset); -} - -WRITE8_MEMBER(igs009_state::fg_color_w) -{ - m_fg_color_ram[offset] = data; - m_fg_tilemap->mark_tile_dirty(offset); -} - -void igs009_state::video_start() -{ - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80,0x20); - m_fg_tilemap->set_transparent_pen(0); - - m_reel1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8); - m_reel2_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel2_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8); - m_reel3_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel3_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8); - m_reel4_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel4_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8); - - m_reel1_tilemap->set_scroll_cols(128); - m_reel2_tilemap->set_scroll_cols(128); - m_reel3_tilemap->set_scroll_cols(128); - m_reel4_tilemap->set_scroll_cols(128); -} - - -VIDEO_START_MEMBER(igs009_state,gp98) -{ - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80,0x20); - m_fg_tilemap->set_transparent_pen(0); - - m_reel1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8); - m_reel2_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel2_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8); - m_reel3_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel3_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8); - m_reel4_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel4_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8); - - m_reel1_tilemap->set_scroll_cols(128); - m_reel2_tilemap->set_scroll_cols(128); - m_reel3_tilemap->set_scroll_cols(128); - m_reel4_tilemap->set_scroll_cols(128); -} - - -uint32_t igs009_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - int layers_ctrl = m_video_enable ? -1 : 0; - -#ifdef MAME_DEBUG - if (machine().input().code_pressed(KEYCODE_Z)) - { - int mask = 0; - if (machine().input().code_pressed(KEYCODE_Q)) mask |= 1; - if (machine().input().code_pressed(KEYCODE_W)) mask |= 2; - if (machine().input().code_pressed(KEYCODE_A)) mask |= 4; - if (mask != 0) layers_ctrl &= mask; - } -#endif - - if (layers_ctrl & 1) - { - int zz,i; - int startclipmin = 0; - const rectangle &visarea = screen.visible_area(); - - for (i= 0;i < 0x80;i++) - { - m_reel1_tilemap->set_scrolly(i, m_bg_scroll[i]*2); - m_reel2_tilemap->set_scrolly(i, m_bg_scroll[i+0x80]*2); - m_reel3_tilemap->set_scrolly(i, m_bg_scroll[i+0x100]*2); - m_reel4_tilemap->set_scrolly(i, m_bg_scroll[i+0x180]*2); - } - - for (zz=0;zz<0x80-8;zz++) // -8 because of visible area (2*8 = 16) - { - rectangle clip; - int rowenable = m_bg_scroll2[zz]; - - /* draw top of screen */ - clip.set(visarea.min_x, visarea.max_x, startclipmin, startclipmin+2); - - bitmap.fill(m_palette->pen(rowenable), clip); - - if (rowenable==0) - { // 0 and 1 are the same? or is there a global switchoff? - m_reel1_tilemap->draw(screen, bitmap, clip, 0,0); - } - else if (rowenable==1) - { - m_reel2_tilemap->draw(screen, bitmap, clip, 0,0); - } - else if (rowenable==2) - { - m_reel3_tilemap->draw(screen, bitmap, clip, 0,0); - } - else if (rowenable==3) - { - m_reel4_tilemap->draw(screen, bitmap, clip, 0,0); - } - - - startclipmin+=2; - } - - } - else bitmap.fill(m_palette->black_pen(), cliprect); - - - if (layers_ctrl & 2) m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - - return 0; -} - -/*************************************************************************** - Memory Maps -***************************************************************************/ - - -READ_LINE_MEMBER(igs009_state::hopper_r) -{ - return m_hopper && !(m_screen->frame_number()%10); -} - - -void igs009_state::show_out() -{ -#ifdef MAME_DEBUG - popmessage("%02x %02x %02x", m_out[0], m_out[1], m_out[2]); -#endif -} - -WRITE8_MEMBER(igs009_state::nmi_and_coins_w) -{ - if ((m_nmi_enable ^ data) & (~0xdd)) - { - logerror("PC %06X: nmi_and_coins = %02x\n",m_maincpu->pc(),data); -// popmessage("%02x",data); - } - - machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin_a - machine().bookkeeping().coin_counter_w(1, data & 0x04); // coin_c - machine().bookkeeping().coin_counter_w(2, data & 0x08); // key in - machine().bookkeeping().coin_counter_w(3, data & 0x10); // coin out mech - - m_leds[6] = BIT(data, 6); // led for coin out / m_hopper active - - m_nmi_enable = data; // data & 0x80 // nmi enable? - - m_out[0] = data; - show_out(); -} - -WRITE8_MEMBER(igs009_state::video_and_leds_w) -{ - m_leds[4] = BIT(data, 0); // start? - m_leds[5] = BIT(data, 2); // l_bet? - - m_video_enable = data & 0x40; - m_hopper = (~data)& 0x80; - - m_out[1] = data; - show_out(); -} - -WRITE8_MEMBER(igs009_state::leds_w) -{ - m_leds[0] = BIT(data, 0); // stop_1 - m_leds[1] = BIT(data, 1); // stop_2 - m_leds[2] = BIT(data, 2); // stop_3 - m_leds[3] = BIT(data, 3); // stop - // data & 0x10? - - m_out[2] = data; - show_out(); -} - - -WRITE8_MEMBER(igs009_state::magic_w) -{ - m_igs_magic[offset] = data; - - if (offset == 0) - return; - - switch(m_igs_magic[0]) - { - case 0x01: - break; - - default: -// popmessage("magic %x <- %04x",m_igs_magic[0],data); - logerror("%06x: warning, writing to igs_magic %02x = %02x\n", m_maincpu->pc(), m_igs_magic[0], data); - } -} - -READ8_MEMBER(igs009_state::magic_r) -{ - switch(m_igs_magic[0]) - { - case 0x00: - if ( !(m_igs_magic[1] & 0x01) ) return ioport("DSW1")->read(); - if ( !(m_igs_magic[1] & 0x02) ) return ioport("DSW2")->read(); - if ( !(m_igs_magic[1] & 0x04) ) return ioport("DSW3")->read(); - if ( !(m_igs_magic[1] & 0x08) ) return ioport("DSW4")->read(); - if ( !(m_igs_magic[1] & 0x10) ) return ioport("DSW5")->read(); - logerror("%06x: warning, reading dsw with igs_magic[1] = %02x\n", m_maincpu->pc(), m_igs_magic[1]); - break; - - default: - logerror("%06x: warning, reading with igs_magic = %02x\n", m_maincpu->pc(), m_igs_magic[0]); - } - - return 0; -} - - -void igs009_state::jingbell_map(address_map &map) -{ - map(0x00000, 0x0f3ff).rom(); - map(0x0f400, 0x0ffff).ram().share("nvram"); -} - -void igs009_state::jingbell_portmap(address_map &map) -{ - map(0x0000, 0x003f).ram(); // Z180 internal regs - - map(0x1000, 0x11ff).ram().w(FUNC(igs009_state::bg_scroll_w)).share("bg_scroll"); - - map(0x2000, 0x23ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); - map(0x2400, 0x27ff).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext"); - - map(0x3000, 0x33ff).ram().w(FUNC(igs009_state::reel1_ram_w)).share("reel1_ram"); - map(0x3400, 0x37ff).ram().w(FUNC(igs009_state::reel2_ram_w)).share("reel2_ram"); - map(0x3800, 0x3bff).ram().w(FUNC(igs009_state::reel3_ram_w)).share("reel3_ram"); - map(0x3c00, 0x3fff).ram().w(FUNC(igs009_state::reel4_ram_w)).share("reel4_ram"); - - map(0x4000, 0x407f).ram().share("bg_scroll2"); - - map(0x5000, 0x5fff).ram().w(FUNC(igs009_state::fg_tile_w)).share("fg_tile_ram"); - - map(0x6480, 0x6483).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); /* NMI and coins (w), service (r), coins (r) */ - map(0x6490, 0x6493).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); /* buttons 1 (r), video and leds (w), leds (w) */ - - map(0x64a0, 0x64a0).portr("BUTTONS2"); - - map(0x64b0, 0x64b1).w("ymsnd", FUNC(ym2413_device::write)); - - map(0x64c0, 0x64c0).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - - map(0x64d0, 0x64d1).rw(FUNC(igs009_state::magic_r), FUNC(igs009_state::magic_w)); // DSW1-5 - - map(0x7000, 0x7fff).ram().w(FUNC(igs009_state::fg_color_w)).share("fg_color_ram"); - - map(0x8000, 0xffff).rom().region("data", 0); -} - - -void igs009_state::gp98_portmap(address_map &map) -{ - map(0x0000, 0x003f).ram(); // Z180 internal regs - - map(0x1000, 0x11ff).ram().w(FUNC(igs009_state::bg_scroll_w)).share("bg_scroll"); - - map(0x2000, 0x23ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); - map(0x2400, 0x27ff).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext"); - - map(0x3000, 0x33ff).ram().w(FUNC(igs009_state::reel1_ram_w)).share("reel1_ram"); - map(0x3400, 0x37ff).ram().w(FUNC(igs009_state::reel2_ram_w)).share("reel2_ram"); - map(0x3800, 0x3bff).ram().w(FUNC(igs009_state::reel3_ram_w)).share("reel3_ram"); - map(0x3c00, 0x3fff).ram().w(FUNC(igs009_state::reel4_ram_w)).share("reel4_ram"); - - map(0x4000, 0x407f).ram().share("bg_scroll2"); - - map(0x5000, 0x5fff).ram().w(FUNC(igs009_state::fg_tile_w)).share("fg_tile_ram"); - - // seems to lack PPI devices... - map(0x6480, 0x6480).w(FUNC(igs009_state::nmi_and_coins_w)); - map(0x6481, 0x6481).portr("SERVICE"); - map(0x6482, 0x6482).portr("COINS"); - map(0x6490, 0x6490).portr("BUTTONS1"); - map(0x6491, 0x6491).w(FUNC(igs009_state::video_and_leds_w)); - map(0x6492, 0x6492).w(FUNC(igs009_state::leds_w)); - map(0x64a0, 0x64a0).portr("BUTTONS2"); - - map(0x64b0, 0x64b1).w("ymsnd", FUNC(ym2413_device::write)); - - map(0x64c0, 0x64c0).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - - map(0x64d0, 0x64d1).rw(FUNC(igs009_state::magic_r), FUNC(igs009_state::magic_w)); // DSW1-5 - - map(0x7000, 0x7fff).ram().w(FUNC(igs009_state::fg_color_w)).share("fg_color_ram"); - - map(0x8000, 0xffff).rom().region("data", 0); -} - - -/*************************************************************************** - Input Ports -***************************************************************************/ - -static INPUT_PORTS_START( jingbell ) - PORT_START("DSW1") - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW1:1") - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, "W-Up Bonus" ) PORT_DIPLOCATION("DSW1:2") - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "Min Bet" ) PORT_DIPLOCATION("DSW1:3") - PORT_DIPSETTING( 0x04, "1" ) - PORT_DIPSETTING( 0x00, "8" ) - PORT_DIPNAME( 0x08, 0x08, "Spin Speed" ) PORT_DIPLOCATION("DSW1:4") - PORT_DIPSETTING( 0x08, "Slow" ) - PORT_DIPSETTING( 0x00, "Quick" ) - PORT_DIPNAME( 0x10, 0x00, "Strip Girl" ) PORT_DIPLOCATION("DSW1:5") - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "Payout Mode" ) PORT_DIPLOCATION("DSW1:6") - PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x00, "Auto" ) - PORT_DIPNAME( 0xc0, 0xc0, "Player's Panel" ) PORT_DIPLOCATION("DSW1:7,8") - PORT_DIPSETTING( 0x00, "Type A" ) - PORT_DIPSETTING( 0xc0, "Type A" ) - PORT_DIPSETTING( 0x80, "Type B" ) - PORT_DIPSETTING( 0x40, "Type C" ) - - PORT_START("DSW2") - PORT_DIPNAME( 0x07, 0x07, "Main Game Rate (%)" ) PORT_DIPLOCATION("DSW2:1,2,3") - PORT_DIPSETTING( 0x07, "55" ) - PORT_DIPSETTING( 0x06, "60" ) - PORT_DIPSETTING( 0x05, "65" ) - PORT_DIPSETTING( 0x04, "70" ) - PORT_DIPSETTING( 0x03, "75" ) - PORT_DIPSETTING( 0x02, "80" ) - PORT_DIPSETTING( 0x01, "85" ) - PORT_DIPSETTING( 0x00, "90" ) - PORT_DIPNAME( 0x38, 0x38, "W-Up Chance (%)" ) PORT_DIPLOCATION("DSW2:4,5,6") - PORT_DIPSETTING( 0x38, "93" ) - PORT_DIPSETTING( 0x30, "94" ) - PORT_DIPSETTING( 0x28, "95" ) - PORT_DIPSETTING( 0x20, "96" ) - PORT_DIPSETTING( 0x18, "97" ) - PORT_DIPSETTING( 0x10, "98" ) - PORT_DIPSETTING( 0x08, "99" ) - PORT_DIPSETTING( 0x00, "100" ) - PORT_DIPNAME( 0xc0, 0xc0, "Key In Limit" ) PORT_DIPLOCATION("DSW2:7,8") - PORT_DIPSETTING( 0xc0, "1k" ) - PORT_DIPSETTING( 0x80, "3k" ) - PORT_DIPSETTING( 0x40, "5k" ) - PORT_DIPSETTING( 0x00, "10k" ) - - PORT_START("DSW3") - PORT_DIPNAME( 0x07, 0x07, "Key In Rate" ) PORT_DIPLOCATION("DSW3:1,2,3") - PORT_DIPSETTING( 0x07, "1" ) - PORT_DIPSETTING( 0x06, "5" ) - PORT_DIPSETTING( 0x05, "10" ) - PORT_DIPSETTING( 0x04, "30" ) - PORT_DIPSETTING( 0x03, "50" ) - PORT_DIPSETTING( 0x02, "100" ) - PORT_DIPSETTING( 0x01, "200" ) - PORT_DIPSETTING( 0x00, "500" ) - PORT_DIPNAME( 0x38, 0x38, "Coin 1 Rate" ) PORT_DIPLOCATION("DSW3:4,5,6") - PORT_DIPSETTING( 0x38, "1" ) - PORT_DIPSETTING( 0x30, "2" ) - PORT_DIPSETTING( 0x28, "5" ) - PORT_DIPSETTING( 0x20, "10" ) - PORT_DIPSETTING( 0x18, "20" ) - PORT_DIPSETTING( 0x10, "25" ) - PORT_DIPSETTING( 0x08, "50" ) - PORT_DIPSETTING( 0x00, "100" ) - PORT_DIPNAME( 0xc0, 0xc0, "System Limit" ) PORT_DIPLOCATION("DSW3:7,8") - PORT_DIPSETTING( 0xc0, "5k" ) - PORT_DIPSETTING( 0x80, "10k" ) - PORT_DIPSETTING( 0x40, "30k" ) - PORT_DIPSETTING( 0x00, "Unlimited" ) - - PORT_START("DSW4") - PORT_DIPNAME( 0x01, 0x01, "Min Play For Fever" ) PORT_DIPLOCATION("DSW4:1") - PORT_DIPSETTING( 0x01, "8" ) - PORT_DIPSETTING( 0x00, "16" ) - PORT_DIPNAME( 0x02, 0x02, "Max Bet" ) PORT_DIPLOCATION("DSW4:2") - PORT_DIPSETTING( 0x02, "16" ) - PORT_DIPSETTING( 0x00, "32" ) - PORT_DIPNAME( 0x1c, 0x1c, "Coin 2 Rate" ) PORT_DIPLOCATION("DSW4:3,4,5") - PORT_DIPSETTING( 0x1c, "1" ) - PORT_DIPSETTING( 0x18, "2" ) - PORT_DIPSETTING( 0x14, "5" ) - PORT_DIPSETTING( 0x10, "10" ) - PORT_DIPSETTING( 0x0c, "20" ) - PORT_DIPSETTING( 0x08, "40" ) - PORT_DIPSETTING( 0x04, "50" ) - PORT_DIPSETTING( 0x00, "100" ) - PORT_DIPNAME( 0x60, 0x60, "Key Out Rate" ) PORT_DIPLOCATION("DSW4:6,7") - PORT_DIPSETTING( 0x60, "1" ) - PORT_DIPSETTING( 0x40, "10" ) - PORT_DIPSETTING( 0x20, "50" ) - PORT_DIPSETTING( 0x00, "100" ) - PORT_DIPNAME( 0x80, 0x80, "Play Line" ) PORT_DIPLOCATION("DSW4:8") - PORT_DIPSETTING( 0x80, "8" ) - PORT_DIPSETTING( 0x00, "16" ) - -// These are from the manual for v201us - DSW1-DSW4 match but DSW5 doesn't seem to match or actuallly do anything - PORT_START("DSW5") - PORT_DIPNAME( 0x03, 0x00, "Maximum Play" ) PORT_DIPLOCATION("DSW5:1,2") - PORT_DIPSETTING( 0x00, "64" ) - PORT_DIPSETTING( 0x01, "32" ) - PORT_DIPSETTING( 0x02, "16" ) - PORT_DIPSETTING( 0x03, "8" ) - PORT_DIPNAME( 0x04, 0x04, "Skill Stop" ) PORT_DIPLOCATION("DSW5:3") - PORT_DIPSETTING( 0x04, "On" ) - PORT_DIPSETTING( 0x00, "Off" ) - PORT_DIPNAME( 0x08, 0x00, "Hands Count" ) PORT_DIPLOCATION("DSW5:4") - PORT_DIPSETTING( 0x08, "No" ) - PORT_DIPSETTING( 0x00, "Yes" ) - PORT_DIPNAME( 0x30, 0x00, "Hands Coin Rate" ) PORT_DIPLOCATION("DSW5:5,6") - PORT_DIPSETTING( 0x00, "25" ) - PORT_DIPSETTING( 0x20, "10" ) - PORT_DIPSETTING( 0x10, "5" ) - PORT_DIPSETTING( 0x30, "1" ) - PORT_DIPNAME( 0x40, 0x40, "Hands Coin Value" ) PORT_DIPLOCATION("DSW5:7") - PORT_DIPSETTING( 0x00, "40" ) - PORT_DIPSETTING( 0x40, "20" ) - PORT_DIPNAME( 0x80, 0x80, "Unused" ) PORT_DIPLOCATION("DSW5:8") - PORT_DIPSETTING( 0x00, "On" ) - PORT_DIPSETTING( 0x80, "Off" ) - - PORT_START("SERVICE") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Memory Clear") // stats, memory - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(igs009_state, hopper_r) // hopper sensor - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_NAME("Pay Out") - PORT_SERVICE_NO_TOGGLE( 0x20, IP_ACTIVE_LOW ) // test (press during boot) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Records") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("COINS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Key Down") - 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("BUTTONS1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SLOT_STOP_ALL ) - 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("BUTTONS2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Half D-Up Bet") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_NAME("Small") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Left Bet / 2X D-Up Bet") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Right Bet / D-Up Bet") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Big") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) -INPUT_PORTS_END - - -/*************************************************************************** - Graphics Layout -***************************************************************************/ - -static const gfx_layout layout_8x8x6 = -{ - 8, 8, - RGN_FRAC(1, 3), - 6, - { RGN_FRAC(0,3)+8,RGN_FRAC(0,3)+0, - RGN_FRAC(1,3)+8,RGN_FRAC(1,3)+0, - RGN_FRAC(2,3)+8,RGN_FRAC(2,3)+0 }, - { STEP8(0,1) }, - { STEP8(0,2*8) }, - 8*8*2 -}; - -static const gfx_layout layout_8x32x6 = -{ - 8, 32, - RGN_FRAC(1, 3), - 6, - { RGN_FRAC(0,3)+8,RGN_FRAC(0,3)+0, - RGN_FRAC(1,3)+8,RGN_FRAC(1,3)+0, - RGN_FRAC(2,3)+8,RGN_FRAC(2,3)+0 }, - { STEP8(0,1) }, - { STEP32(0,2*8) }, - 8*32*2 -}; - -static GFXDECODE_START( gfx_jingbell ) - GFXDECODE_ENTRY( "reels", 0, layout_8x32x6, 0, 16 ) - GFXDECODE_ENTRY( "tiles", 0, layout_8x8x6, 0, 16 ) -GFXDECODE_END - -static const gfx_layout tiles8x8_layout = -{ - 8,8, - RGN_FRAC(1,3), - 6, - { RGN_FRAC(2,3)+0, RGN_FRAC(2,3)+1, RGN_FRAC(1,3)+0, RGN_FRAC(1,3)+1, RGN_FRAC(0,3)+0, RGN_FRAC(0,3)+1 }, - { 8,10,12,14, 0, 2, 4, 6, }, - { STEP8(0,16) }, - 16*8 -}; - -static const gfx_layout tiles8x32_layout = -{ - 8,32, - RGN_FRAC(1,3), - 6, - { RGN_FRAC(2,3)+0, RGN_FRAC(2,3)+1, RGN_FRAC(1,3)+0, RGN_FRAC(1,3)+1, RGN_FRAC(0,3)+0, RGN_FRAC(0,3)+1 }, - { 8,10,12,14, 0, 2, 4, 6, }, - { STEP32(0,16) }, - 32*16 -}; - -static GFXDECODE_START( gfx_gp98 ) - GFXDECODE_ENTRY( "reels", 0, tiles8x32_layout, 0, 16 ) - GFXDECODE_ENTRY( "tiles", 0, tiles8x8_layout, 0, 16 ) -GFXDECODE_END - - -/*************************************************************************** - Machine Drivers -***************************************************************************/ - -void igs009_state::machine_start() -{ - m_leds.resolve(); - - - save_item(NAME(m_video_enable)); - save_item(NAME(m_nmi_enable)); - save_item(NAME(m_hopper)); - save_item(NAME(m_out)); - save_item(NAME(m_igs_magic)); -} - -void igs009_state::machine_reset() -{ - m_nmi_enable = 0; - m_hopper = 0; - m_video_enable = 1; -} - -WRITE_LINE_MEMBER(igs009_state::vblank_irq) -{ - if (state && BIT(m_nmi_enable, 7)) - m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); -} - -void igs009_state::jingbell(machine_config &config) -{ - /* basic machine hardware */ - Z180(config, m_maincpu, XTAL(12'000'000) / 2); /* HD64180RP8, 8 MHz? */ - m_maincpu->set_addrmap(AS_PROGRAM, &igs009_state::jingbell_map); - m_maincpu->set_addrmap(AS_IO, &igs009_state::jingbell_portmap); - - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - - i8255_device &ppi0(I8255A(config, "ppi8255_0")); - ppi0.out_pa_callback().set(FUNC(igs009_state::nmi_and_coins_w)); - ppi0.in_pb_callback().set_ioport("SERVICE"); - ppi0.in_pc_callback().set_ioport("COINS"); - - i8255_device &ppi1(I8255A(config, "ppi8255_1")); - ppi1.in_pa_callback().set_ioport("BUTTONS1"); - ppi1.out_pb_callback().set(FUNC(igs009_state::video_and_leds_w)); - ppi1.out_pc_callback().set(FUNC(igs009_state::leds_w)); - - /* video hardware */ - SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(60); - m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); - m_screen->set_size(512, 256); - m_screen->set_visarea(0, 512-1, 0, 256-16-1); - m_screen->set_screen_update(FUNC(igs009_state::screen_update)); - m_screen->set_palette(m_palette); - m_screen->screen_vblank().set(FUNC(igs009_state::vblank_irq)); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_jingbell); - PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x400); - - /* sound hardware */ - SPEAKER(config, "mono").front_center(); - YM2413(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0); - - OKIM6295(config, "oki", XTAL(12'000'000) / 12, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); -} - - -void igs009_state::gp98(machine_config &config) -{ - jingbell(config); - /* basic machine hardware */ - m_maincpu->set_addrmap(AS_IO, &igs009_state::gp98_portmap); - - m_gfxdecode->set_info(gfx_gp98); - - MCFG_VIDEO_START_OVERRIDE(igs009_state,gp98) -} - - -/*************************************************************************** - - Jingle Bell - IGS, 1997. - - English versions. - - 1x HD64180RP8 (u18) - 2x NEC D8255AC-2 (u19, u20) - 1x custom IGS 009 F56D 246 (u22) - 1x YM2413 (u45) - 1x AR17961-AP0640 (u46)(sound equivalent to OKI M6295) - - 4x 27C512 (1, 2, 3, V) - 3x 27C2001 (4, 5, 6) - 1x 27C256 (7) - 1x 27C1001 (sp) - - 1x UMC UM6264B-10L (u42) - 2x UMC UM6164DK-12 (u1, u2) - - 1x crystal 12.000 MHz. - 1x crystal 3.579545 MHz. - - 1x 38x2 edge connector. - 2x 10x2 edge connectors. - 1x switch. - 1x 3.6 V. lithium battery. - 5x 8 DIP switches banks. - -***************************************************************************/ - -/* Jingle Bells (V157 US) - Original IGS. - For amusement. -*/ -ROM_START( jingbell ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "27c512_v157_us.u44", 0x00000, 0x10000, CRC(37f95b60) SHA1(db2022802ce553ce7a0e8403408f3194b2f10007) ) - - ROM_REGION( 0x8000, "data", 0 ) - ROM_LOAD( "27c256_v157_us.u43", 0x0000, 0x8000, CRC(a7affa15) SHA1(f9d33e32b57ad267d383e075663994e0af0b3016) ) - - ROM_REGION( 0x30000, "reels", 0 ) - ROM_LOAD( "27c512_v157_us.u17", 0x00000, 0x10000, CRC(cadd7910) SHA1(aa514ddb29c8c9a77478d56bea4ae71995fdd518) ) - ROM_LOAD( "27c512_v157_us.u16", 0x10000, 0x10000, CRC(a9e1f5aa) SHA1(68d7f4e9e9a5bbce0904e406ee6fe82e9e52a9ba) ) - ROM_LOAD( "27c512_v157_us.u15", 0x20000, 0x10000, CRC(865b7d3a) SHA1(c1dff3a27d747ee499aaee0c4468534f0249a3e5) ) - - ROM_REGION( 0xc0000, "tiles", 0 ) - ROM_LOAD( "27c2001_v157_us.u25", 0x00000, 0x40000, CRC(daa56ce5) SHA1(4f14a8efac16b03bd14dd26d586bcb8d5bef65c1) ) - ROM_LOAD( "27c2001_v157_us.u24", 0x40000, 0x40000, CRC(b10b38e1) SHA1(397b2d899e47c6249fbbb6e6262d0390d9b796e6) ) - ROM_LOAD( "27c2001_v157_us.u23", 0x80000, 0x40000, CRC(a3304b5a) SHA1(bf51cb1f728758d50ce27275aa19ef649f6b34b9) ) - - ROM_REGION( 0x40000, "oki", 0 ) - ROM_LOAD( "mx29f001t_v157_us_sp.u38", 0x00000, 0x20000, CRC(a42d73b1) SHA1(93157e9630d5c8bb34c71186415d0aa8c5d51951) ) -ROM_END - -/* Jingle Bells (V155 EU) - Original IGS. - For amusement. -*/ -ROM_START( jingbella ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "27c512_v155.u44", 0x00000, 0x10000, CRC(0813d12b) SHA1(4c35b656d1e54619bbfd26cbc017eba336e6abda) ) - - ROM_REGION( 0x8000, "data", 0 ) - ROM_LOAD( "27c256_v155.u43", 0x0000, 0x8000, CRC(a7affa15) SHA1(f9d33e32b57ad267d383e075663994e0af0b3016) ) - - ROM_REGION( 0x30000, "reels", 0 ) - ROM_LOAD( "27c512_v155.u17", 0x00000, 0x10000, CRC(cadd7910) SHA1(aa514ddb29c8c9a77478d56bea4ae71995fdd518) ) - ROM_LOAD( "27c512_v155.u16", 0x10000, 0x10000, CRC(a9e1f5aa) SHA1(68d7f4e9e9a5bbce0904e406ee6fe82e9e52a9ba) ) - ROM_LOAD( "27c512_v155.u15", 0x20000, 0x10000, CRC(865b7d3a) SHA1(c1dff3a27d747ee499aaee0c4468534f0249a3e5) ) - - ROM_REGION( 0xc0000, "tiles", 0 ) - ROM_LOAD( "27c2001_v155.u25", 0x00000, 0x40000, CRC(daa56ce5) SHA1(4f14a8efac16b03bd14dd26d586bcb8d5bef65c1) ) - ROM_LOAD( "27c2001_v155.u24", 0x40000, 0x40000, CRC(b10b38e1) SHA1(397b2d899e47c6249fbbb6e6262d0390d9b796e6) ) - ROM_LOAD( "27c2001_v155.u23", 0x80000, 0x40000, CRC(a3304b5a) SHA1(bf51cb1f728758d50ce27275aa19ef649f6b34b9) ) - - ROM_REGION( 0x40000, "oki", 0 ) - ROM_LOAD( "27c1001_v155_sp.u38", 0x00000, 0x20000, CRC(a42d73b1) SHA1(93157e9630d5c8bb34c71186415d0aa8c5d51951) ) -ROM_END - -/* Jingle Bells (V153 EU) - Original IGS. - For amusement. -*/ -ROM_START( jingbellb ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "27c512_v153.u44", 0x00000, 0x10000, CRC(fd3bc092) SHA1(a92dc9bc15d7a4816887d66d46cea925d230c5b8) ) - - ROM_REGION( 0x8000, "data", 0 ) - ROM_LOAD( "27c256_v153.u43", 0x0000, 0x8000, CRC(a7affa15) SHA1(f9d33e32b57ad267d383e075663994e0af0b3016) ) - - ROM_REGION( 0x30000, "reels", 0 ) - ROM_LOAD( "27c512_v153.u17", 0x00000, 0x10000, CRC(cadd7910) SHA1(aa514ddb29c8c9a77478d56bea4ae71995fdd518) ) - ROM_LOAD( "27c512_v153.u16", 0x10000, 0x10000, CRC(a9e1f5aa) SHA1(68d7f4e9e9a5bbce0904e406ee6fe82e9e52a9ba) ) - ROM_LOAD( "27c512_v153.u15", 0x20000, 0x10000, CRC(865b7d3a) SHA1(c1dff3a27d747ee499aaee0c4468534f0249a3e5) ) - - ROM_REGION( 0xc0000, "tiles", 0 ) - ROM_LOAD( "27c2001_v153.u25", 0x00000, 0x40000, CRC(daa56ce5) SHA1(4f14a8efac16b03bd14dd26d586bcb8d5bef65c1) ) - ROM_LOAD( "27c2001_v153.u24", 0x40000, 0x40000, CRC(b10b38e1) SHA1(397b2d899e47c6249fbbb6e6262d0390d9b796e6) ) - ROM_LOAD( "27c2001_v153.u23", 0x80000, 0x40000, CRC(a3304b5a) SHA1(bf51cb1f728758d50ce27275aa19ef649f6b34b9) ) - - ROM_REGION( 0x40000, "oki", 0 ) - ROM_LOAD( "27c1001_v153_sp.u38", 0x00000, 0x20000, CRC(a42d73b1) SHA1(93157e9630d5c8bb34c71186415d0aa8c5d51951) ) -ROM_END - -/* Jingle Bells (V141 EU) - Original IGS. - For amusement. -*/ -ROM_START( jingbellc ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "27c512_v141.u44", 0x00000, 0x10000, CRC(6997a903) SHA1(991508d85e55a3c6f811070352e06ae6bf65cc2e) ) - - ROM_REGION( 0x8000, "data", 0 ) - ROM_LOAD( "27c256_v141.u43", 0x0000, 0x8000, CRC(a7affa15) SHA1(f9d33e32b57ad267d383e075663994e0af0b3016) ) - - ROM_REGION( 0x30000, "reels", 0 ) - ROM_LOAD( "27c512_v141.u17", 0x00000, 0x10000, CRC(cadd7910) SHA1(aa514ddb29c8c9a77478d56bea4ae71995fdd518) ) - ROM_LOAD( "27c512_v141.u16", 0x10000, 0x10000, CRC(a9e1f5aa) SHA1(68d7f4e9e9a5bbce0904e406ee6fe82e9e52a9ba) ) - ROM_LOAD( "27c512_v141.u15", 0x20000, 0x10000, CRC(865b7d3a) SHA1(c1dff3a27d747ee499aaee0c4468534f0249a3e5) ) - - ROM_REGION( 0xc0000, "tiles", 0 ) - ROM_LOAD( "27c2001_v141.u25", 0x00000, 0x40000, CRC(f53bac7e) SHA1(f4375da0780fba59fcb65e24a33099af35e4d286) ) - ROM_LOAD( "27c2001_v141.u24", 0x40000, 0x40000, CRC(bddd6001) SHA1(2a6395e9593352d3ea2d477a7f41805f389c9c50) ) - ROM_LOAD( "27c2001_v141.u23", 0x80000, 0x40000, CRC(e8322c75) SHA1(c3385538fb673a4ab14c315ce8bce792eb264ec7) ) - - ROM_REGION( 0x40000, "oki", 0 ) - ROM_LOAD( "27c1001_v141_sp.u38", 0x00000, 0x20000, CRC(a42d73b1) SHA1(93157e9630d5c8bb34c71186415d0aa8c5d51951) ) -ROM_END - -/*************************************************************************** - -Jingle Bell -Italy, V133I -(C) IGS ("COPYRIGHT 1995" in ROM, "FEB. 23 1998" on sticker) - -CPU: - 1x HD64180RP8 (u18)(main) - 2x NEC D8255AC (u19,u20)(main) - 1x custom IGS009-F56D246 (u22) - 1x U3567HX881 (u45)(sound equivalent to ym2413) - 1x AR17961-AP0848 (u46)(sound equivalent to m6295) - 1x oscillator 12.000 - 1x oscillator 3.579545 - -ROMs: - 3x M27C512 (1,2,3) - 1x LE27C2001F (4) - 2x MX27C2000 (5,6) - 1x D27256 (7) - 1x MX27C512 (v) - 1x NM27C010 (sp) - 2x PALCE16V8H (read protected) - 1x PALCE22V10H (read protected) - 1x PALCE22V10H (dumped) - -Notes: - 1x 38x2 edge connector - 1x 10x2 edge connector - 1x pushbutton - 1x battery - 5x 8x2 switches dip - -12/02/2008 f205v - -***************************************************************************/ - -ROM_START( jingbelli ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "jinglev133i.u44", 0x00000, 0x10000, CRC(df60dc39) SHA1(ff57afd50c045b621395353fdc50ffd1e1b65e9e) ) - - ROM_REGION( 0x8000, "data", 0 ) - ROM_LOAD( "jingle133i7.u43", 0x0000, 0x8000, CRC(a7affa15) SHA1(f9d33e32b57ad267d383e075663994e0af0b3016) ) - - ROM_REGION( 0x30000, "reels", 0 ) - ROM_LOAD( "jingle133i1.u17", 0x00000, 0x10000, CRC(cadd7910) SHA1(aa514ddb29c8c9a77478d56bea4ae71995fdd518) ) - ROM_LOAD( "jingle133i2.u16", 0x10000, 0x10000, CRC(a9e1f5aa) SHA1(68d7f4e9e9a5bbce0904e406ee6fe82e9e52a9ba) ) - ROM_LOAD( "jingle133i3.u15", 0x20000, 0x10000, CRC(865b7d3a) SHA1(c1dff3a27d747ee499aaee0c4468534f0249a3e5) ) - - ROM_REGION( 0xc0000, "tiles", 0 ) - ROM_LOAD( "jingle133i4.u25", 0x00000, 0x40000, CRC(7aa1d344) SHA1(141e27df93cb35ab852d9022e0b08bd596f1186b) ) - ROM_LOAD( "jingle133i5.u24", 0x40000, 0x40000, CRC(021261d1) SHA1(5b23f9bd818193c343f9f4c9317955b17efb8cfa) ) - ROM_LOAD( "jingle133i6.u23", 0x80000, 0x40000, CRC(c40228fd) SHA1(4dc05337d64ed2b8d66fc5f0ca8ffbf96799f768) ) - - ROM_REGION( 0x40000, "oki", 0 ) - ROM_LOAD( "jingle133isp.u38", 0x00000, 0x20000, CRC(a42d73b1) SHA1(93157e9630d5c8bb34c71186415d0aa8c5d51951) ) - - ROM_REGION( 0x2dd, "plds",0 ) - ROM_LOAD( "palce16v8h-ch-jin-u12v.u12", 0x000, 0x117, NO_DUMP ) - ROM_LOAD( "palce16v8h-ch-jin-u33v.u33", 0x000, 0x117, NO_DUMP ) - ROM_LOAD( "palce22v10h-ajbu24.u24", 0x000, 0x2dd, CRC(6310f441) SHA1(b610e170ccca1fcb06a57f718ece1408b696ba9c) ) - ROM_LOAD( "palce22v10h-ch-jin-u27.u27", 0x000, 0x2dd, NO_DUMP ) -ROM_END - -void igs009_state::decrypt_jingbell() -{ - uint8_t *rom = (uint8_t *)memregion("maincpu")->base(); - size_t size = memregion("maincpu")->bytes(); - - for (int i=0; i<size; i++) - { - uint8_t x = rom[i]; - if (i & 0x0080) - { - if ((i & 0x0420) == 0x0420) x ^= 0x20; - else x ^= 0x22; - } - else - { - if (i & 0x0200) x ^= 0x02; - else x ^= 0x22; - } - - if ((i & 0x1208) == 0x1208) x ^= 0x01; - - rom[i] = x; - } -} - -void igs009_state::init_jingbelli() -{ - decrypt_jingbell(); - - // protection patch - uint8_t *rom = (uint8_t *)memregion("maincpu")->base(); - rom[0x01f19] = 0x18; -} - -void igs009_state::init_jingbell() -{ - decrypt_jingbell(); - - // protection patch - uint8_t *rom = (uint8_t *)memregion("maincpu")->base(); - rom[0x0e753] = 0x18; -} - -/*************************************************************************** - -Grand Prix '98 - -PCB Layout ----------- - -|-----------------------------------------| -| YM2413 DSW2 DSW4 | -| 3.579545MHz | -| Z180 DSW1 DSW3 | -| PAL | -| PRG | -| 12MHz | -|J 51 |-------| | -|A 6264 |PLCC84 | | -|M 50 |FPGA | | -|M | | | -|A 49 |-------| | -| | -| | -| | -| 6264 | -| | -| 62256 | -|-----------------------------------------| -Z180 @ 12MHz -YM2413 @ 3.579545MHz -VSync 60Hz -HSync 15.35kHz - -***************************************************************************/ - -ROM_START( gp98 ) - ROM_REGION( 0x20000, "maincpu", 0 ) - ROM_LOAD( "prg", 0x00000, 0x20000, CRC(1c02b8cc) SHA1(b8a29cbd96581f8ae1c1028279b8ee703be29f5f) ) - - ROM_REGION( 0x8000, "data", 0 ) - ROM_COPY( "maincpu", 0x18000, 0x00000, 0x8000 ) - - ROM_REGION( 0x180000, "tempgfx", 0 ) // 6bpp (2bpp per rom) font at tile # 0x4000 - ROM_LOAD( "em-03.u49", 0x000000, 0x80000, CRC(f92c510d) SHA1(f8dc4d7d1fdc6f62fcdd86caf8fd703db4b5fb18) ) - ROM_LOAD( "em-02.u50", 0x080000, 0x80000, CRC(48f6190d) SHA1(b430131a258b4e2fc178ac0e3e3f0010a82eac65) ) - ROM_LOAD( "em-01.u51", 0x100000, 0x80000, CRC(30a2ef85) SHA1(38ea637acd83b175eccd2969ef21879265b88992) ) - - ROM_REGION( 0xc0000, "reels", 0 ) - ROM_COPY( "tempgfx", 0x000000, 0x00000, 0x40000 ) - ROM_COPY( "tempgfx", 0x080000, 0x40000, 0x40000 ) - ROM_COPY( "tempgfx", 0x100000, 0x80000, 0x40000 ) - - ROM_REGION( 0xc0000, "tiles", 0 ) - ROM_COPY( "tempgfx", 0x040000, 0x00000, 0x40000 ) - ROM_COPY( "tempgfx", 0x0c0000, 0x40000, 0x40000 ) - ROM_COPY( "tempgfx", 0x140000, 0x80000, 0x40000 ) - - ROM_REGION( 0x40000, "oki", ROMREGION_ERASE00 ) - // no OKI on this -ROM_END - - -/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */ -GAME( 1997, jingbell, 0, jingbell, jingbell, igs009_state, init_jingbell, ROT0, "IGS", "Jingle Bell (US, V157US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1997, jingbella, jingbell, jingbell, jingbell, igs009_state, init_jingbell, ROT0, "IGS", "Jingle Bell (EU, V155UE)", MACHINE_SUPPORTS_SAVE ) // Shows V154UE in test mode! -GAME( 1997, jingbellb, jingbell, jingbell, jingbell, igs009_state, init_jingbell, ROT0, "IGS", "Jingle Bell (EU, V153UE)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, jingbellc, jingbell, jingbell, jingbell, igs009_state, init_jingbelli, ROT0, "IGS", "Jingle Bell (EU, V141UE)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995?, jingbelli, jingbell, jingbell, jingbell, igs009_state, init_jingbelli, ROT0, "IGS", "Jingle Bell (Italy, V133I)", MACHINE_SUPPORTS_SAVE ) -GAME( 1998, gp98, 0, gp98, jingbell, igs009_state, empty_init, ROT0, "Romtec Co. Ltd", "Grand Prix '98 (V100K)", MACHINE_SUPPORTS_SAVE ) |