diff options
author | David Haywood <mamehaze@gmail.com> | 2019-03-05 22:46:54 +0000 |
---|---|---|
committer | ajrhacker <ajrhacker@users.noreply.github.com> | 2019-03-05 17:46:54 -0500 |
commit | 390b7c812c2195656e0fcede2fe86063f462b3fe (patch) | |
tree | b4fd9d85eec0d9337c5d8c72636d58c633036ca8 /src/mame/drivers/vii.cpp | |
parent | 6b67495d92534dbba92142373503b4eabc56515a (diff) |
new NOT WORKING clones (JAKKS Pacific / SunPlus) + WORKING machine (Geigeki Shooter XaviX) etc. (#4714)
* new NOT WORKING
---
Spider-Man (JAKKS Pacific TV Game) (older hardare) [Sean Riddle, external donators]
looks like this is SPG110 or similar, die markings to be confirmed, does things a little different to Pinball, so might just be a different mode, or slightly different die, we'll find out later.
* new NOT WORKING machines
---
I Can Play Piano [Sean Riddle, external donators]
new NOT WORKING software list entries
---
icanpian:pianfav Piano Favorites [Sean Riddle, external donators]
* specify unsupported (nw)
* (nw)
* add a known cartridges list to icanpian (nw)
* list some known carts here too (nw)
* (nw)
* visual inspection of die from Sean suggests it's the same (nw)
* (nw)
* add pinout information from Sean for the I Can Play Guitar and Piano carts
* new WORKING machines
---
Geigeki Go Go Shooting (Japan) [Peter Wilhelmsen, Sean Riddle, ShouTime, David Haywood]
new NOT WORKING machines
---
e-kara Mix (Japan) [Peter Wilhelmsen, Sean Riddle, ShouTime, David Haywood]
(e-kara mix is designed to connect to a PC, don't think it displays other than the startup warning message unless you do that, might also require specific carts)
Diffstat (limited to 'src/mame/drivers/vii.cpp')
-rw-r--r-- | src/mame/drivers/vii.cpp | 222 |
1 files changed, 189 insertions, 33 deletions
diff --git a/src/mame/drivers/vii.cpp b/src/mame/drivers/vii.cpp index 0e45470cb93..96b723e2a3f 100644 --- a/src/mame/drivers/vii.cpp +++ b/src/mame/drivers/vii.cpp @@ -7,38 +7,53 @@ Systems which run on the SPG243 SoC die markings show - "SunPlus QL8041" ( known as Sunplus SPG240? ) - JAKKS WWE - Fantastic 4 - Justice League - Dora the Explorer - Mattel Classic Sports + "SunPlus QL8041" ( also known as Sunplus SPG240 & PAC300 ) + + (all GameKeyReady units?) Disney Princess (GKR) Wheel of Fortune (GKR) - (all GameKeyReady units?) - - "SunPlus QL8041C" ( known as Sunplus SPG2?? ) + 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 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 "SunPlus PA7801" ( known as Sunplus SPG110? ) see spg110.cpp instead Classic Arcade Pinball EA Sports (NHL95 + Madden 95) + Spiderman 5-in-1 (original release) It is unknown if the following are close to this architecture or not (no dumps yet) "SunPlus QU7073-P69A" Mortal Kombat + "Sunplus PU7799-P680?" (difficult to read) + Mission Paintball + "Sunplus QL8167" - Disney Princess (older) + 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 non-GKR is Sunplus QL8167. - - Status: + Status: Mostly working @@ -271,6 +286,7 @@ public: { } void icanguit(machine_config &config); + void icanpian(machine_config &config); private: virtual void machine_start() override; @@ -976,52 +992,52 @@ INPUT_PORTS_END static INPUT_PORTS_START( icanguit ) // this has something like 55 buttons, and some strings to map, must be multiplexed somehow? PORT_START("P1") - PORT_DIPNAME( 0x0001, 0x0001, "P1" ) + PORT_DIPNAME( 0x0001, 0x0000, "P1" ) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -1076,10 +1092,87 @@ static INPUT_PORTS_START( icanguit ) // this has something like 55 buttons, and PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_START("P3") - PORT_DIPNAME( 0x0001, 0x0001, "P3" ) + PORT_DIPNAME( 0x0001, 0x0000, "P3" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // Enter? + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // presumably power, kils the game + PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( icanpian ) // this has an entire piano keyboard + extras + PORT_START("P1") // the keyboard keys are in here, but each seems triple mapped to 3 octaves so there must be multiplexing + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON4 ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON5 ) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON6 ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON7 ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON8 ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON9 ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON10 ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON11 ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON12 ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON13 ) + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON14 ) + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON15 ) + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, 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_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) // Enter? + 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 ) ) @@ -1104,7 +1197,9 @@ static INPUT_PORTS_START( icanguit ) // this has something like 55 buttons, and PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // presumably power, kils the game + 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 ) ) @@ -1120,6 +1215,44 @@ static INPUT_PORTS_START( icanguit ) // this has something like 55 buttons, and PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START("P3") + PORT_DIPNAME( 0x0001, 0x0000, "P3" ) // must be 'ON' to boot + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON3 ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // presumably power, kils the game + PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) INPUT_PORTS_END @@ -1475,6 +1608,24 @@ void icanguit_state::icanguit(machine_config &config) SOFTWARE_LIST(config, "icanguit_cart").set_original("icanguit"); } +void icanguit_state::icanpian(machine_config &config) +{ + SPG24X(config, m_spg, XTAL(27'000'000), m_maincpu, m_screen); + + spg2xx_base(config); + + m_spg->porta_in().set_ioport("P1"); + m_spg->portb_in().set_ioport("P2"); + m_spg->portc_in().set_ioport("P3"); + + GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "icanpian_cart"); + m_cart->set_width(GENERIC_ROM16_WIDTH); + m_cart->set_device_load(device_image_load_delegate(&icanguit_state::device_image_load_icanguit_cart, this)); + m_cart->set_must_be_loaded(true); + + SOFTWARE_LIST(config, "icanpian_cart").set_original("icanpian"); +} + void spg2xx_game_state::wireless60(machine_config &config) { @@ -1858,6 +2009,10 @@ ROM_START( icanguit ) // no internal ROM, requires a cartridge ROM_END +ROM_START( icanpian ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + // no internal ROM, requires a cartridge +ROM_END /* Wireless Air 60 @@ -2078,6 +2233,7 @@ CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, emp 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 ) // 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 |