New systems marked not working

------------------------------
Fruit Genie (Version 1-1-03) [Brian Troha, The Dumping Union]
This commit is contained in:
Ivan Vangelista 2023-01-27 18:42:51 +01:00
parent deff5d3710
commit 40068a5879
2 changed files with 191 additions and 3 deletions

View File

@ -29983,6 +29983,7 @@ joystand // 1997 Yuvo
jubileep //
@source:misc/jungleyo.cpp
frtgenie
jungleyo
@source:misc/kas89.cpp

View File

@ -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 )