From 8db8ea427e86323ac39dad612fe842a40c587ac6 Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Sat, 18 Jan 2020 23:16:35 +0000 Subject: [PATCH] new WORKING machine (#6181) * new WORKING machine ---- PDC100 - Portable Dream Console [Sean Riddle, David Haywood] * pocket, not portable * new NOT WORKING ----- Wow Wireless Gaming [TeamEurope, David Haywood] most games run, but the main menu needs an unemulated video mode * new WORKING machine --- Zone 100 [TeamEurope, David Haywood] new NOT WORKING machine ---- Zone 32-bit Gaming Console System (Family Sport 41-in-1) [TeamEurope, David Haywood] * (nw) * (nw) credit later * (nw) * (nw) * new WORKING machine --- Seal 50-in-1 [TeamEurope, David Haywood] new NOT WORKING machines ---- Zone 32-bit Gaming Console System (Family Sport 41-in-1) [TeamEurope, David Haywood] My Wico Deluxe [TeamEurope, David Haywood] Mini Arcade Games Console (Family Sport 220-in-1) [TeamEurope, David Haywood] * (nw) * (nw) --- src/mame/drivers/sunplus_gcm394.cpp | 210 +++++++++++- src/mame/drivers/vii.cpp | 486 +++++++++++++++++++++++++++- src/mame/drivers/vt1682.cpp | 70 +++- src/mame/mame.lst | 7 + 4 files changed, 753 insertions(+), 20 deletions(-) diff --git a/src/mame/drivers/sunplus_gcm394.cpp b/src/mame/drivers/sunplus_gcm394.cpp index 1c195bf5433..dc8fd552520 100644 --- a/src/mame/drivers/sunplus_gcm394.cpp +++ b/src/mame/drivers/sunplus_gcm394.cpp @@ -334,7 +334,41 @@ private: +class tkmag220_game_state : public gcm394_game_state +{ +public: + tkmag220_game_state(const machine_config& mconfig, device_type type, const char* tag) : + gcm394_game_state(mconfig, type, tag) + { + } + void tkmag220(machine_config &config); + +protected: + + /* + virtual DECLARE_READ16_MEMBER(porta_r) override + { + return machine().rand(); + } + + virtual DECLARE_READ16_MEMBER(portb_r) override + { + return machine().rand(); + } + + virtual DECLARE_WRITE16_MEMBER(porta_w) override + { + } + */ + +private: + + virtual DECLARE_READ16_MEMBER(cs0_r) override + { + return m_romregion[offset & 0x3ffffff]; + } +}; class wrlshunt_game_state : public gcm394_game_state { @@ -577,6 +611,15 @@ void wrlshunt_game_state::wrlshunt(machine_config &config) gcm394_game_state::base(config); } +void tkmag220_game_state::tkmag220(machine_config &config) +{ + gcm394_game_state::base(config); + + m_maincpu->porta_in().set_ioport("IN0"); + m_maincpu->portb_in().set_ioport("IN1"); + m_maincpu->portc_in().set_ioport("IN2"); +} + READ16_MEMBER(wrlshunt_game_state::porta_r) { @@ -841,6 +884,158 @@ static INPUT_PORTS_START( wrlshunt ) PORT_START("IN2") INPUT_PORTS_END +static INPUT_PORTS_START( tkmag220 ) + PORT_START("IN0") + PORT_DIPNAME( 0x0001, 0x0001, "IN0" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START("IN1") + PORT_DIPNAME( 0x0001, 0x0001, "IN1" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0000, "Important" ) // gets stuck in inf loop if this is wrong + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START("IN2") + PORT_DIPNAME( 0x0001, 0x0001, "IN2" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + static INPUT_PORTS_START( jak_car2 ) PORT_START("IN0") PORT_DIPNAME( 0x0001, 0x0001, "IN0" ) @@ -1133,6 +1328,14 @@ ROM_START(smartfp) ROM_LOAD16_WORD_SWAP("smartfitpark.bin", 0x000000, 0x800000, CRC(ada84507) SHA1(a3a80bf71fae62ebcbf939166a51d29c24504428)) ROM_END +ROM_START( tkmag220 ) + //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) + //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) + + ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "u1g-2a.u2", 0x0000000, 0x8000000, CRC(0fd769a1) SHA1(df19402bcd20075483d63fb98fb3fa42bd33ccfd) ) +ROM_END + ROM_START(jak_s500) //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) @@ -1141,7 +1344,6 @@ ROM_START(jak_s500) ROM_LOAD16_WORD_SWAP("spbwheel.bin", 0x000000, 0x800000, CRC(6ba1d335) SHA1(1bb3e4d02c7b35dd4d336971c6a9f82071cc6ce1) ) ROM_END - ROM_START(wrlshunt) //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) @@ -1150,7 +1352,6 @@ ROM_START(wrlshunt) ROM_LOAD16_WORD_SWAP("wireless.bin", 0x0000, 0x8000000, CRC(a6ecc20e) SHA1(3645f23ba2bb218e92d4560a8ae29dddbaabf796)) ROM_END - /* Wireless Hunting Video Game System (info provided with dump) @@ -1300,11 +1501,12 @@ ROM_START( beambox ) ROM_END // the JAKKS ones of these seem to be known as 'Generalplus GPAC500' hardware? -CONS(2009, smartfp, 0, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (Spain)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) +CONS(2009, smartfp, 0, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (Spain)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) +CONS(200?, tkmag220, 0, 0, tkmag220, tkmag220, tkmag220_game_state, empty_init, "TaiKee", "Mini Arcade Games Console (Family Sport 220-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) + // Fun 2 Learn 3-in-1 SMART SPORTS ? CONS(2009, jak_s500, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc", "SpongeBob SquarePants Bikini Bottom 500 (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) - CONS(2011, wrlshunt, 0, 0, wrlshunt, wrlshunt, wrlshunt_game_state, init_wrlshunt, "Hamy / Kids Station Toys Inc", "Wireless Hunting Video Game System", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) void generalplus_gpac800_game_state::machine_start() diff --git a/src/mame/drivers/vii.cpp b/src/mame/drivers/vii.cpp index bbd55369e52..b3d3f581d5b 100644 --- a/src/mame/drivers/vii.cpp +++ b/src/mame/drivers/vii.cpp @@ -236,6 +236,39 @@ protected: optional_device m_i2cmem; }; + +class spg2xx_lexiseal_game_state : public spg2xx_game_state +{ +public: + spg2xx_lexiseal_game_state(const machine_config &mconfig, device_type type, const char *tag) : + spg2xx_game_state(mconfig, type, tag) + { } + + void lexiseal(machine_config& config); + +protected: + //virtual void machine_start() override; + //virtual void machine_reset() override; + + DECLARE_WRITE16_MEMBER(portb_w); +}; + +class spg2xx_pdc100_game_state : public spg2xx_game_state +{ +public: + spg2xx_pdc100_game_state(const machine_config &mconfig, device_type type, const char *tag) : + spg2xx_game_state(mconfig, type, tag) + { } + + void pdc100(machine_config& config); + +protected: + //virtual void machine_start() override; + virtual void machine_reset() override; + + DECLARE_WRITE16_MEMBER(porta_w); +}; + class wireless60_state : public spg2xx_game_state { public: @@ -247,6 +280,7 @@ public: void wireless60(machine_config& config); void init_lx_jg7415(); + void init_zone100(); protected: virtual void machine_start() override; @@ -265,6 +299,39 @@ protected: private: }; +class zon32bit_state : public spg2xx_game_state +{ +public: + zon32bit_state(const machine_config& mconfig, device_type type, const char* tag) : + spg2xx_game_state(mconfig, type, tag), + m_romregion(*this, "maincpu") + { } + + void zon32bit(machine_config& config); + + void mem_map_zon32bit(address_map &map); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + + DECLARE_READ16_MEMBER(z32_rom_r); + + required_region_ptr m_romregion; + + DECLARE_READ16_MEMBER(porta_r); + DECLARE_READ16_MEMBER(portb_r); + + DECLARE_WRITE16_MEMBER(porta_w); + DECLARE_WRITE16_MEMBER(portb_w); + DECLARE_WRITE16_MEMBER(portc_w); + +private: + int m_porta_dat; + int m_portb_dat; + + int m_hackbank; +}; class zone40_state : public wireless60_state { @@ -697,6 +764,8 @@ READ8_MEMBER(spg2xx_game_state::i2c_r) WRITE16_MEMBER(wireless60_state::wireless60_porta_w) { + //logerror("%s: wireless60_porta_w %04x\n", machine().describe_context(), data); + m_w60_porta_data = (data & 0x300) | m_w60_p1_ctrl_mask | m_w60_p2_ctrl_mask; switch (m_w60_porta_data & 0x300) { @@ -718,6 +787,18 @@ WRITE16_MEMBER(wireless60_state::wireless60_porta_w) } } +READ16_MEMBER(wireless60_state::wireless60_porta_r) +{ + //logerror("%s: wireless60_porta_r\n", machine().describe_context()); + return m_w60_porta_data; +} + +WRITE16_MEMBER(wireless60_state::wireless60_portb_w) +{ + logerror("%s: wireless60_portb_w (bankswitch) %04x\n", machine().describe_context(), data); + switch_bank(data & m_bankmask); +} + WRITE16_MEMBER(zone40_state::zone40_porta_w) { wireless60_porta_w(space, offset, data); @@ -729,11 +810,49 @@ WRITE16_MEMBER(zone40_state::zone40_porta_w) } } -READ16_MEMBER(wireless60_state::wireless60_porta_r) -{ - return m_w60_porta_data; + +READ16_MEMBER(zon32bit_state::porta_r) +{ + return m_porta_dat; } + +WRITE16_MEMBER(zon32bit_state::porta_w) +{ + if (data != 0x0101) + logerror("%s: porta_w (%04x)\n", machine().describe_context(), data); + + m_porta_dat = data; + + // where is the banking?! this gets written from the RAM-based code when the lower bank needs to change, but the upper bank needs to change in places too + // (and all these bits get unset again after this write, so this probably isn't the bank) + if (data == 0x0e01) + { + m_hackbank = 1; + } +} + +READ16_MEMBER(zon32bit_state::portb_r) +{ + return m_portb_dat; +} + +WRITE16_MEMBER(zon32bit_state::portb_w) +{ + if (data != 0x0001) + logerror("%s: portb_w (%04x)\n", machine().describe_context(), data); + + m_portb_dat = data; +} + +WRITE16_MEMBER(zon32bit_state::portc_w) +{ + // very noisy + //logerror("%s: portc_w (%04x)\n", machine().describe_context(), data); +} + + + READ16_MEMBER(zone40_state::zone40_porta_r) { uint16_t ret = wireless60_porta_r(space, offset) & (0x0300 | m_w60_p1_ctrl_mask | m_w60_p2_ctrl_mask); @@ -741,11 +860,6 @@ READ16_MEMBER(zone40_state::zone40_porta_r) return ret; } -WRITE16_MEMBER(wireless60_state::wireless60_portb_w) -{ - logerror("%s: wireless60_portb_w (bankswitch) %04x\n", machine().describe_context(), data); - switch_bank(data & m_bankmask); -} void vii_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { @@ -1018,6 +1132,49 @@ void telestory_state::mem_map_4m_tsram(address_map &map) } +void zon32bit_state::mem_map_zon32bit(address_map &map) +{ + map(0x000000, 0x3fffff).r(FUNC(zon32bit_state::z32_rom_r)); +} + +READ16_MEMBER(zon32bit_state::z32_rom_r) +{ + /* + This has upper and lower bank, which can be changed independently. + I don't know where the bank registers are. + */ + + if (offset < 0x200000) + { + if (m_hackbank == 0) // if lower bank is 0 + return m_romregion[offset+ 0x000000]; + else // if lower bank is 1 + return m_romregion[offset+ 0x400000]; + } + else + { + offset &= 0x1fffff; + + if (m_hackbank == 0) // if lower bank is 0 + { + return m_romregion[0x200000 + offset + 0x000000]; // this upper bank is needed to boot to the menu + + // other banks are presumably needed for the games that don't change the lower bank but still don't run with the above. + } + else // if lower bank is 1 + { + // these banks are used for different 'mini' games (and boxing) with the 2nd lower bank enabled + return m_romregion[0x200000 + offset + 0x400000 + 0x000000]; // 31-44 + //return m_romregion[0x200000 + offset+ 0x400000 + 0x600000]; // 45-49 + //return m_romregion[0x200000 + offset+ 0x400000 + 0x800000]; // 50-59 + } + } + + return 0x0000;// m_romregion[offset]; +} + + + READ16_MEMBER(zone40_state::z40_rom_r) { // due to granularity of rom bank this manual method is safer @@ -1381,6 +1538,141 @@ static INPUT_PORTS_START( wirels60 ) INPUT_PORTS_END +static INPUT_PORTS_START( zon32bit ) + PORT_START("P1") + PORT_DIPNAME( 0x0001, 0x0001, "P1" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START("P2") + PORT_DIPNAME( 0x0001, 0x0001, "P2" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START("P3") + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON4 ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON5 ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + + static INPUT_PORTS_START( rad_skat ) PORT_START("P1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Full Left") @@ -2041,6 +2333,28 @@ static INPUT_PORTS_START( lexizeus ) // how many buttons does this have? I acci PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) INPUT_PORTS_END +static INPUT_PORTS_START( lexiseal ) + PORT_START("P1") + PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNUSED ) // doesn't respond as 'select' + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) // pause / start + + PORT_START("P2") + PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("P3") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) + PORT_BIT( 0xfffc, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + + static INPUT_PORTS_START( tvgogo ) PORT_START("P1") PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Back") @@ -2563,6 +2877,28 @@ static INPUT_PORTS_START( telestory ) // there is a hidden test mode, if you ret PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) INPUT_PORTS_END +static INPUT_PORTS_START( pdc100 ) + PORT_START("P1") + PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Left Trigger") + PORT_BIT( 0x0e00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Right Trigger") + PORT_BIT( 0xe000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START("P2") + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Pause") + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START("P3") + PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) +INPUT_PORTS_END READ16_MEMBER(dreamlif_state::portb_r) { @@ -2835,6 +3171,30 @@ void spg2xx_game_state::machine_reset() m_maincpu->reset(); } +void spg2xx_pdc100_game_state::machine_reset() +{ + m_current_bank = -1; + switch_bank(7); // must boot from upper bank + m_maincpu->reset(); +} + +WRITE16_MEMBER(spg2xx_pdc100_game_state::porta_w) +{ + //logerror("%s: porta_w %04x\n", machine().describe_context(), data); + switch_bank(data & 0x0007); +} + +WRITE16_MEMBER(spg2xx_lexiseal_game_state::portb_w) +{ + //logerror("%s: portb_w %04x\n", machine().describe_context(), data); + + // only 2 banks + if (data == 0x5f) + switch_bank(0); + else if (data == 0xdf) + switch_bank(1); +} + void wireless60_state::machine_start() @@ -2848,6 +3208,11 @@ void wireless60_state::machine_start() m_w60_p2_ctrl_mask = 0x0800; } +void zon32bit_state::machine_start() +{ + spg2xx_game_state::machine_start(); +} + void zone40_state::machine_start() { wireless60_state::machine_start(); @@ -2866,6 +3231,16 @@ void wireless60_state::machine_reset() m_w60_porta_data = 0; } +void zon32bit_state::machine_reset() +{ + spg2xx_game_state::machine_reset(); + + m_porta_dat = 0x0000; + m_portb_dat = 0x0000; + + m_hackbank = 0; +} + void zone40_state::machine_reset() { wireless60_state::machine_reset(); @@ -3167,6 +3542,25 @@ void wireless60_state::wireless60(machine_config &config) m_maincpu->porta_in().set(FUNC(wireless60_state::wireless60_porta_r)); } +void zon32bit_state::zon32bit(machine_config &config) +{ + SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); + m_maincpu->set_addrmap(AS_PROGRAM, &zon32bit_state::mem_map_zon32bit); + m_maincpu->set_force_no_drc(true); // uses JVS opcode, not implemented in recompiler + + spg2xx_base(config); + + m_maincpu->porta_in().set(FUNC(zon32bit_state::porta_r)); + m_maincpu->portb_in().set(FUNC(zon32bit_state::portb_r)); + m_maincpu->portc_in().set_ioport("P3"); + + m_maincpu->porta_out().set(FUNC(zon32bit_state::porta_w)); + m_maincpu->portb_out().set(FUNC(zon32bit_state::portb_w)); + m_maincpu->portc_out().set(FUNC(zon32bit_state::portc_w)); + + +} + void zone40_state::zone40(machine_config &config) { SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); @@ -3464,6 +3858,26 @@ void spg2xx_game_state::taikeegr(machine_config &config) // m_maincpu->portc_in().set_ioport("P3"); } + +void spg2xx_pdc100_game_state::pdc100(machine_config &config) +{ + non_spg_base(config); + m_maincpu->porta_out().set(FUNC(spg2xx_pdc100_game_state::porta_w)); + m_maincpu->porta_in().set_ioport("P1"); + m_maincpu->portb_in().set_ioport("P2"); + m_maincpu->portc_in().set_ioport("P3"); // not used? +} + +void spg2xx_lexiseal_game_state::lexiseal(machine_config &config) +{ + non_spg_base(config); + m_maincpu->portb_out().set(FUNC(spg2xx_lexiseal_game_state::portb_w)); + m_maincpu->porta_in().set_ioport("P1"); + m_maincpu->portb_in().set_ioport("P2"); + m_maincpu->portc_in().set_ioport("P3"); +} + + // Shredmaster Jr uses the same input order as the regular Taikee Guitar, but reads all inputs through a single multplexed bit WRITE16_MEMBER(shredmjr_game_state::porta_w) { @@ -4032,6 +4446,11 @@ ROM_START( lexizeus ) ROM_LOAD16_WORD_SWAP( "lexibook1g900us.bin", 0x0000, 0x800000, CRC(c2370806) SHA1(cbb599c29c09b62b6a9951c724cd9fc496309cf9)) ROM_END +ROM_START( lexiseal ) + ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "lexibook_seal.bin", 0x0000, 0x1000000, CRC(3529f154) SHA1(f5f142600c6b2d037b97e007364ea2fa228e0163) ) +ROM_END + ROM_START( zone40 ) ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "zone40.bin", 0x0000, 0x4000000, CRC(4ba1444f) SHA1(de83046ab93421486668a247972ad6d3cda19440) ) @@ -4047,6 +4466,13 @@ ROM_START( wirels60 ) ROM_LOAD16_WORD_SWAP( "wirels60.bin", 0x0000, 0x4000000, CRC(b4df8b28) SHA1(00e3da542e4bc14baf4724ad436f66d4c0f65c84)) ROM_END +ROM_START( mywicodx ) + ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 ) + // the first bank contains the Mi Guitar game, the 2nd half of the ROM is where the Menu starts + ROM_LOAD16_WORD_SWAP( "mywicodx.u2", 0x2000000, 0x2000000, CRC(ec7c5d2f) SHA1(330fb839c485713f7bec5bf9d2d42841612c5b45)) + ROM_CONTINUE(0x0000000, 0x2000000) +ROM_END + // PCB marked 'Zone 100 110728 V2.1' ROM_START( lx_jg7415 ) ROM_REGION( 0x10000000, "maincpu", ROMREGION_ERASE00 ) @@ -4055,8 +4481,15 @@ ROM_START( lx_jg7415 ) ROM_LOAD16_WORD_SWAP( "rom.bin", 0x0000, 0x10000000, CRC(59442e00) SHA1(7e91cf6b19c37f9b4fa4dc21e241c6634d6a6f95) ) ROM_END +ROM_START( zone100 ) + ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "zone100.bin", 0x0000, 0x8000000, CRC(b966a54e) SHA1(e38156ebc4e2f2935b1acbeca33d1866d45c4f65) ) +ROM_END - +ROM_START( zon32bit ) + ROM_REGION( 0x2000000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "41sports.bin", 0x0000, 0x2000000, CRC(86eee6e0) SHA1(3f6cab6649aebf596de5a8af21658bb1a27edb10) ) +ROM_END ROM_START( rad_skat ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) @@ -4143,6 +4576,13 @@ ROM_START( wiwi18 ) ROM_LOAD16_WORD_SWAP( "26gl128.bin", 0x000000, 0x1000000, CRC(0b103ac9) SHA1(14434908f429942096fb8db5b5630603fd54fb2c) ) ROM_END +ROM_START( pdc100 ) + ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 ) + // only 1st half of this is used "Jumper resistor (0 ohm) that short A25 to ground" + // 2nd half just contains what seems to be random garbage + ROM_LOAD16_WORD_SWAP( "pdc100.bin", 0x000000, 0x8000000, CRC(57285b49) SHA1(cfb4be7877ec263d24063a004c56985db5c0f4e2) ) +ROM_END + ROM_START( sentx6p ) ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 ) @@ -4271,6 +4711,11 @@ void wireless60_state::init_lx_jg7415() m_bankmask = 0xf; } +void wireless60_state::init_zone100() +{ + m_bankmask = 0xf; +} + void spg2xx_game_state::init_wiwi18() { uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); @@ -4288,9 +4733,16 @@ CONS( 2007, vii, 0, 0, vii, vii, vii_state, empty_init, // these don't have real motion controls CONS( 2009, zone40, 0, 0, zone40, wirels60, zone40_state, init_zone40, "Jungle Soft / Ultimate Products (HK) Ltd", "Zone 40", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) CONS( 2010, zone60, 0, 0, wireless60, wirels60, wireless60_state, empty_init, "Jungle's Soft / Ultimate Products (HK) Ltd", "Zone 60", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 200?, zone100, 0, 0, wireless60, wirels60, wireless60_state, init_zone100, "Jungle's Soft / Ultimate Products (HK) Ltd", "Zone 100", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // unit was black, menus still show white controllers, unlike wireless 60 CONS( 2010, wirels60, 0, 0, wireless60, wirels60, wireless60_state, empty_init, "Jungle Soft / Kids Station Toys Inc", "Wireless 60", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) CONS( 2011, lx_jg7415,0, 0, wireless60, wirels60, wireless60_state, init_lx_jg7415, "Lexibook", "Lexibook JG7415 120-in-1", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) + +// Box advertises this as '40 Games Included' but the cartridge, which was glued directly to the PCB, not removable, is a 41-in-1. Maybe some versions exist with a 40 game selection. +CONS( 200?, zon32bit, 0, 0, zon32bit, zon32bit, zon32bit_state, empty_init, "Jungle Soft / Ultimate Products (HK) Ltd", "Zone 32-bit Gaming Console System (Family Sport 41-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 200?, mywicodx, 0, 0, zon32bit, zon32bit, zon32bit_state, empty_init, "", "My Wico Deluxe", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) + + // JAKKS Pacific Inc TV games CONS( 2004, jak_batm, 0, 0, jakks, batman, spg2xx_game_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "The Batman (JAKKS Pacific TV Game)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) CONS( 2008, jak_wall, 0, 0, walle, walle, spg2xx_game_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Wall-E (JAKKS Pacific TV Game)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) @@ -4359,6 +4811,8 @@ CONS( 2006, telestry, 0, 0, telestory, telestory, telestory_state, emp // Similar, SPG260?, scrambled CONS( 200?, lexizeus, 0, 0, lexizeus, lexizeus, spg2xx_game_state, init_zeus, "Lexibook", "Zeus IG900 20-in-1 (US?)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // bad sound and some corrupt bg tilemap entries in Tiger Rescue, verify ROM data (same game runs in Zone 60 without issue) +CONS( 200?, lexiseal, 0, 0, lexiseal, lexiseal, spg2xx_lexiseal_game_state, init_zeus, "Lexibook / Sit Up Limited", "Seal 50-in-1", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // also has bad sound in Tiger Rescue, but no corrupt tilemap + // there are other regions of this, including a Finnish version "Haluatko miljonääriksi?" (see https://millionaire.fandom.com/wiki/Haluatko_miljon%C3%A4%C3%A4riksi%3F_(Play_Vision_game) ) CONS( 2006, pvmil, 0, 0, pvmil, pvmil, pvmil_state, empty_init, "Play Vision", "Who Wants to Be a Millionaire? (Play Vision, Plug and Play, UK)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) @@ -4377,3 +4831,17 @@ CONS( 2004, sentx6p, 0, 0, sentx6p, sentx6p, sentx6p_state, em // actually a cartridge, but all hardware is in the cart, overriding any internal hardware entirely. see nes_vt.cp 'mc_sp69' for the '69 arcade game' part CONS( 200?, wiwi18, 0, 0, rad_skat, wiwi18, spg2xx_game_state, init_wiwi18, "Hamy System", "WiWi 18-in-1 Sports Game", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +// Conny devices + +// there were older models eg. PDC30 with fewer games, and some differences (eg "Jo Ma" instead of "Jo Ma 2") +// "Jo Ma 2" shows "Licensed by Mitchell Corporation" (Mitchell made the original Puzzloop on which this style of game is based) Videos of the original Jo Ma show it lacking this text. + +// Other known units +// PDC Teenage Mutant Ninja Turtles +// PDC Dora the Explorer +// PDC 30 +// PDC 40 +// PDC 200 + +// This was dumped from an Anncia branded unit, although there's no ingame branding, so ROM is probably the same for all PDC100 units +CONS( 2008, pdc100, 0, 0, pdc100, pdc100, spg2xx_pdc100_game_state, empty_init, "Conny", "PDC100 - Pocket Dream Console", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/drivers/vt1682.cpp b/src/mame/drivers/vt1682.cpp index 4dff9c83768..9383458fd3b 100644 --- a/src/mame/drivers/vt1682.cpp +++ b/src/mame/drivers/vt1682.cpp @@ -60,6 +60,7 @@ #include "emu.h" #include "machine/m6502_vt1682.h" +#include "machine/m6502_vh2009.h" #include "machine/vt1682_io.h" #include "machine/vt1682_uio.h" #include "machine/vt1682_alu.h" @@ -474,6 +475,10 @@ private: DECLARE_READ8_MEMBER(vt1682_212c_prng_r); DECLARE_WRITE8_MEMBER(vt1682_212c_prng_seed_w); + virtual void clock_joy2(); + + READ8_MEMBER(inteact_212a_send_joy_clock2_r); + /* Hacky */ DECLARE_READ8_MEMBER(soundcpu_irq_vector_hack_r); @@ -660,23 +665,36 @@ public: void vt1682_exsport(machine_config& config); - DECLARE_READ8_MEMBER(uiob_r); + virtual DECLARE_READ8_MEMBER(uiob_r); DECLARE_WRITE8_MEMBER(uiob_w); protected: virtual void machine_start() override; virtual void machine_reset() override; -private: int m_old_portb; int m_portb_shiftpos = 0; int m_p1_latch; int m_p2_latch; + virtual void clock_joy2() override; required_ioport m_io_p1; required_ioport m_io_p2; }; +class vt1682_wow_state : public vt1682_exsport_state +{ +public: + vt1682_wow_state(const machine_config& mconfig, device_type type, const char* tag) : + vt1682_exsport_state(mconfig, type, tag) + { } + + void vt1682_wow(machine_config& config); + +protected: + +private: +}; void vt_vt1682_state::video_start() @@ -3624,6 +3642,17 @@ WRITE8_MEMBER(vt_vt1682_state::vt1682_2128_dma_sr_bank_addr_24_23_w) 0x01 - UIOA DIRECTION */ +void vt_vt1682_state::clock_joy2() +{ +} + +READ8_MEMBER(vt_vt1682_state::inteact_212a_send_joy_clock2_r) +{ + uint8_t ret = m_uio->inteact_212a_uio_a_direction_r(space,offset); + clock_joy2(); + return ret; +} + /* Address 0x212b r/w (MAIN CPU) @@ -4850,7 +4879,11 @@ void vt_vt1682_state::draw_layer(int which, int opaque, const rectangle& cliprec if (high_color) { - + popmessage("high colour line mode\n"); + } + else + { + popmessage("line mode\n"); } } } @@ -5162,7 +5195,8 @@ void vt_vt1682_state::vt_vt1682_map(address_map &map) map(0x2127, 0x2127).rw(FUNC(vt_vt1682_state::vt1682_2127_dma_status_r), FUNC(vt_vt1682_state::vt1682_2127_dma_size_trigger_w)); map(0x2128, 0x2128).rw(FUNC(vt_vt1682_state::vt1682_2128_dma_sr_bank_addr_24_23_r), FUNC(vt_vt1682_state::vt1682_2128_dma_sr_bank_addr_24_23_w)); map(0x2129, 0x2129).rw(m_uio, FUNC(vrt_vt1682_uio_device::inteact_2129_uio_a_data_r), FUNC(vrt_vt1682_uio_device::inteact_2129_uio_a_data_w)); - map(0x212a, 0x212a).rw(m_uio, FUNC(vrt_vt1682_uio_device::inteact_212a_uio_a_direction_r), FUNC(vrt_vt1682_uio_device::inteact_212a_uio_a_direction_w)); + map(0x212a, 0x212a).w(m_uio, FUNC(vrt_vt1682_uio_device::inteact_212a_uio_a_direction_w)); + map(0x212a, 0x212a).r(FUNC(vt_vt1682_state::inteact_212a_send_joy_clock2_r)); map(0x212b, 0x212b).rw(m_uio, FUNC(vrt_vt1682_uio_device::inteact_212b_uio_a_attribute_r), FUNC(vrt_vt1682_uio_device::inteact_212b_uio_a_attribute_w)); map(0x212c, 0x212c).rw(FUNC(vt_vt1682_state::vt1682_212c_prng_r), FUNC(vt_vt1682_state::vt1682_212c_prng_seed_w)); // 212d PLL @@ -5661,13 +5695,16 @@ WRITE8_MEMBER(intec_interact_state::portb_w) m_previous_port_b = data; }; +void vt1682_exsport_state::clock_joy2() +{ + m_portb_shiftpos++; +} + READ8_MEMBER(vt1682_exsport_state::uiob_r) { int p1bit = (m_p1_latch >> m_portb_shiftpos) & 1; int p2bit = (m_p2_latch >> m_portb_shiftpos) & 1; - m_portb_shiftpos++; - return (p1bit << 1) | (p2bit << 3); }; @@ -5678,6 +5715,9 @@ WRITE8_MEMBER(vt1682_exsport_state::uiob_w) if (!(data & 0x01)) { m_portb_shiftpos = 0; + + //logerror("%s: reset shift\n", machine().describe_context()); + m_p1_latch = m_io_p1->read(); m_p2_latch = m_io_p2->read(); } @@ -5729,6 +5769,14 @@ void vt1682_exsport_state::vt1682_exsport(machine_config& config) } +void vt1682_wow_state::vt1682_wow(machine_config& config) +{ + vt1682_exsport_state::vt1682_exsport(config); + + M6502_VH2009(config.replace(), m_maincpu, MAIN_CPU_CLOCK_NTSC); // doesn't use the same bitswap as the other VT1682 games... + m_maincpu->set_addrmap(AS_PROGRAM, &vt1682_wow_state::vt_vt1682_map); +} + void vt_vt1682_state::regular_init() { @@ -5792,6 +5840,13 @@ ROM_START( exsprt48 ) ROM_LOAD( "excitesportgames_48.bin", 0x00000, 0x2000000, CRC(1bf239a0) SHA1(d69c16bac5fb15c62abb5a0c0920405647205539) ) // original dump had upper 2 address lines swapped, unmarked chip, so lines were guessed when dumping ROM_END +ROM_START( wowwg ) + ROM_REGION( 0x2000000, "mainrom", 0 ) + ROM_LOAD( "msp55lv128.bin", 0x00000, 0x1000000, CRC(f607c40c) SHA1(66d3960c3b8fbab06a88cf039419c79a6c8633f0) ) + ROM_RELOAD(0x1000000,0x1000000) +ROM_END + + // TODO: this is a cartridge based system (actually, verify this, it seems some versions simply had built in games) move these to SL if verified as from cartridge config // actually it appears that for the cart based systems these are 'fake systems' anyway, where the base unit is just a Famiclone but as soon as you plug in a cart none of @@ -5845,4 +5900,5 @@ Ball Shoot instead of 'Noshery' under Arcade This might be a regional / store thing if some places didn't want to sell a unit with a Poker game in it? */ - +CONS( 200?, wowwg, 0, 0, vt1682_wow, exsprt48, vt1682_wow_state, regular_init, "Wow", "Wow Wireless Gaming", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND) // needs high colour line mode for main menu +// NJ Pocket 60-in-1 (NJ-250) is meant to have similar games, so might fit here diff --git a/src/mame/mame.lst b/src/mame/mame.lst index f7b07f2ab9a..e43af0dff81 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -31315,6 +31315,7 @@ miwi2_7 intact89 intg5410 exsprt48 +wowwg @source:newbrain.cpp newbrain // @@ -37458,6 +37459,7 @@ jak_s500 smartfp // Smart Fit Park wlsair60 // Wireless Air 60 wrlshunt // Wireless: Hunting Video Game System +tkmag220 // jak_car2 jak_gtg jak_tsm @@ -39829,10 +39831,14 @@ jak_care // jak_nick // jak_sbfc // lexizeus // Lexibook +lexiseal // vii // KenSingTon / Jungle Soft / Siatronics Vii wirels60 // Wireless 60 zone40 // Zone 40 zone60 // Zone 60 +zone100 // +mywicodx // +zon32bit // Zone 32-bit lx_jg7415 // rad_skat // rad_skatp // @@ -39850,6 +39856,7 @@ shredmjr // sentx6p // telestry // wiwi18 // +pdc100 @source:vsmile.cpp vsmile //