mirror of
https://github.com/holub/mame
synced 2025-04-20 23:42:22 +03:00
New systems marked not working
------------------------------ Fruit Genie (Version 1-1-03) [Brian Troha, The Dumping Union]
This commit is contained in:
parent
deff5d3710
commit
40068a5879
@ -29983,6 +29983,7 @@ joystand // 1997 Yuvo
|
||||
jubileep //
|
||||
|
||||
@source:misc/jungleyo.cpp
|
||||
frtgenie
|
||||
jungleyo
|
||||
|
||||
@source:misc/kas89.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 )
|
||||
|
Loading…
Reference in New Issue
Block a user