summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author David Haywood <28625134+DavidHaywood@users.noreply.github.com>2020-01-18 23:16:35 +0000
committer ajrhacker <ajrhacker@users.noreply.github.com>2020-01-18 18:16:35 -0500
commit8db8ea427e86323ac39dad612fe842a40c587ac6 (patch)
treed2055d74c23a7f79a1b1878c07d01e54646d82e1
parent0706ebf694df8ceffdb12b8f4fd7a929c357e450 (diff)
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)
-rw-r--r--src/mame/drivers/sunplus_gcm394.cpp210
-rw-r--r--src/mame/drivers/vii.cpp484
-rw-r--r--src/mame/drivers/vt1682.cpp70
-rw-r--r--src/mame/mame.lst7
4 files changed, 752 insertions, 19 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<i2cmem_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<uint16_t> 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)
+
+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)
{
- return m_w60_porta_data;
+ 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, "<unknown>", "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 //