summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2024-07-23 18:08:10 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2024-07-23 18:08:10 +0200
commit134dc5924ecc254e344433e039226c231f2abb53 (patch)
treea2a90405c7ea2b0e8e1d7330fb6ce602cc298c0d /src
parent7da34d5e7d1c062b894e0c0c5d7fc1d20341898c (diff)
New working clones
------------------ Jingle Bell (v200US) [Ioannis Bampoulas] New systems marked not working ------------------------------ Jungle King 2002 (V209US) [Ioannis Bampoulas] Lucky Cross (V106SA) [Ioannis Bampoulas] Olympic 5 (V112US) [Ioannis Bampoulas] New clones marked not working ----------------------------- Olympic 5 (V107US) [Ioannis Bampoulas]
Diffstat (limited to 'src')
-rw-r--r--src/mame/igs/igs_m027.cpp95
-rw-r--r--src/mame/igs/spoker.cpp323
-rw-r--r--src/mame/mame.lst7
-rw-r--r--src/mame/pacman/pacman.cpp3
4 files changed, 417 insertions, 11 deletions
diff --git a/src/mame/igs/igs_m027.cpp b/src/mame/igs/igs_m027.cpp
index a8b9ad19969..ed0267bc7d9 100644
--- a/src/mame/igs/igs_m027.cpp
+++ b/src/mame/igs/igs_m027.cpp
@@ -71,6 +71,7 @@ public:
void init_mgzz();
void init_mgcs3();
void init_crzybugs();
+ [[maybe_unused]] void init_no_dec();
protected:
virtual void video_start() override;
@@ -512,6 +513,26 @@ ROM_START( oceanpara ) // IGS PCB-0331-01-FG
ROM_LOAD( "igs_w4102.u28", 0x00000, 0x80000, CRC(558cab25) SHA1(0280b37a14589329f0385c048e5742b9e89bd587) ) // same as fruitpar
ROM_END
+// supposedly a reskin of fruitpar / oceanpar, runs on a slightly different PCB (type not readable, seems same as amazonkp)
+ROM_START( luckycrs )
+ ROM_REGION( 0x04000, "maincpu", 0 )
+ // Internal ROM of IGS027A type G ARM based MCU
+ ROM_LOAD( "luckycrs_igs027a", 0x00000, 0x4000, NO_DUMP ) // stickered V21
+
+ ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
+ ROM_LOAD( "luckycross_v-106sa.u23", 0x00000, 0x80000, CRC(5716de00) SHA1(ff68fa93c6801c78f910452c08c5a9c1a089261d) ) // 27C4002
+
+ ROM_REGION( 0x80000, "igs017_igs031:tilemaps", 0 )
+ ROM_LOAD( "luckycross_text_u12.u12", 0x00000, 0x80000, CRC(c03aa300) SHA1(612ab40d507da7614ec288dd2e95aaca4e497e1b) ) // 27C4002
+
+ ROM_REGION( 0x480000, "igs017_igs031:sprites", 0 )
+ ROM_LOAD( "igs_k4101_u13.u13", 0x000000, 0x400000, CRC(84899398) SHA1(badac65af6e03c490798f4368eb2b15db8c590d0) ) // 27C322, FIXED BITS (xxxxxxx0xxxxxxxx)
+ ROM_LOAD( "luckycross_ext_cg_u11.u11", 0x400000, 0x080000, CRC(997cb3cb) SHA1(6ae955abe7888135f9543ddf73ff84c23baf15f1) ) // 27C4002, FIXED BITS (xxxxxxxx0xxxxxxx)
+
+ ROM_REGION( 0x200000, "oki", 0 )
+ ROM_LOAD( "igs_w4102_u37.u37", 0x000000, 0x200000, CRC(114b44ee) SHA1(728ffee34c64edcfef3a46e8be97db60da8a90dc) ) // 27C160, 11xxxxxxxxxxxxxxxxxxx = 0xFF
+ROM_END
+
/***************************************************************************
Amazonia King
@@ -540,8 +561,8 @@ ROM_START( amazonia )
ROM_LOAD( "igs_t2105_cg_v110.u12", 0x000000, 0x80000, CRC(1d4be260) SHA1(6374c61735144b3ff54d5e490f26adac4a10b14d) )
ROM_REGION( 0x480000, "igs017_igs031:sprites", 0 )
- ROM_LOAD( "igs_a2107_cg_v110.u13", 0x000000, 0x400000,CRC(d8dadfd7) SHA1(b40a46d56ff46d91e3377be8616c3eed321f7db4) ) // FIXED BITS (xxxxxxx0xxxxxxxx)
- ROM_LOAD( "amazonia_cg.u11", 0x400000, 0x80000, CRC(2ac2cfd1) SHA1(f8750a4727ddabf1415dab6eaa4a72e60e86e7f1) ) // FIXED BITS (xxxxxxxx0xxxxxxx)
+ ROM_LOAD( "igs_a2107_cg_v110.u13", 0x000000, 0x400000, CRC(d8dadfd7) SHA1(b40a46d56ff46d91e3377be8616c3eed321f7db4) ) // FIXED BITS (xxxxxxx0xxxxxxxx)
+ ROM_LOAD( "amazonia_cg.u11", 0x400000, 0x080000, CRC(2ac2cfd1) SHA1(f8750a4727ddabf1415dab6eaa4a72e60e86e7f1) ) // FIXED BITS (xxxxxxxx0xxxxxxx)
ROM_REGION( 0x80000, "oki", 0 )
ROM_LOAD( "igs_s2102.u28", 0x00000, 0x80000, CRC(90dda82d) SHA1(67fbc1e8d76b85e124136e2f1df09c8b6c5a8f97) )
@@ -559,8 +580,8 @@ ROM_START( amazonkp )
ROM_LOAD( "igs_t2105.u12", 0x000000, 0x80000, CRC(1d4be260) SHA1(6374c61735144b3ff54d5e490f26adac4a10b14d) )
ROM_REGION( 0x480000, "igs017_igs031:sprites", 0 )
- ROM_LOAD( "igs_a2107.u13", 0x000000, 0x400000,CRC(d8dadfd7) SHA1(b40a46d56ff46d91e3377be8616c3eed321f7db4) ) // FIXED BITS (xxxxxxx0xxxxxxxx)
- ROM_LOAD( "ak_plus_ext_cg.u11", 0x400000, 0x80000, CRC(26796bc0) SHA1(bd259fbd05834de3d90af87235f13b467a492fed) ) // FIXED BITS (xxxxxxxx0xxxxxxx)
+ ROM_LOAD( "igs_a2107.u13", 0x000000, 0x400000, CRC(d8dadfd7) SHA1(b40a46d56ff46d91e3377be8616c3eed321f7db4) ) // FIXED BITS (xxxxxxx0xxxxxxxx)
+ ROM_LOAD( "ak_plus_ext_cg.u11", 0x400000, 0x080000, CRC(26796bc0) SHA1(bd259fbd05834de3d90af87235f13b467a492fed) ) // FIXED BITS (xxxxxxxx0xxxxxxx)
ROM_REGION( 0x80000, "oki", 0 )
ROM_LOAD( "igs_s2102.u37", 0x00000, 0x80000, CRC(90dda82d) SHA1(67fbc1e8d76b85e124136e2f1df09c8b6c5a8f97) ) // this came dumped with 4 identical quarters, 1 quarter matches the ROM from the amazonia set
@@ -600,6 +621,62 @@ ROM_START( amazoni2 )
ROM_LOAD( "akii_sp.u28", 0x00000, 0x80000, CRC(216b5418) SHA1(b7bc24ced0ccb5476c974420aa506c13b971fc9f) )
ROM_END
+ROM_START( jking02 ) // PCB-0367-05-FG-1
+ ROM_REGION( 0x04000, "maincpu", 0 )
+ // Internal ROM of IGS027A type G ARM based MCU
+ ROM_LOAD( "jking02_igs027a", 0x00000, 0x4000, NO_DUMP ) // stickered J6
+
+ ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
+ ROM_LOAD( "j_k_2002_v-209us.u23", 0x00000, 0x80000, CRC(ef6b652b) SHA1(ee5c2cef2c7cbcd4a70e05c01295e964ca5e45d1) ) // 27C4096
+
+ ROM_REGION( 0x80000, "igs017_igs031:tilemaps", 0 )
+ ROM_LOAD( "jungle_king_02_u12_text.u12", 0x00000, 0x80000, CRC(22dcebd0) SHA1(0383f017135230d020d12c8c6cc3aeb136fe9106) ) // M27C4002
+
+ ROM_REGION( 0x480000, "igs017_igs031:sprites", 0 )
+ ROM_LOAD( "jungle_king_02_u13_a4202.u13", 0x000000, 0x400000, CRC(97a68f85) SHA1(177c8c23fd0d585b24a71359ede005ac9a2e4d4d) ) // 27C322, FIXED BITS (xxxxxxx0xxxxxxxx)
+ ROM_LOAD( "jungle_king_02_u11_cg.u11", 0x400000, 0x080000, CRC(3c43da58) SHA1(7fbc34905587a36b6514ac781a16f12345129184) ) // M27C4002, FIXED BITS (xxxxxxxx0xxxxxxx)
+
+ ROM_REGION( 0x200000, "oki", 0 )
+ ROM_LOAD( "igs_w4201_speech_v103.u28", 0x000000, 0x200000, CRC(fb72d4b5) SHA1(c4f434fb20ac3df8d08aaf62f1dfad03f6f619ef) ) // M27C160, 1xxxxxxxxxxxxxxxxxxxx = 0x00
+ROM_END
+
+ROM_START( olympic5 ) // PCB type not readable, layout almost identical to PCB-0367-05-FG-1
+ ROM_REGION( 0x04000, "maincpu", 0 )
+ // Internal ROM of IGS027A type G ARM based MCU
+ ROM_LOAD( "olympic5_igs027a", 0x00000, 0x4000, NO_DUMP ) // stickered O2
+
+ ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
+ ROM_LOAD( "olympic_5_v-112us.u23", 0x00000, 0x80000, CRC(27743107) SHA1(ddb8fc3645b0d8f8b7348c180951ca212b3a2c03) ) // MX27C4096
+
+ ROM_REGION( 0x80000, "igs017_igs031:tilemaps", 0 )
+ ROM_LOAD( "olympic_5_text.u12", 0x00000, 0x80000, CRC(60b415ac) SHA1(b4475b0ba1e70504cac9ac05078873df0b16495b) ) // MX27C4096
+
+ ROM_REGION( 0x200000, "igs017_igs031:sprites", 0 )
+ ROM_LOAD( "olympic_5_cg.u13", 0x000000, 0x200000, CRC(6803f95b) SHA1(2d3d4194bb4efaf24c42c47c027068f396b08e7e) ) // M27C160, FIXED BITS (xxxxxxx0xxxxxxxx)
+ // u11 not populated
+
+ ROM_REGION( 0x200000, "oki", 0 )
+ ROM_LOAD( "olympic_5_sp.u28", 0x000000, 0x200000, CRC(7a2b5441) SHA1(a100daa3534c06c0fd40d9bab25983efe9dd446d) ) // 27C160, contains 4 times the same data as the one in olympic5a
+ROM_END
+
+ROM_START( olympic5a )
+ ROM_REGION( 0x04000, "maincpu", 0 )
+ // Internal ROM of IGS027A type G ARM based MCU
+ ROM_LOAD( "olympic5_igs027a", 0x00000, 0x4000, NO_DUMP ) // stickered O2
+
+ ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg
+ ROM_LOAD( "olympic_5_v-107us.u23", 0x00000, 0x80000, CRC(3bcd4dd9) SHA1(08e49d9a5045e52a7eb60113f0c7ed25b30474c2) ) // MX27C4096
+
+ ROM_REGION( 0x80000, "igs017_igs031:tilemaps", 0 )
+ ROM_LOAD( "olympic_5_text.u12", 0x00000, 0x80000, CRC(60b415ac) SHA1(b4475b0ba1e70504cac9ac05078873df0b16495b) ) // MX27C4096
+
+ ROM_REGION( 0x200000, "igs017_igs031:sprites", 0 )
+ ROM_LOAD( "olympic_5_cg.u13", 0x000000, 0x200000, CRC(6803f95b) SHA1(2d3d4194bb4efaf24c42c47c027068f396b08e7e) ) // M27C160, FIXED BITS (xxxxxxx0xxxxxxxx)
+ // u11 not populated
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "olympic_5_sp.u28", 0x00000, 0x80000, CRC(216b5418) SHA1(b7bc24ced0ccb5476c974420aa506c13b971fc9f) ) // MX27C4000
+ROM_END
// Games with prg at u16
// text at u24
@@ -1123,12 +1200,10 @@ void igs_m027_state::pgm_create_dummy_internal_arm_region()
}
-/*
-void igs_m027_state::init_igs_m027()
+void igs_m027_state::init_no_dec()
{
- pgm_create_dummy_internal_arm_region(machine());
+ pgm_create_dummy_internal_arm_region();
}
-*/
void igs_m027_state::init_sdwx()
{
@@ -1281,7 +1356,11 @@ GAME( 1999, amazonkp, amazonia, igs_mahjong, amazonia, igs_m027_state, init_ama
GAME( 1999, fruitpar, 0, igs_mahjong, sdwx, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V214)", MACHINE_IS_SKELETON )
GAME( 1999, oceanpar, 0, igs_mahjong, sdwx, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V105US)", MACHINE_IS_SKELETON ) // 1999 copyright in ROM
GAME( 1999, oceanpara, oceanpar, igs_mahjong, sdwx, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V101US)", MACHINE_IS_SKELETON ) // 1999 copyright in ROM
+GAME( 200?, luckycrs, 0, igs_mahjong, sdwx, igs_m027_state, init_no_dec, ROT0, "IGS", "Lucky Cross (V106SA)", MACHINE_IS_SKELETON )
GAME( 2002, sdwx, 0, igs_mahjong, sdwx, igs_m027_state, init_sdwx, ROT0, "IGS", "Sheng Dan Wu Xian", MACHINE_IS_SKELETON ) // aka Christmas 5 Line? (or Amazonia King II, shares roms at least?)
+GAME( 200?, jking02, 0, igs_mahjong, sdwx, igs_m027_state, init_no_dec, ROT0, "IGS", "Jungle King 2002 (V209US)", MACHINE_IS_SKELETON )
+GAME( 200?, olympic5, 0, igs_mahjong, sdwx, igs_m027_state, init_no_dec, ROT0, "IGS", "Olympic 5 (V112US)", MACHINE_IS_SKELETON )
+GAME( 200?, olympic5a, 0, igs_mahjong, sdwx, igs_m027_state, init_no_dec, ROT0, "IGS", "Olympic 5 (V107US)", MACHINE_IS_SKELETON )
GAME( 2003, amazoni2, 0, igs_mahjong, sdwx, igs_m027_state, init_amazoni2, ROT0, "IGS", "Amazonia King II (V202BR)", MACHINE_IS_SKELETON )
GAME( 200?, sddz, 0, igs_mahjong, sdwx, igs_m027_state, init_sddz, ROT0, "IGS", "Super Dou Di Zhu", MACHINE_IS_SKELETON )
GAME( 2000, zhongguo, 0, igs_mahjong, sdwx, igs_m027_state, init_zhongguo, ROT0, "IGS", "Zhong Guo Chu Da D", MACHINE_IS_SKELETON )
diff --git a/src/mame/igs/spoker.cpp b/src/mame/igs/spoker.cpp
index 43ce72c4a43..c30ca995078 100644
--- a/src/mame/igs/spoker.cpp
+++ b/src/mame/igs/spoker.cpp
@@ -135,14 +135,41 @@ public:
protected:
virtual void video_start() override;
+ void portmap(address_map &map);
+
private:
void coins_w(uint8_t data);
void nmi_video_leds_w(uint8_t data);
void program_map(address_map &map);
- void portmap(address_map &map);
};
+class jb_state : public spokeru_state
+{
+public:
+ jb_state(const machine_config &mconfig, device_type type, const char *tag) :
+ spokeru_state(mconfig, type, tag),
+ m_reel_ram(*this, "reel_ram.%u", 0U),
+ m_reel_scroll_ram(*this, "reel_scroll_ram.%u", 0U)
+ { }
+
+ void jb(machine_config &config);
+
+protected:
+ virtual void video_start() override;
+
+private:
+ required_shared_ptr_array<uint8_t, 3> m_reel_ram;
+ required_shared_ptr_array<uint8_t, 2> m_reel_scroll_ram;
+
+ tilemap_t *m_reel_tilemap[3]{};
+
+ template<uint8_t Reel> TILE_GET_INFO_MEMBER(get_reel_tile_info);
+ template<uint8_t Reel> void reel_ram_w(offs_t offset, uint8_t data);
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ void portmap(address_map &map);
+};
/***************************************************************************
Video Hardware
@@ -178,6 +205,24 @@ void spoker_state::fg_color_w(offs_t offset, uint8_t data)
m_fg_tilemap->mark_tile_dirty(offset);
}
+template<uint8_t Reel>
+TILE_GET_INFO_MEMBER(jb_state::get_reel_tile_info)
+{
+ int const code = m_reel_ram[Reel][tile_index];
+
+ tileinfo.set(1,
+ (code)+ (((tile_index + 1) & 0x3) * 0x100),
+ (code & 0x80) ? 0xc : 0,
+ 0);
+}
+
+template<uint8_t Reel>
+void jb_state::reel_ram_w(offs_t offset, uint8_t data)
+{
+ m_reel_ram[Reel][offset] = data;
+ m_reel_tilemap[Reel]->mark_tile_dirty(offset);
+}
+
void spoker_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(spoker_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 32, 128, 8);
@@ -190,6 +235,20 @@ void spokeru_state::video_start()
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(spokeru_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
}
+void jb_state::video_start()
+{
+ m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(jb_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_fg_tilemap->set_transparent_pen(0);
+
+ m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(jb_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8);
+ m_reel_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(jb_state::get_reel_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8);
+ m_reel_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(jb_state::get_reel_tile_info<2>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8);
+
+ m_reel_tilemap[0]->set_scroll_cols(64);
+ m_reel_tilemap[1]->set_scroll_cols(64);
+ m_reel_tilemap[2]->set_scroll_cols(64);
+}
+
uint32_t spoker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->black_pen(), cliprect);
@@ -199,7 +258,51 @@ uint32_t spoker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
return 0;
}
+uint32_t jb_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_palette->black_pen(), cliprect);
+
+ for (int i = 0; i < 0x40; i++)
+ {
+ m_reel_tilemap[0]->set_scrolly(i, m_reel_scroll_ram[0][i + 0x000]);
+ m_reel_tilemap[1]->set_scrolly(i, m_reel_scroll_ram[0][i + 0x040]);
+ m_reel_tilemap[2]->set_scrolly(i, m_reel_scroll_ram[0][i + 0x080]);
+ }
+ int startclipmin = 0;
+ const rectangle &visarea = screen.visible_area();
+
+ for (int j = 0; j < 0x100 - 1; j++)
+ {
+ rectangle clip;
+ int const rowenable = m_reel_scroll_ram[1][j];
+
+ // draw top of screen
+ clip.set(visarea.min_x, visarea.max_x, startclipmin, startclipmin + 1);
+
+ if (rowenable == 0)
+ {
+ m_reel_tilemap[0]->draw(screen, bitmap, clip, 0, 0);
+ }
+ else if (rowenable == 1)
+ {
+ m_reel_tilemap[1]->draw(screen, bitmap, clip, 0, 0);
+ }
+ else if (rowenable == 2)
+ {
+ m_reel_tilemap[2]->draw(screen, bitmap, clip, 0, 0);
+ }
+ else if (rowenable == 3)
+ {
+ }
+
+ startclipmin += 1;
+ }
+
+ m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+
+ return 0;
+}
/***************************************************************************
Misc Handlers
***************************************************************************/
@@ -391,6 +494,19 @@ void spokeru_state::portmap(address_map &map)
map(0x7800, 0x7fff).ram().w(FUNC(spokeru_state::fg_color_w)).share(m_fg_color_ram);
}
+void jb_state::portmap(address_map &map)
+{
+ spokeru_state::portmap(map);
+
+ map(0x1000, 0x10ff).ram().share(m_reel_scroll_ram[1]);
+ map(0x6000, 0x60ff).ram().share(m_reel_scroll_ram[0]);
+ map(0x6800, 0x69ff).ram().w(FUNC(jb_state::reel_ram_w<0>)).share(m_reel_ram[0]);
+ map(0x6a00, 0x6bff).ram().w(FUNC(jb_state::reel_ram_w<1>)).share(m_reel_ram[1]);
+ map(0x6c00, 0x6dff).ram().w(FUNC(jb_state::reel_ram_w<2>)).share(m_reel_ram[2]);
+ map(0x6e00, 0x6fff).nopw(); // hardware seems to support a 4th reel, unused by the dump game (only writes 0xff)
+ map(0x8000, 0xffff).rom().region("maincpu", 0x10000);
+}
+
void spoker_state::_3super8_portmap(address_map &map)
{
// map(0x1000, 0x1fff).nopw();
@@ -645,6 +761,174 @@ static INPUT_PORTS_START( 3super8 )
INPUT_PORTS_END
+// TODO: copied over from older versions in igs/igs009.cpp. Verify if dips are the same. Inputs are verified the same.
+static INPUT_PORTS_START( jb )
+ 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" )
+
+ 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(spoker_state, hopper_r) PORT_NAME("HPSW") // 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 & Graphics Decode
***************************************************************************/
@@ -702,6 +986,11 @@ static GFXDECODE_START( gfx_3super8 )
GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 )
GFXDECODE_END
+static GFXDECODE_START( gfx_jb )
+ GFXDECODE_ENTRY( "gfx1", 0x00000, layout_8x8x6, 0, 16 )
+ GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 )
+GFXDECODE_END
+
/***************************************************************************
Machine Start & Reset
@@ -783,6 +1072,18 @@ void spokeru_state::spokeru(machine_config &config)
}
+void jb_state::jb(machine_config &config)
+{
+ spokeru(config);
+
+ m_maincpu->set_addrmap(AS_IO, &jb_state::portmap);
+
+ m_screen->set_screen_update(FUNC(jb_state::screen_update));
+
+ m_gfxdecode->set_info(gfx_jb);
+}
+
+
void spoker_state::_3super8(machine_config &config)
{
spoker(config);
@@ -938,6 +1239,25 @@ ROM_START( spk100 ) // no labels on the ROMs
ROM_LOAD( "u38", 0x0000, 0x40000, CRC(33e6089d) SHA1(cd1ad01e92c18bbeab3fe3ea9152f8b0a3eb1b29) )
ROM_END
+ROM_START( jb200us ) // IGS PCB-0308-01, same as the US Super Poker sets
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "jingle_v200us.u27", 0x00000, 0x10000, CRC(831782cb) SHA1(8e903569a0cd34222a7e5fd3e9ab21bf00802bb3) ) // 27C512
+ ROM_LOAD( "jingle_v200us_7.u26", 0x10000, 0x10000, CRC(3160f443) SHA1(2930359961a618cbe356a7f9c8fd63bacba2a6b0) ) // 27C512, 1ST AND 2ND HALF IDENTICAL
+
+ ROM_REGION( 0xc0000, "gfx1", 0 ) // all 27C020
+ ROM_LOAD( "jingle_v200us_4.u33", 0x00000, 0x40000, CRC(daa56ce5) SHA1(4f14a8efac16b03bd14dd26d586bcb8d5bef65c1) )
+ ROM_LOAD( "jingle_v200us_5.u32", 0x40000, 0x40000, CRC(b10b38e1) SHA1(397b2d899e47c6249fbbb6e6262d0390d9b796e6) )
+ ROM_LOAD( "jingle_v200us_6.u31", 0x80000, 0x40000, CRC(a3304b5a) SHA1(bf51cb1f728758d50ce27275aa19ef649f6b34b9) )
+
+ ROM_REGION( 0x30000, "gfx2", 0 ) // all 27C512
+ ROM_LOAD( "jingle_v200us_1.u23", 0x00000, 0x10000, CRC(cadd7910) SHA1(aa514ddb29c8c9a77478d56bea4ae71995fdd518) )
+ ROM_LOAD( "jingle_v200us_2.u22", 0x10000, 0x10000, CRC(a9e1f5aa) SHA1(68d7f4e9e9a5bbce0904e406ee6fe82e9e52a9ba) )
+ ROM_LOAD( "jingle_v200us_3.u21", 0x20000, 0x10000, CRC(865b7d3a) SHA1(c1dff3a27d747ee499aaee0c4468534f0249a3e5) )
+
+ ROM_REGION( 0x40000, "oki", 0 )
+ ROM_LOAD( "jingle_v200ussp.u34", 0x00000, 0x20000, CRC(a42d73b1) SHA1(93157e9630d5c8bb34c71186415d0aa8c5d51951) ) // 27C010
+ROM_END
+
/*
Super Poker
Italian sets...
@@ -1181,3 +1501,4 @@ GAME( 1993?, spk114it, spk306us, spoker, spk114it, spoker_state, init_spk11
GAME( 1996, spk102ua, spk306us, spokeru, spoker, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v102UA)", MACHINE_SUPPORTS_SAVE )
GAME( 1996, spk100, spk306us, spoker, spk114it, spoker_state, init_spk100, ROT0, "IGS", "Super Poker (v100)", MACHINE_SUPPORTS_SAVE )
GAME( 1993?, 3super8, 0, _3super8, 3super8, spoker_state, init_3super8, ROT0, "<unknown>", "3 Super 8 (Italy)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //roms are badly dumped
+GAME( 1997, jb200us, 0, jb, jb, jb_state, init_spokeru, ROT0, "IGS", "Jingle Bell (v200US)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index eca833983d9..8a78ac61e05 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -20210,14 +20210,18 @@ extradrw // (c) 200?
fruitpar // (c) 200?
gonefsh2 // (c) 200?
haunthig // (c) 200?
+jking02 // (c) 200?
klxyj // (c) 200?
lhzb3 // (c) 200?
lhzb4 // (c) 200?
+luckycrs // (c) 200?
mgcs3 // (c) 200?
mgfx // (c) 200?
mgzz // (c) 2003
oceanpar //
oceanpara //
+olympic5 // (c) 200?
+olympic5a // (c) 200?
qlgs // (c) 1999
sddz // (c) 200?
sdwx // (c) 2002
@@ -20461,6 +20465,7 @@ kov3hd101
@source:igs/spoker.cpp
3super8 // unknown
+jb200us // (c) 1997 IGS
spk100 // (c) 1996 IGS
spk102ua // (c) 1996 IGS
spk114it // (c) 199? IGS
@@ -35420,7 +35425,7 @@ rocktrv2 // (c) 1986 Triumph Software Inc
shootbul // (c) 1985 Bally Midway
sprglbpg // German bootleg
sprglobp // (c) 1983 Epos Corporation
-sprglobp2 // (c) 1983 Epos Corporation
+sprglobp2 // bootleg
superabc // hack
superabco // hack
theglobme // (c) 1983 Magic Electronics
diff --git a/src/mame/pacman/pacman.cpp b/src/mame/pacman/pacman.cpp
index 4ec7bba2643..d2a42a79e84 100644
--- a/src/mame/pacman/pacman.cpp
+++ b/src/mame/pacman/pacman.cpp
@@ -8703,6 +8703,7 @@ void epospm_state::init_sprglobp2()
{
// this set is very similar to the unencrypted sprglbpg set
// for some reason the following doesn't work for some ranges
+ // (opcodes are unencrypted there).
static const uint8_t data_xortable[16][8] =
{
@@ -8899,7 +8900,7 @@ GAME( 1983, acitya, bwcasino, acitya, acitya, epospm_state, empty_init,
GAME( 1983, theglobp, suprglob, theglobp, theglobp, epospm_state, empty_init, ROT90, "Epos Corporation", "The Glob (Pac-Man hardware, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, theglobpa,suprglob, theglobp, theglobp, epospm_state, empty_init, ROT90, "Epos Corporation", "The Glob (Pac-Man hardware, set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, sprglobp, suprglob, theglobp, theglobp, epospm_state, empty_init, ROT90, "Epos Corporation", "Super Glob (Pac-Man hardware)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, sprglobp2,suprglob, pacman, theglobp, epospm_state, init_sprglobp2,ROT90, "bootleg", "Super Glob (Pac-Man hardware, bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // encrypted
+GAME( 1985, sprglobp2,suprglob, pacman, theglobp, epospm_state, init_sprglobp2,ROT90, "bootleg (Elsys Software)", "Super Glob (Pac-Man hardware, bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // encrypted
GAME( 1984, sprglbpg, suprglob, pacman, theglobp, epospm_state, empty_init, ROT90, "bootleg (Software Labor)", "Super Glob (Pac-Man hardware, German bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, theglobme,suprglob, woodpek, theglobp, epospm_state, empty_init, ROT90, "Magic Electronics Inc.", "The Glob (Pacman hardware, Magic Electronics Inc. license)", MACHINE_SUPPORTS_SAVE )