diff --git a/hash/jpopira_jp.xml b/hash/jpopira_jp.xml
index e37e8b367c2..8e2d26067a8 100644
--- a/hash/jpopira_jp.xml
+++ b/hash/jpopira_jp.xml
@@ -23,7 +23,7 @@
2004
Takara
-
+
@@ -35,7 +35,7 @@
2004
Takara
-
+
diff --git a/src/mame/drivers/vii.cpp b/src/mame/drivers/vii.cpp
index 26371ff641c..fa6087e3333 100644
--- a/src/mame/drivers/vii.cpp
+++ b/src/mame/drivers/vii.cpp
@@ -9,49 +9,67 @@
die markings show
"SunPlus QL8041" ( also known as Sunplus SPG240 & PAC300 )
- (all GameKeyReady units?)
- Disney Princess (GKR)
- Wheel of Fortune (GKR)
- JAKKS WWE (GKR)
- Fantastic 4 (GKR)
- Justice League (GKR)
- Dora the Explorer Nursery Rhyme (GKR)
- Dora the Explorer Play Park (GKR)
- Spiderman 5-in-1 (GKR)
- etc.
+ (all GameKeyReady units?)
+ Disney Princess (GKR)
+ Wheel of Fortune (GKR)
+ JAKKS WWE (GKR)
+ Fantastic 4 (GKR)
+ Justice League (GKR)
+ Dora the Explorer Nursery Rhyme (GKR)
+ Dora the Explorer Play Park (GKR)
+ Spiderman 5-in-1 (GKR)
+ etc.
- (other non GKR JAKKS games)
- X-Men (Wolverine pad)
- Avatar: The Last Airbender
+ (other non GKR JAKKS games)
+ X-Men (Wolverine pad)
+ Avatar: The Last Airbender
- (other games)
- Mattel Classic Sports
+ (other games)
+ Mattel Classic Sports
"SunPlus QL8041C" ( known as Sunplus SPG2??, seems to be compatible with above, so probably just a chip revision )
- Clickstart ( see clickstart.cpp instead)
- Wheel of Fortune 2nd Edition
- Spider-man - Villain Roundup
+
+ Clickstart ( see clickstart.cpp instead)
+ Wheel of Fortune 2nd Edition
+ Spider-man - Villain Roundup
- "SunPlus PA7801" ( known as Sunplus SPG110? ) see spg110.cpp instead
- Classic Arcade Pinball
- EA Sports (NHL95 + Madden 95)
- Spiderman 5-in-1 (original release)
+ "SunPlus QU7074-P69A"
+
+ The Batman
+
+ ---
It is unknown if the following are close to this architecture or not (no dumps yet)
"SunPlus QU7073-P69A"
- Mortal Kombat
+ Mortal Kombat
+
"Sunplus PU7799-P680?" (difficult to read)
- Mission Paintball
+
+ Mission Paintball
"Sunplus QL8167"
- Disney Princess (newer?)
- Go Diego Go
- Shrek - Over the Hedge (this unit shows a GameKey Unlock More Games' on startup, but has no port, not even on the internal PCB)
- Marvel Heroes (Spider-man)
- Spiderman 3 (Movie - black)
+ Disney Princess (newer?)
+ Go Diego Go
+ Shrek - Over the Hedge (this unit shows a GameKey Unlock More Games' on startup, but has no port, not even on the internal PCB)
+ Marvel Heroes (Spider-man)
+ Spiderman 3 (Movie - black)
+
+ ---
+
+ These are definitely different
+
+ "SunPlus PA7801" ( known as Sunplus SPG110? ) see spg110.cpp instead
+
+ Classic Arcade Pinball
+ EA Sports (NHL95 + Madden 95)
+ Spiderman 5-in-1 (original release)
+
+ "GCM394" (this is clearly newer, has extra opcodes, different internal map etc.)
+
+ Smart Fit Park
Status:
@@ -2244,6 +2262,13 @@ ROM_START( dreamlif )
ROM_LOAD16_WORD_SWAP( "dreamlife.bin", 0x000000, 0x800000, CRC(632e0237) SHA1(a8586e8a626d75cf7782f13cfd9f1b938af23d56) )
ROM_END
+ROM_START( smartfp )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "smartfitpark.bin", 0x000000, 0x800000, CRC(ada84507) SHA1(a3a80bf71fae62ebcbf939166a51d29c24504428) )
+ROM_END
+
+
+
ROM_START( icanguit )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
// no internal ROM, requires a cartridge
@@ -2474,8 +2499,10 @@ CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, emp
// Hasbro games
CONS( 2007, dreamlif, 0, 0, rad_skat, rad_crik, spg2xx_game_state, empty_init, "Hasbro", "Dream Life", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-CONS( 2007, icanguit, 0, 0, icanguit, icanguit, icanguit_state, empty_init, "Mattel / Fisher-Price", "I Can Play Guitar", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-CONS( 2007, icanpian, 0, 0, icanpian, icanpian, icanguit_state, empty_init, "Mattel / Fisher-Price", "I Can Play Piano", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+
+
+CONS( 2007, icanguit, 0, 0, icanguit, icanguit, icanguit_state, empty_init, "Fisher-Price", "I Can Play Guitar", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2007, icanpian, 0, 0, icanpian, icanpian, icanguit_state, empty_init, "Fisher-Price", "I Can Play Piano", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// might not fit here. First 0x8000 bytes are blank (not too uncommon for these) then rest of rom looks like it's probably encrypted at least
// could be later model VT based instead? even after decrypting (simple word xor) the vectors have a different format and are at a different location to the SunPlus titles
@@ -2487,6 +2514,9 @@ CONS( 200?, lexizeus, 0, 0, lexizeus, lexizeus, spg2xx_game_stat
// valid looking code, but extended periperhal area (twice the size?) makes use of unemulated opcode 0xfe00 ?
CONS( 2011, wrlshunt, 0, 0, non_spg_base, wirels60, spg2xx_game_state, empty_init, "Hamy / Kids Station Toys Inc", "Wireless Hunting Video Game System", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
+// extended opcodes different internal map?
+CONS( 2009, smartfp, 0, 0, non_spg_base, wirels60, spg2xx_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+// Fun 2 Learn 3-in-1 SMART SPORTS ?
// NAND dumps w/ internal bootstrap. Almost certainly do not fit in this driver, as the SPG2xx can only address up to 4Mwords. These are 'GeneralPlus' instead?
CONS( 2010, wlsair60, 0, 0, non_spg_base, wirels60, spg2xx_game_state, empty_init, "Jungle Soft / Kids Station Toys Inc", "Wireless Air 60", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp
index f68ab35d8c9..e5f3630d937 100644
--- a/src/mame/drivers/xavix.cpp
+++ b/src/mame/drivers/xavix.cpp
@@ -634,6 +634,21 @@ static INPUT_PORTS_START( taikodp )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xavix_i2c_cart_state,i2c_r, nullptr)
INPUT_PORTS_END
+static INPUT_PORTS_START( jpopira )
+ PORT_INCLUDE(xavix)
+
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Pad 1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Pad 2")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Pad 3")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Pad 4")
+
+ PORT_MODIFY("IN1")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xavix_i2c_cart_state,i2c_r, nullptr)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // pressing this will turn the game off.
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( xavixp )
PORT_INCLUDE(xavix)
@@ -1559,8 +1574,18 @@ void xavix_i2c_cart_state::xavix_i2c_taiko(machine_config &config)
SOFTWARE_LIST(config, "cart_list_japan_d").set_original("ekara_japan_d");
SOFTWARE_LIST(config, "cart_list_japan_sp").set_original("ekara_japan_sp");
+}
- // do any of the later G/P series carts with SEEPROM work with this too? check
+void xavix_i2c_cart_state::xavix_i2c_jpopira(machine_config &config)
+{
+ xavix_cart(config);
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
+
+ I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x100); // 24LC02
+
+ SOFTWARE_LIST(config, "cart_list_jpopira_jp").set_original("jpopira_jp"); // NOTE, these are for Jumping Popira only, they don't work with the karaoke or regular popira units
+ SOFTWARE_LIST(config, "cart_list_japan_sp").set_original("ekara_japan_sp");
}
void xavix_cart_state::xavix_cart_ekara(machine_config &config)
@@ -1582,7 +1607,6 @@ void xavix_cart_state::xavix_cart_ekara(machine_config &config)
SOFTWARE_LIST(config, "cart_list_japan_a").set_original("ekara_japan_a");
SOFTWARE_LIST(config, "cart_list_japan_gk").set_original("ekara_japan_gk");
SOFTWARE_LIST(config, "cart_list_japan_bh").set_original("ekara_japan_bh");
- SOFTWARE_LIST(config, "cart_list_jpopira_jp").set_original("jpopira_jp"); // NOTE, these are for Jumping Popira only, they don't work with the karaoke or regular popira units
}
void xavix_cart_state::xavix_cart_popira(machine_config &config)
@@ -1891,6 +1915,15 @@ ROM_START( taikodp )
ROM_RELOAD(0x000000, 0x200000)
ROM_END
+ROM_START( jpopira )
+ ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
+ ROM_LOAD( "jumpingpopira.bin", 0x600000, 0x200000, CRC(a7bedbd2) SHA1(d62d4ca660c8df14891217fb7b7a2b4a931ff35f) )
+ ROM_RELOAD(0x000000, 0x200000)
+
+ ROM_REGION( 0x100, "i2cmem", ROMREGION_ERASE00 ) // maybe we can remove this eventually, but for now it won't init without a reset between
+ ROM_LOAD( "i2cmem.bin", 0x000, 0x100, CRC(70a05af1) SHA1(e8f4ab51445777fe459f9ff09333f548c4e3507c) )
+ROM_END
+
ROM_START( evio )
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "evio.bin", 0x600000, 0x200000, CRC(ee22c764) SHA1(f2b7e213eb78065a63ef484a619bcfc61299e30e))
@@ -2008,6 +2041,9 @@ CONS( 2002, popira2, 0, 0, xavix_cart_popira,popira2, xavix_popira2
CONS( 2003, taikodp, 0, 0, xavix_i2c_taiko, taikodp, xavix_i2c_cart_state, init_xavix, "Takara / SSD Company LTD", "Taiko De Popira (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ ) // inputs? are the drums analog?
+CONS( 2004, jpopira, 0, 0, xavix_i2c_jpopira,jpopira, xavix_i2c_cart_state, init_xavix, "Takara / SSD Company LTD", "Jumping Popira (Japan)", MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ )
+
+
CONS( 2003, evio, 0, 0, xavix_nv, evio, xavix_state, init_xavix, "Tomy / SSD Company LTD", "Evio (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ ) // inputs? it's a violin controller
@@ -2020,7 +2056,7 @@ CONS( 2006, ltv_tam, 0, 0, xavix_i2c_24lc04, ltv_tam,xavix_i2c_ltv_
these use the SSD 2000 NEC 85605-621 type CPU
XavixPort Golf is "SSD 2003 SuperXaviX MXIC 2003 3009" (not dumped yet, but actually marked as SuperXaviX unlike the others!)
-
+
This CPU type adds extra opcodes that don't appear to be present in the 97/98 types
It does not appear to support the bitmap modes or 16-bit ROMs found in the 2002 type
*/
diff --git a/src/mame/includes/xavix.h b/src/mame/includes/xavix.h
index b37185ec0c5..9bcd83ac4cc 100644
--- a/src/mame/includes/xavix.h
+++ b/src/mame/includes/xavix.h
@@ -903,6 +903,7 @@ public:
{ }
void xavix_i2c_taiko(machine_config &config);
+ void xavix_i2c_jpopira(machine_config &config);
DECLARE_CUSTOM_INPUT_MEMBER(i2c_r);
diff --git a/src/mame/machine/xavix.cpp b/src/mame/machine/xavix.cpp
index db535016a88..2745b98b078 100644
--- a/src/mame/machine/xavix.cpp
+++ b/src/mame/machine/xavix.cpp
@@ -547,12 +547,16 @@ CUSTOM_INPUT_MEMBER(xavix_ekara_state::ekara_multi1_r)
uint8_t xavix_state::read_io0(uint8_t direction)
{
+// LOG("%s: read_io0\n", machine().describe_context());
+
// no special handling
return m_in0->read();
}
uint8_t xavix_state::read_io1(uint8_t direction)
{
+// LOG("%s: read_io1\n", machine().describe_context());
+
// no special handling
return m_in1->read();
}
@@ -605,8 +609,15 @@ void xavix_i2c_ltv_tam_state::write_io1(uint8_t data, uint8_t direction)
// for taikodp
void xavix_i2c_cart_state::write_io1(uint8_t data, uint8_t direction)
{
- m_i2cmem->write_sda((data & 0x08) >> 3);
- m_i2cmem->write_scl((data & 0x10) >> 4);
+ if (direction & 0x08)
+ {
+ m_i2cmem->write_sda((data & 0x08) >> 3);
+ }
+
+ if (direction & 0x10)
+ {
+ m_i2cmem->write_scl((data & 0x10) >> 4);
+ }
}
void xavix_ekara_state::write_io0(uint8_t data, uint8_t direction)
@@ -713,14 +724,14 @@ READ8_MEMBER(xavix_state::io1_direction_r)
WRITE8_MEMBER(xavix_state::io0_data_w)
{
m_io0_data = data;
- write_io0(data, m_io0_direction);
+ write_io0((data & m_io0_direction) | (read_io0(m_io0_direction) & ~m_io0_direction), m_io0_direction);
LOG("%s: io0_data_w %02x\n", machine().describe_context(), data);
}
WRITE8_MEMBER(xavix_state::io1_data_w)
{
m_io1_data = data;
- write_io1(data, m_io1_direction);
+ write_io1((data & m_io1_direction) | (read_io1(m_io1_direction) & ~m_io1_direction), m_io1_direction);
LOG("%s: io1_data_w %02x\n", machine().describe_context(), data);
}
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index fee4b9978fd..4e370156594 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -38762,6 +38762,7 @@ rad_crik //
rad_fb2 //
mattelcs //
dreamlif //
+smartfp //
icanguit //
icanpian //
@@ -39949,6 +39950,7 @@ ddrfammt //
popira //
popira2 //
taikodp //
+jpopira //
evio //
ttv_sw //
ttv_lotr //