summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2023-01-27 18:42:51 +0100
committer Ivan Vangelista <mesgnet@yahoo.it>2023-01-27 18:42:51 +0100
commit40068a587964c4d200658051be189e593285bfef (patch)
tree49370f03820d8ebccda092566e2f22f39841de9b /src
parentdeff5d3710e31bb3530d8534b911110105cbae0a (diff)
New systems marked not working
------------------------------ Fruit Genie (Version 1-1-03) [Brian Troha, The Dumping Union]
Diffstat (limited to 'src')
-rw-r--r--src/mame/mame.lst1
-rw-r--r--src/mame/misc/jungleyo.cpp193
2 files changed, 191 insertions, 3 deletions
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index a0a91d0100b..6423e5ce827 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -29983,6 +29983,7 @@ joystand // 1997 Yuvo
jubileep //
@source:misc/jungleyo.cpp
+frtgenie
jungleyo
@source:misc/kas89.cpp
diff --git a/src/mame/misc/jungleyo.cpp b/src/mame/misc/jungleyo.cpp
index 0f92f02911b..5569e444766 100644
--- a/src/mame/misc/jungleyo.cpp
+++ b/src/mame/misc/jungleyo.cpp
@@ -3,8 +3,10 @@
/******************************************************************************
Jungle (c) 2001 Yonshi
+ Fruit Genie (c) 2003 Global
TODO:
+ Jungle:
- with a clean NVRAM MAME needs to be soft reset after init or the game
will trip a '1111 exception' (caused by invalid opcode executed at
0x102, incomplete decryption most likely);
@@ -26,6 +28,17 @@
playback.
- outputs (lamps & ticket dispenser at very least);
+ Fruit Genie:
+ - decryption seems good but gets stuck with 'data error' and 'illegal inst'
+ errors. Second one probably due to same problem as jungleyo. First one
+ possibly checksum failure due to patch in init_frtgenie()?
+ To bypass do:
+ bpset 5732. Once hit, do PC = 5810.
+ - second half of the main CPU ROM seems to contain an earlier version of the
+ data 'GENIE FRUITS DATA: 2001/08/15 VERSION: VA1.00'. Can it be reached or
+ just a leftover?
+ - it hits the layer_enable_w popmessage
+
===============================================================================
CPUs
@@ -100,6 +113,7 @@ public:
void jungleyo(machine_config &config);
+ void init_frtgenie();
void init_jungleyo();
protected:
@@ -201,6 +215,9 @@ void jungleyo_state::video_start()
m_layer_enable = 0;
m_video_priority = 0;
+
+ save_item(NAME(m_layer_enable));
+ save_item(NAME(m_video_priority));
}
uint32_t jungleyo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -291,7 +308,7 @@ void jungleyo_state::video_priority_w(u8 data)
void jungleyo_state::main_map(address_map &map)
{
- map(0x000000, 0x03ffff).rom().region("maincpu", 0);
+ map(0x000000, 0x07ffff).rom().region("maincpu", 0);
map(0xa00310, 0xa00311).portr("IN0");
map(0xa0032a, 0xa0032b).portr("DSW12");
map(0xa0032c, 0xa0032d).portr("DSW34");
@@ -413,6 +430,120 @@ static INPUT_PORTS_START( jungleyo )
PORT_DIPUNKNOWN_DIPLOC( 0x8000, 0x8000, "DSW4:8" ) // no effect in system settings
INPUT_PORTS_END
+static INPUT_PORTS_START( frtgenie )
+ PORT_START("IN0")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Play")
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_T) PORT_NAME("Ticket Sw.")
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no effect in input test
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_NAME("Take / Hold / Stop3")
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_NAME("Double Up / Stop1")
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // 'account' in input test
+ PORT_SERVICE( 0x100, IP_ACTIVE_LOW ) // if active high at boot the game shows the input test, if switched to input high after boot it shows system settings
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_SLOT_STOP_ALL ) PORT_NAME("Big / All Stop") // no effect in input test
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_NAME("Small / Stop2")
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no effect in input test
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no effect in input test
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
+
+ PORT_START("DSW12")
+ PORT_DIPNAME( 0x0007, 0x0007, "Main Game Rate" ) PORT_DIPLOCATION("DSW1:1,2,3")
+ PORT_DIPSETTING( 0x0007, "90%" )
+ PORT_DIPSETTING( 0x0003, "85%" )
+ PORT_DIPSETTING( 0x0005, "80%" )
+ PORT_DIPSETTING( 0x0001, "75%" )
+ PORT_DIPSETTING( 0x0006, "70%" )
+ PORT_DIPSETTING( 0x0002, "65%" )
+ PORT_DIPSETTING( 0x0004, "60%" )
+ PORT_DIPSETTING( 0x0000, "55%" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "DSW1:4" ) // no effect in system settings
+ PORT_DIPNAME( 0x0010, 0x0010, "Max. Play" ) PORT_DIPLOCATION("DSW1:5")
+ PORT_DIPSETTING( 0x0010, "40" )
+ PORT_DIPSETTING( 0x0000, "80" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "DSW1:6" ) // no effect in system settings
+ PORT_DIPNAME( 0x0040, 0x0040, "Min. Play" ) PORT_DIPLOCATION("DSW1:7")
+ PORT_DIPSETTING( 0x0000, "1" )
+ PORT_DIPSETTING( 0x0040, "10" )
+ PORT_DIPNAME( 0x0080, 0x0080, "Play Score" ) PORT_DIPLOCATION("DSW1:8")
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0700, 0x0700, "Coin In" ) PORT_DIPLOCATION("DSW2:1,2,3")
+ PORT_DIPSETTING( 0x0700, "1" )
+ PORT_DIPSETTING( 0x0300, "4" )
+ PORT_DIPSETTING( 0x0500, "5" )
+ PORT_DIPSETTING( 0x0100, "10" )
+ PORT_DIPSETTING( 0x0600, "20" )
+ PORT_DIPSETTING( 0x0200, "25" )
+ PORT_DIPSETTING( 0x0400, "50" )
+ PORT_DIPSETTING( 0x0000, "100" )
+ PORT_DIPNAME( 0x3800, 0x3800, "Key In" ) PORT_DIPLOCATION("DSW2:4,5,6")
+ PORT_DIPSETTING( 0x3800, "1" )
+ PORT_DIPSETTING( 0x1800, "4" )
+ PORT_DIPSETTING( 0x2800, "5" )
+ PORT_DIPSETTING( 0x0800, "15" )
+ PORT_DIPSETTING( 0x3000, "25" )
+ PORT_DIPSETTING( 0x1000, "75" )
+ PORT_DIPSETTING( 0x2000, "100" )
+ PORT_DIPSETTING( 0x0000, "500" )
+ PORT_DIPNAME( 0xc000, 0xc000, "Pay Out" ) PORT_DIPLOCATION("DSW2:7,8")
+ PORT_DIPSETTING( 0x0000, "1" )
+ PORT_DIPSETTING( 0xc000, "10" )
+ PORT_DIPSETTING( 0x4000, "20" )
+ PORT_DIPSETTING( 0x8000, "50" )
+
+ PORT_START("DSW34")
+ PORT_DIPNAME( 0x0003, 0x0003, "Game Limit" ) PORT_DIPLOCATION("DSW3:1,2")
+ PORT_DIPSETTING( 0x0003, "10000" )
+ PORT_DIPSETTING( 0x0001, "50000" )
+ PORT_DIPSETTING( 0x0002, "100000" )
+ PORT_DIPSETTING( 0x0000, "200000" )
+ PORT_DIPNAME( 0x0004, 0x0004, "Credit Limit" ) PORT_DIPLOCATION("DSW3:3")
+ PORT_DIPSETTING( 0x0004, "5000" )
+ PORT_DIPSETTING( 0x0000, "10000" )
+ PORT_DIPNAME( 0x0008, 0x0008, "Display Odds Table" ) PORT_DIPLOCATION("DSW3:4")
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "Reel Auto Stop" ) PORT_DIPLOCATION("DSW3:5")
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0020, 0x0020, "Game Count" ) PORT_DIPLOCATION("DSW3:6")
+ PORT_DIPSETTING( 0x0020, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0000, "Count" )
+ PORT_DIPNAME( 0x0040, 0x0040, "Reel Speed" ) PORT_DIPLOCATION("DSW3:7") // actually spelt 'Rell Speed'
+ PORT_DIPSETTING( 0x0040, "Slow" )
+ PORT_DIPSETTING( 0x0000, "Fast" )
+ PORT_DIPNAME( 0x0080, 0x0080, "Min. Play For Bonus" ) PORT_DIPLOCATION("DSW3:8")
+ PORT_DIPSETTING( 0x0080, "8" )
+ PORT_DIPSETTING( 0x0000, "16" )
+ PORT_DIPNAME( 0x0100, 0x0100, "Double Up Rate" ) PORT_DIPLOCATION("DSW4:1")
+ PORT_DIPSETTING( 0x0000, "75%" )
+ PORT_DIPSETTING( 0x0100, "85%" )
+ PORT_DIPNAME( 0x0200, 0x0200, "Play Score" ) PORT_DIPLOCATION("DSW4:2")
+ PORT_DIPSETTING( 0x0200, DEF_STR( Yes ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Pay Out Mode" ) PORT_DIPLOCATION("DSW4:3")
+ PORT_DIPSETTING( 0x0400, "Manual" )
+ PORT_DIPSETTING( 0x0000, "Auto" )
+ PORT_DIPNAME( 0x0800, 0x0800, "Double Up Game" ) PORT_DIPLOCATION("DSW4:4")
+ PORT_DIPSETTING( 0x0800, DEF_STR( Yes ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPNAME( 0x1000, 0x1000, "Lose & Win Mode" ) PORT_DIPLOCATION("DSW4:5")
+ PORT_DIPSETTING( 0x1000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0xe000, 0xe000, "Key Out" ) PORT_DIPLOCATION("DSW4:6,7,8")
+ PORT_DIPSETTING( 0xe000, "1" )
+ PORT_DIPSETTING( 0x6000, "5" )
+ PORT_DIPSETTING( 0xa000, "15" )
+ PORT_DIPSETTING( 0x2000, "20" )
+ PORT_DIPSETTING( 0xc000, "50" )
+ PORT_DIPSETTING( 0x4000, "75" )
+ PORT_DIPSETTING( 0x8000, "100" )
+ PORT_DIPSETTING( 0x0000, "500" )
+INPUT_PORTS_END
+
static const gfx_layout jungleyo16_layout =
{
@@ -462,7 +593,7 @@ void jungleyo_state::jungleyo(machine_config &config)
ROM_START( jungleyo )
- ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code, encrypted
+ ROM_REGION( 0x80000, "maincpu", ROMREGION_ERASE00 ) // 68000 code, encrypted
ROM_LOAD16_BYTE( "jungle_=record=_rom3_vi3.02.u15", 0x00000, 0x20000, CRC(7c9f431e) SHA1(fb3f90c4fe59c938f36b30c5fa3af227031e7d7a) )
ROM_LOAD16_BYTE( "jungle_=record=_rom2_vi3.02.u14", 0x00001, 0x20000, CRC(f6a71260) SHA1(8e48cbb9d701ad968540244396820359afe97c28) )
@@ -477,8 +608,33 @@ ROM_START( jungleyo )
ROM_REGION( 0x80000, "gfx3", 0 )
ROM_LOAD( "jungle_rom6.u60", 0x000000, 0x80000, CRC(caab8eb2) SHA1(472ca9f396d7c01a1bd03485581cfae677a3b365) )
+
+ ROM_REGION( 0x157, "plds", ROMREGION_ERASE00 )
+ ROM_LOAD( "atf20v8b.u37", 0x000, 0x157, NO_DUMP )
ROM_END
+ROM_START( frtgenie ) // MADE IN TAIWAN YONSHI PCB NO-006E
+ ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code, encrypted
+ ROM_LOAD16_BYTE( "fruit_genie_rom3_va1_1.03.u15", 0x00000, 0x40000, CRC(747099c3) SHA1(99f4aa6814ed2868d9758ad94b4497fd4c3142dc) )
+ ROM_LOAD16_BYTE( "fruit_genie_rom2_va1_1.03.u14", 0x00001, 0x40000, CRC(627c9dfd) SHA1(c4e393c61911a3d646b53fc2742e8b7495509567) )
+
+ ROM_REGION( 0x40000, "oki", 0 )
+ ROM_LOAD( "fruit_genie_rom_1.u99", 0x00000, 0x40000, CRC(28b0c8fb) SHA1(5cdf59dcbed7da9b882c7dcf27020c1c37dd22cc) )
+
+ ROM_REGION( 0x80000, "reelgfx", 0 )
+ ROM_LOAD( "fruit_genie_rom_4.u58", 0x000000, 0x80000, CRC(b3b467b6) SHA1(f1a64af7a8fe22c7ef76617aba359df11e4af737) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "fruit_genie_rom_5.u59", 0x000000, 0x80000, CRC(5c4497ed) SHA1(ed326867edb3a0e841a6d1ab9d6f238e9f7281b7) )
+
+ ROM_REGION( 0x80000, "gfx3", 0 )
+ ROM_LOAD( "fruit_genie_rom_6.u60", 0x000000, 0x80000, CRC(2f66583e) SHA1(08a8a4266c7e118183784bfdca796da803d3a2dd) )
+
+ ROM_REGION( 0x157, "plds", ROMREGION_ERASE00 )
+ ROM_LOAD( "atf20v8b.u37", 0x000, 0x157, NO_DUMP )
+ROM_END
+
+
void jungleyo_state::init_jungleyo()
{
uint16_t *src = (uint16_t *)memregion("maincpu")->base();
@@ -503,8 +659,39 @@ void jungleyo_state::init_jungleyo()
src[0x006 / 2] = 0x01f8; // reset opcode
}
+void jungleyo_state::init_frtgenie()
+{
+ uint16_t *src = (uint16_t *)memregion("maincpu")->base();
+
+ for (int i = 0x00000; i < 0x10000 / 2; i++)
+ src[i] = bitswap<16>(src[i] ^ 0x00ff, 11, 12, 14, 9, 10, 13, 8, 15, 5, 0, 2, 3, 6, 1, 4, 7); // ok
+
+ for (int i = 0x10000 / 2; i < 0x20000 / 2; i++)
+ src[i] = bitswap<16>(src[i] ^ 0xff00, 14, 11, 8, 13, 15, 9, 12, 10, 1, 5, 3, 0, 7, 2, 6, 4); // ok
+
+ for (int i = 0x20000 / 2; i < 0x30000 / 2; i++)
+ src[i] = bitswap<16>(src[i] ^ 0x00ff, 8, 14, 12, 11, 9, 15, 10, 13, 7, 4, 1, 5, 3, 6, 0, 2); // ok
+
+ for (int i = 0x30000 / 2; i < 0x40000 / 2; i++)
+ src[i] = bitswap<16>(src[i] ^ 0xffff, 15, 9, 10, 12, 8, 11, 13, 14, 2, 6, 4, 5, 0, 7, 3, 1); // ok
+
+ for (int i = 0x40000 / 2; i < 0x80000 / 2; i++) // the second half of the ROM seems to have the same bitswap
+ src[i] = bitswap<16>(src[i] ^ 0x0000, 10, 13, 15, 8, 12, 14, 11, 9, 0, 7, 6, 4, 1, 5, 2, 3); // ok
+
+ // TODO: Stack Pointer/Initial PC settings don't seem to decrypt correctly
+ // hack these until better understood (still wrong values)
+ src[0x000 / 2] = 0x0000;
+ src[0x002 / 2] = 0x0000;
+ src[0x004 / 2] = 0x0000;
+ src[0x006 / 2] = 0x01f8; // reset opcode
+}
+
+
} // Anonymous namespace
// version 3.02 built on 2001/02/09, there's copyright both for Yonshi and Global in strings
-GAME( 2001, jungleyo, 0, jungleyo, jungleyo, jungleyo_state, init_jungleyo, ROT0, "Yonshi", "Jungle (Italy VI3.02)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND )
+GAME( 2001, jungleyo, 0, jungleyo, jungleyo, jungleyo_state, init_jungleyo, ROT0, "Yonshi", "Jungle (Italy VI3.02)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+
+// first half is version 1-1-03, with copyright both for Yonshi and Global in strings, second half is version VA1.0 2001/08/15 with copyright both for Yonshi and Global in strings
+GAME( 2003, frtgenie, 0, jungleyo, frtgenie, jungleyo_state, init_frtgenie, ROT0, "Global", "Fruit Genie (Version 1-1-03)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )