summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author David Haywood <28625134+DavidHaywood@users.noreply.github.com>2020-07-05 16:39:33 +0100
committer GitHub <noreply@github.com>2020-07-05 11:39:33 -0400
commit07e7e599a0414d549c8bdc1c1ca3fc09f6575fa9 (patch)
tree2af226f54fd774b3564847e16e0a0947602b189e
parent625339d7ab035c452b346f8a69d156926ee8a40b (diff)
new WORKING machines (plug and play) (#6909)
new WORKING machines --- Totally Spies! (France) [TeamEurope, David Haywood] PDC150 Tactile - Pocket Dream Console (VideoJet, France) [TeamEurope, David Haywood] PDC200 - Pocket Dream Console (VideoJet, France) [TeamEurope, David Haywood] Guitar Buster [Sean Riddle, David Haywood] new NOT WORKING machines --- Marvel Avengers TV Game Console (32-bit) (Lexibook) [TeamEurope, David Haywood] Wireless Duet Play Ping-Pong [Sean Riddle, David Haywood, Dave 'Foxhack' Silva] new NOT WORKING software list entries --- tvgogo.xml: Basketball (US) [Sean Riddle, David Haywood]
-rw-r--r--hash/tvgogo.xml13
-rw-r--r--src/mame/drivers/generalplus_gpl16250_nand.cpp2
-rw-r--r--src/mame/drivers/nes_vt.cpp80
-rw-r--r--src/mame/drivers/spg29x_lexibook_jg7425.cpp12
-rw-r--r--src/mame/drivers/spg2xx.cpp42
-rw-r--r--src/mame/drivers/spg2xx_pdc.cpp154
-rw-r--r--src/mame/drivers/spg2xx_wiwi.cpp137
-rw-r--r--src/mame/includes/spg2xx.h4
-rw-r--r--src/mame/mame.lst6
9 files changed, 413 insertions, 37 deletions
diff --git a/hash/tvgogo.xml b/hash/tvgogo.xml
index af2624f51c7..db1b18e9143 100644
--- a/hash/tvgogo.xml
+++ b/hash/tvgogo.xml
@@ -9,7 +9,7 @@ Dumped | Dumped | Name |Notes
_(EU)__|__(US)__|____________|_____________________________________
Y* | Y | 4 in 1 |No controller
Y | Y | Whac-A-Mole|Hammer-shaped IR motion controller
- Y | - | Basketball |Ball-shaped motion controller
+ Y | Y | Basketball |Ball-shaped motion controller
Y | | Tennis |Racquet-shaped IR motion controller
| Y | Dodgeball |Motion controller
| Y | Baseball |Baseball Bat shaped motion controller
@@ -115,5 +115,16 @@ _(EU)__|__(US)__|____________|_____________________________________
</dataarea>
</part>
</software>
+
+ <software name="basketbalu" cloneof="basketbal" supported="no">
+ <description>Basketball (US)</description>
+ <year>2005</year>
+ <publisher>Toyquest</publisher>
+ <part name="cart" interface="tvgogo_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="gogobasketball_m5m29gt320_001c0020.bin" size="0x400000" crc="dfdec0c6" sha1="7b3cc68f54b43e839beac8ed0806a005919f61b1"/>
+ </dataarea>
+ </part>
+ </software>
</softwarelist>
diff --git a/src/mame/drivers/generalplus_gpl16250_nand.cpp b/src/mame/drivers/generalplus_gpl16250_nand.cpp
index e1eae87e606..11f3458faa4 100644
--- a/src/mame/drivers/generalplus_gpl16250_nand.cpp
+++ b/src/mame/drivers/generalplus_gpl16250_nand.cpp
@@ -840,7 +840,7 @@ void generalplus_gpac800_game_state::nand_beambox()
// NAND dumps w/ internal bootstrap (and u'nSP 2.0 extended opcodes) (have gpnandnand strings)
// the JAKKS ones seem to be known as 'Generalplus GPAC800' hardware
-CONS(2010, wlsair60, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_wlsair60, "Jungle Soft / Kids Station Toys Inc", "Wireless Air 60", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
+CONS(2010, wlsair60, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_wlsair60, "Jungle Soft / Kids Station Toys Inc", "Wireless Air 60", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) // some of th games seem to be based on ones found in the 'Millennium Arcade' multigames (WinFun related) so might have the same external timer check
CONS(200?, beambox, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_beambox, "Hasbro", "Playskool Heroes Transformers Rescue Bots Beam Box (Spain)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
CONS(200?, mgtfit, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_wlsair60, "MGT", "Fitness Konsole (NC1470)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) // probably has other names in English too? menus don't appear to be in German
CONS(200?, vbaby, 0, 0, generalplus_gpac800_vbaby, jak_car2, generalplus_gpac800_vbaby_game_state, nand_vbaby, "VTech", "V.Baby", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
diff --git a/src/mame/drivers/nes_vt.cpp b/src/mame/drivers/nes_vt.cpp
index 653ef17ac1c..ebfaf854049 100644
--- a/src/mame/drivers/nes_vt.cpp
+++ b/src/mame/drivers/nes_vt.cpp
@@ -176,6 +176,24 @@ public:
void nes_vt_waixing_alt_pal_8mb(machine_config& config);
};
+class nes_vt_waixing_alt_duetpp_state : public nes_vt_waixing_alt_state
+{
+public:
+ nes_vt_waixing_alt_duetpp_state(const machine_config& mconfig, device_type type, const char* tag) :
+ nes_vt_waixing_alt_state(mconfig, type, tag)
+ { }
+
+ void nes_vt_waixing_alt_4mb_duetpp(machine_config& config);
+
+private:
+ uint8_t in1_r() override
+ {
+ uint8_t i = machine().rand() & 0x18;
+ uint8_t ret = m_io1->read() & ~0x18;
+ return i | ret;
+ }
+};
+
class nes_vt_timetp36_state : public nes_vt_state
{
@@ -356,6 +374,8 @@ public:
m_ablpinb_in0_val(0),
m_plunger(*this, "PLUNGER")
{ }
+
+ void nes_vt_waixing_alt_4mb_duetpp(machine_config& config);
protected:
virtual void machine_start() override;
@@ -881,6 +901,19 @@ void nes_vt_waixing_alt_state::nes_vt_waixing_alt_pal_8mb(machine_config &config
m_soc->set_8000_scramble(0x5, 0x4, 0x3, 0x2, 0x7, 0x6, 0x7, 0x8);
}
+void nes_vt_waixing_alt_duetpp_state::nes_vt_waixing_alt_4mb_duetpp(machine_config& config)
+{
+ NES_VT_SOC(config, m_soc, NTSC_APU_CLOCK);
+ configure_soc(m_soc);
+
+ m_soc->set_addrmap(AS_PROGRAM, &nes_vt_ablping_state::vt_external_space_map_4mbyte);
+ m_soc->set_201x_descramble(0x3, 0x2, 0x7, 0x6, 0x5, 0x4);
+ m_soc->set_8000_scramble(0x5, 0x4, 0x3, 0x2, 0x7, 0x6, 0x7, 0x8);
+
+ GFXDECODE(config, "gfxdecode", "soc:ppu", vt03_gfx_helper);
+}
+
+
void nes_vt_hum_state::nes_vt_hummer_2mb(machine_config& config)
{
NES_VT_SOC(config, m_soc, NTSC_APU_CLOCK);
@@ -1364,6 +1397,46 @@ static INPUT_PORTS_START( ablpinb )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("NUDGE" )
INPUT_PORTS_END
+
+static INPUT_PORTS_START( duetpp )
+ PORT_START("IO0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("2")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_PLAYER(1)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_PLAYER(1)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+
+ PORT_START("IO1")
+ PORT_DIPNAME( 0x0001, 0x0001, "P2:0001" )
+ PORT_DIPSETTING( 0x0000, "0000" )
+ PORT_DIPSETTING( 0x0001, "0001" )
+ PORT_DIPNAME( 0x0002, 0x0002, "P2:0002" )
+ PORT_DIPSETTING( 0x0000, "0000" )
+ PORT_DIPSETTING( 0x0002, "0002" )
+ PORT_DIPNAME( 0x0004, 0x0004, "P2:0004" )
+ PORT_DIPSETTING( 0x0000, "0000" )
+ PORT_DIPSETTING( 0x0004, "0004" )
+ PORT_DIPNAME( 0x0008, 0x0008, "P2:0008" )
+ PORT_DIPSETTING( 0x0000, "0000" )
+ PORT_DIPSETTING( 0x0008, "0008" )
+ PORT_DIPNAME( 0x0010, 0x0010, "P2:0010" )
+ PORT_DIPSETTING( 0x0000, "0000" )
+ PORT_DIPSETTING( 0x0010, "0010" )
+ PORT_DIPNAME( 0x0020, 0x0020, "P2:0020" )
+ PORT_DIPSETTING( 0x0000, "0000" )
+ PORT_DIPSETTING( 0x0020, "0020" )
+ PORT_DIPNAME( 0x0040, 0x0040, "P2:0040" )
+ PORT_DIPSETTING( 0x0000, "0000" )
+ PORT_DIPSETTING( 0x0040, "0040" )
+ PORT_DIPNAME( 0x0080, 0x0080, "P2:0080" )
+ PORT_DIPSETTING( 0x0000, "0000" )
+ PORT_DIPSETTING( 0x0080, "0080" )
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( sudoku )
PORT_INCLUDE(nes_vt)
INPUT_PORTS_END
@@ -1637,6 +1710,11 @@ ROM_START( silv35 )
ROM_LOAD( "silverlit35.bin", 0x00000, 0x400000, CRC(7540e350) SHA1(a0cb456136560fa4d8a365dd44d815ec0e9fc2e7) )
ROM_END
+ROM_START( duetpp )
+ ROM_REGION( 0x400000, "mainrom", 0 )
+ ROM_LOAD( "gamesporzduetpingpong.bin", 0x00000, 0x400000, CRC(96af199b) SHA1(c14ff15683545c1edf03376cebcee7ac408da733) )
+ROM_END
+
ROM_START( lpgm240 )
ROM_REGION( 0x800000, "mainrom", 0 )
ROM_LOAD( "w25q64jv.u1", 0x00000, 0x800000, CRC(b973e65b) SHA1(36ff137068ea56b4679c2db386ac0067de0a9eaf) )
@@ -1957,6 +2035,8 @@ CONS( 200?, vtboxing, 0, 0, nes_vt_512kb, nes_vt, nes_vt_state, empty_init
// 050329 (29th March 2005) date on PCB
CONS( 2005, ablpinb, 0, 0, nes_vt_pal_2mb, ablpinb, nes_vt_ablpinb_state, empty_init, "Advance Bright Ltd", "Pinball (P8002, ABL TV Game)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+// need to map 2 player controls for Ping Pong, 'Eat-Bean' (the PacMan hack) gets stuck during intermission?
+CONS( 200?, duetpp, 0, 0, nes_vt_waixing_alt_4mb_duetpp, duetpp, nes_vt_waixing_alt_duetpp_state, empty_init, "Game Sporz", "Wireless Duet Play Ping-Pong", MACHINE_NOT_WORKING )
// Black pad marked 'SUDOKU' with tails on the S and U characters looping over the logo. Box says "Plug and Play Sudoku"
// Has 2 sets of 4 buttons in circular 'direction pad' layouts (on the left for directions, on the right for functions) and 9 red numbered buttons with red power LED on left of them, and reset button on right
diff --git a/src/mame/drivers/spg29x_lexibook_jg7425.cpp b/src/mame/drivers/spg29x_lexibook_jg7425.cpp
index c8fecbcb964..24efca6eed2 100644
--- a/src/mame/drivers/spg29x_lexibook_jg7425.cpp
+++ b/src/mame/drivers/spg29x_lexibook_jg7425.cpp
@@ -12,7 +12,7 @@ compressed with "chdman createhd -i 4GBSD.img -o lexibook_jg7425_4gbsd.chd" (is
TODO:
is there an internal ROM / bootstrap area, or does this SunPlus core use vectors in a different way to the one in hyperscan.cpp?
-If SPG290, should probably be merged with hyperscan.cpp
+If SPG290, should probably be merged with hyperscan.cpp (it is)
(only noteworthy features of PCB are ROM + RAM + Cpu Glob)
@@ -106,4 +106,14 @@ ROM_START( lx_jg7425 )
DISK_IMAGE( "lexibook_jg7425_4gbsd", 0, SHA1(dc0985103edec3992efdd493feef6185daedb3fd) )
ROM_END
+ROM_START( lx_aven )
+ ROM_REGION( 0x200000, "maincpu", ROMREGION_32BIT | ROMREGION_LE )
+ ROM_LOAD32_DWORD( "29lv800.bin", 0x000000, 0x100000, CRC(7b107f6c) SHA1(3a8e37e51dab5cab9977261e0ac17ba5194a9370) )
+
+ DISK_REGION( "ata:0:hdd:image" ) /* 4GB SD Card */
+ DISK_IMAGE( "sd-card", 0, SHA1(911da7bf7dac391e3329e17e3f411caafac52f0f) )
+ROM_END
+
+
CONS( 2015, lx_jg7425, 0, 0, lexibook_jg7425, lexibook_jg7425, lexibook_jg7425_state, empty_init, "Lexibook", "Lexibook JG7425 221-in-1", MACHINE_IS_SKELETON )
+CONS( 201?, lx_aven, 0, 0, lexibook_jg7425, lexibook_jg7425, lexibook_jg7425_state, empty_init, "Lexibook", "Marvel Avengers TV Game Console (32-bit) (Lexibook)", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/spg2xx.cpp b/src/mame/drivers/spg2xx.cpp
index da737f067dd..0c94f913a2d 100644
--- a/src/mame/drivers/spg2xx.cpp
+++ b/src/mame/drivers/spg2xx.cpp
@@ -662,6 +662,30 @@ static INPUT_PORTS_START( fordrace )
PORT_BIT(0x1fff, 0x0000, IPT_AD_STICK_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(100) PORT_MINMAX(0x00,0x1fff) PORT_NAME("Wheel")
INPUT_PORTS_END
+static INPUT_PORTS_START( totspies )
+ PORT_INCLUDE( spg2xx )
+
+ PORT_MODIFY("P1")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("B")
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("A")
+ PORT_BIT( 0xff80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_MODIFY("P2")
+ PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ // unit also has a 'select' button next to 'OK' and while test mode shows it onscreen too, it doesn't get tested, so probably isn't connected to anything?
+ PORT_MODIFY("P3")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("OK")
+ PORT_BIT( 0xfffe, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
+
+
CUSTOM_INPUT_MEMBER(spg2xx_game_fordrace_state::wheel_r)
{
return ioport("WHEEL_REAL")->read() >> 1;
@@ -1025,6 +1049,13 @@ void spg2xx_game_state::spg2xx(machine_config &config)
m_maincpu->portc_in().set(FUNC(spg2xx_game_state::base_portc_r));
}
+void spg2xx_game_state::spg2xx_pal(machine_config& config)
+{
+ spg2xx(config);
+
+ m_maincpu->set_pal(true);
+ m_screen->set_refresh_hz(50);
+}
void spg2xx_game_fordrace_state::fordrace(machine_config &config)
{
@@ -1481,6 +1512,11 @@ ROM_START( abltenni )
ROM_LOAD16_WORD_SWAP( "ablpnpwirelesstennis.bin", 0x000000, 0x400000, CRC(66bd8ef1) SHA1(a83640d5d9e84e10d29a065a61e0d7bbec16c6e4) )
ROM_END
+ROM_START( totspies )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "w321tg.u2", 0x000000, 0x400000, CRC(76152ad7) SHA1(b37ea950670eb927f3f0ab5e38d0e2a5f3ca7904) )
+ROM_END
+
ROM_START( ablkickb )
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "ablkickboxing.bin", 0x000000, 0x800000, CRC(61394c45) SHA1(291d28a39edcb32a8f5d776a5e5c05e6fd0abece) )
@@ -1657,11 +1693,13 @@ CONS( 2006, rad_crik, 0, 0, rad_crik, rad_crik, spg2xx_game_state,
CONS( 2007, rad_fb2, 0, 0, rad_skat, rad_fb2, spg2xx_game_state, init_crc, "Radica", "Play TV Football 2", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // offers a 2 player option in menus, but seems to have only been programmed for, and released as, a single player unit, P2 controls appear unfinished.
// ABL TV Games
-CONS( 2006, abltenni, 0, 0, spg2xx, abltenni, spg2xx_game_state, empty_init, "f / V-Tac Technology Co Ltd.", "Wireless Tennis (WT2000, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2006, abltenni, 0, 0, spg2xx, abltenni, spg2xx_game_state, empty_init, "Advance Bright Ltd / V-Tac Technology Co Ltd.", "Wireless Tennis (WT2000, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2006, ablkickb, 0, 0, ablkickb, ablkickb, spg2xx_game_albkickb_state, init_ablkickb, "Advance Bright Ltd / Coleco / V-Tac Technology Co Ltd.", "Kick Boxing (BJ8888, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // 4 motion sensors, one for each limb
-CONS( 2007, lxspidaj, 0, 0, spg2xx, lxspidaj, spg2xx_game_albkickb_state, init_ablkickb, "Lexibook", "Spider-Man Super TV Air Jet (Lexibook Junior, JG6000SP)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2007, lxspidaj, 0, 0, spg2xx_pal,lxspidaj, spg2xx_game_albkickb_state, init_ablkickb, "Lexibook", "Spider-Man Super TV Air Jet (Lexibook Junior, JG6000SP)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+
+CONS( 2006, totspies, 0, 0, spg2xx_pal,totspies, spg2xx_game_state, empty_init, "Senario / Marathon - Mystery Animation Inc.", "Totally Spies! (France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2006, fordrace, 0, 0, fordrace, fordrace, spg2xx_game_fordrace_state, empty_init, "Excalibur Electronics", "Ford Racing", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/spg2xx_pdc.cpp b/src/mame/drivers/spg2xx_pdc.cpp
index 04f17451600..431a4dd9deb 100644
--- a/src/mame/drivers/spg2xx_pdc.cpp
+++ b/src/mame/drivers/spg2xx_pdc.cpp
@@ -5,10 +5,10 @@
#include "includes/spg2xx.h"
-class spg2xx_pdc100_game_state : public spg2xx_game_state
+class spg2xx_pdc_game_state : public spg2xx_game_state
{
public:
- spg2xx_pdc100_game_state(const machine_config &mconfig, device_type type, const char *tag) :
+ spg2xx_pdc_game_state(const machine_config &mconfig, device_type type, const char *tag) :
spg2xx_game_state(mconfig, type, tag),
m_numbanks(-1)
{ }
@@ -17,6 +17,8 @@ public:
void pdc_tactile(machine_config& config);
void init_pdc40t();
+ void init_pdc150t();
+ void init_pdc200();
protected:
virtual void machine_start() override;
@@ -36,10 +38,30 @@ protected:
return ret;
}
-private:
int m_numbanks;
};
+class spg2xx_pdc150t_game_state : public spg2xx_pdc_game_state
+{
+public:
+ spg2xx_pdc150t_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ spg2xx_pdc_game_state(mconfig, type, tag)
+ { }
+
+protected:
+ virtual void porta_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
+};
+
+class spg2xx_pdc200_game_state : public spg2xx_pdc_game_state
+{
+public:
+ spg2xx_pdc200_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ spg2xx_pdc_game_state(mconfig, type, tag)
+ { }
+
+protected:
+ virtual void porta_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
+};
static INPUT_PORTS_START( pdc100 )
PORT_START("P1")
@@ -123,39 +145,66 @@ static INPUT_PORTS_START( vjpp2 )
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
-void spg2xx_pdc100_game_state::machine_start()
+void spg2xx_pdc_game_state::machine_start()
{
spg2xx_game_state::machine_start();
m_numbanks = memregion("maincpu")->bytes() / 0x800000;
}
-void spg2xx_pdc100_game_state::machine_reset()
+void spg2xx_pdc_game_state::machine_reset()
{
m_current_bank = -1;
switch_bank(m_numbanks - 1); // pdc100 must boot from upper bank
m_maincpu->reset();
}
-void spg2xx_pdc100_game_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+// pdc100 simply writes 0000 at times during bootup while initializing stuff, which causes an invalid bankswitch mid-code execution
+// pdc200 does similar
+// direction bits don't appear to be being set correctly on port writes (similar issue to many other systems)
+
+void spg2xx_pdc_game_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ if ((m_maincpu->pc() < 0x2800) && (data & 0xff00))
+ {
+ int bank = data & 0x7;
+ bank &= (m_numbanks - 1);
+ switch_bank(bank);
+ }
+}
+
+void spg2xx_pdc150t_game_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ if ((m_maincpu->pc() < 0x2800) && (data & 0xff00))
+ {
+ int bank = data & 0x7;
+ bank |= (data & 0x0100) ? 8 : 0;
+ bank &= (m_numbanks - 1);
+ switch_bank(bank);
+ }
+}
+
+void spg2xx_pdc200_game_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
- // pdc100 simply writes 0000 at times during bootup while initializing stuff, which causes an invalid bankswitch mid-code execution
- if (data & 0xff00)
+ if ((m_maincpu->pc() < 0x2800) && (data & 0xff00))
{
- switch_bank(data & (m_numbanks - 1));
+ int bank = data & 0x7;
+ bank |= (data & 0x8000) ? 8 : 0;
+ bank &= (m_numbanks - 1);
+ switch_bank(bank);
}
}
-void spg2xx_pdc100_game_state::pdc100(machine_config &config)
+void spg2xx_pdc_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_out().set(FUNC(spg2xx_pdc_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_pdc100_game_state::pdc_tactile(machine_config& config)
+void spg2xx_pdc_game_state::pdc_tactile(machine_config& config)
{
pdc100(config);
@@ -163,13 +212,13 @@ void spg2xx_pdc100_game_state::pdc_tactile(machine_config& config)
m_maincpu->portb_in().set_ioport("P2");
m_maincpu->portc_in().set_ioport("P3");
- m_maincpu->adc_in<0>().set(FUNC(spg2xx_pdc100_game_state::touch_xpos_r));
- m_maincpu->adc_in<1>().set(FUNC(spg2xx_pdc100_game_state::touch_ypos_r));
+ m_maincpu->adc_in<0>().set(FUNC(spg2xx_pdc_game_state::touch_xpos_r));
+ m_maincpu->adc_in<1>().set(FUNC(spg2xx_pdc_game_state::touch_ypos_r));
m_maincpu->adc_in<2>().set_ioport("AD3");
}
-void spg2xx_pdc100_game_state::init_pdc40t()
+void spg2xx_pdc_game_state::init_pdc40t()
{
uint8_t *src = memregion("maincpu")->base();
int len = memregion("maincpu")->bytes();
@@ -184,6 +233,51 @@ void spg2xx_pdc100_game_state::init_pdc40t()
}
+void spg2xx_pdc_game_state::init_pdc150t()
+{
+ uint16_t *src = (uint16_t*)memregion("maincpu")->base();
+ int len = memregion("maincpu")->bytes();
+
+ for (int i = 0; i < len/2; i++)
+ {
+ src[i] = bitswap<16>(src[i], 3^8,11^8,2^8,10^8,1^8,9^8,0^8,8^8, 12^8,4^8,13^8,5^8,14^8,6^8,15^8,7^8 );
+ }
+
+#if 0
+ {
+ for (int bank = 0; bank < 16; bank++)
+ {
+ const int length = 0x800000 - 0x10;
+ const int start = (0x800000 * bank) + 0x10;
+ const uint8_t* rom = memregion("maincpu")->base();
+
+ uint32_t checksum = 0x00000000;
+ // the first 0x10 bytes are where the "chksum:xxxxxxxx " string is listed, so skip over them
+ for (int i = start; i < start + length; i++)
+ {
+ checksum += rom[i];
+ }
+
+ printf("Calculated Byte Sum of bytes is %08x)\n", checksum);
+
+
+ FILE *fp;
+ char filename[256];
+ sprintf(filename,"decrypted_%s_%d", machine().system().name, bank);
+ fp=fopen(filename, "w+b");
+ if (fp)
+ {
+ fwrite(&rom[0x800000*bank], 0x800000, 1, fp);
+ fclose(fp);
+ }
+ }
+ }
+#endif
+}
+
+
+
+
ROM_START( pdc100 )
ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 )
// only 1st half of this is used "Jumper resistor (0 ohm) that short A25 to ground"
@@ -200,13 +294,22 @@ ROM_START( pdc50 )
ROM_RELOAD(0x3000000,0x1000000)
ROM_END
-
+ROM_START( pdc200 )
+ ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "pdc200.bin", 0x000000, 0x8000000, CRC(9da99f0f) SHA1(0dda8a3deb794e493685d3d41790ee371f9b736e) )
+ROM_END
ROM_START( pdc40t )
ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "pdc_5060.bin", 0x000000, 0x4000000, CRC(28e0c16e) SHA1(fef4af00c737fab2716eef550badbbe0628f26a8) )
ROM_END
+ROM_START( pdc150t )
+ ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "pdc5070.bin", 0x000000, 0x8000000, CRC(b10e9f29) SHA1(551d62a9ffc18159f7ace12e4363223e0c5cf3c8) )
+ROM_END
+
+
ROM_START( tmntpdc )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "pdc_turtles.bin", 0x000000, 0x800000, CRC(ee9e70a3) SHA1(7620f1b7aeaec8032faa8eb7552f775e8d6d14ba) )
@@ -228,18 +331,23 @@ ROM_END
// Other known units
// PDC 30
// PDC 40
-// PDC 200
+// PDC 20 Sports
+// + more
// 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 / Anncia", "PDC100 - Pocket Dream Console (Anncia, US)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2008, pdc100, 0, 0, pdc100, pdc100, spg2xx_pdc_game_state, empty_init, "Conny / Anncia", "PDC100 - Pocket Dream Console (Anncia, US)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
// interestingly this is newer than the PDC100 above, despite containing fewer games
-CONS( 2010, pdc50, 0, 0, pdc100, pdc100, spg2xx_pdc100_game_state, empty_init , "Conny / VideoJet", "PDC50 - Pocket Dream Console (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2010, pdc50, 0, 0, pdc100, pdc100, spg2xx_pdc_game_state, empty_init, "Conny / VideoJet", "PDC50 - Pocket Dream Console (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+
+CONS( 2012, pdc200, 0, 0, pdc100, pdc100, spg2xx_pdc200_game_state, init_pdc150t, "Conny / VideoJet", "PDC200 - Pocket Dream Console (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+
+CONS( 2011, pdc40t, 0, 0, pdc_tactile, pdc_tactile, spg2xx_pdc_game_state, init_pdc40t, "Conny / VideoJet", "PDC40 Tactile - Pocket Dream Console (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // needs touch input
-CONS( 2011, pdc40t, 0, 0, pdc_tactile, pdc_tactile, spg2xx_pdc100_game_state, init_pdc40t, "Conny / VideoJet", "PDC40 Tactile - Pocket Dream Console (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // needs touch input
+CONS( 2011, pdc150t, 0, 0, pdc_tactile, pdc_tactile, spg2xx_pdc150t_game_state, init_pdc150t, "Conny / VideoJet", "PDC150 Tactile - Pocket Dream Console (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // needs touch input
-CONS( 2013, tmntpdc, 0, 0, pdc100, pdc100, spg2xx_pdc100_game_state, empty_init, "Conny / VideoJet", "Teenage Mutant Ninja Turtles - Pocket Dream Console (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2013, tmntpdc, 0, 0, pdc100, pdc100, spg2xx_pdc_game_state, empty_init, "Conny / VideoJet", "Teenage Mutant Ninja Turtles - Pocket Dream Console (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-CONS( 2013, dorapdc, 0, 0, pdc100, pdc100, spg2xx_pdc100_game_state, empty_init, "Conny / VideoJet", "Dora l'exploratrice - Pocket Dream Console (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2013, dorapdc, 0, 0, pdc100, pdc100, spg2xx_pdc_game_state, empty_init, "Conny / VideoJet", "Dora l'exploratrice - Pocket Dream Console (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-CONS( 200?, vjpp2, 0, 0, pdc100, vjpp2, spg2xx_pdc100_game_state, empty_init, "Conny / VideoJet", "Plug Play TV Games 2 (4-in-1) (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 200?, vjpp2, 0, 0, pdc100, vjpp2, spg2xx_pdc_game_state, empty_init, "Conny / VideoJet", "Plug Play TV Games 2 (4-in-1) (VideoJet, France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/spg2xx_wiwi.cpp b/src/mame/drivers/spg2xx_wiwi.cpp
index 7d3836ec0a2..afcc1124f9f 100644
--- a/src/mame/drivers/spg2xx_wiwi.cpp
+++ b/src/mame/drivers/spg2xx_wiwi.cpp
@@ -30,13 +30,12 @@ public:
spg2xx_game_marc101_state(const machine_config &mconfig, device_type type, const char *tag) :
spg2xx_game_state(mconfig, type, tag),
m_prev_porta(0),
+ m_prev_portb(0),
m_toggle(false)
{ }
void marc101(machine_config &config);
- void init_m489();
-
protected:
void machine_start() override;
void machine_reset() override;
@@ -48,6 +47,7 @@ protected:
virtual void portb_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
uint16_t m_prev_porta;
+ uint16_t m_prev_portb;
bool m_toggle;
emu_timer *m_pulse_timer;
@@ -55,6 +55,22 @@ private:
};
+class spg2xx_game_guitrbus_state : public spg2xx_game_marc101_state
+{
+public:
+ spg2xx_game_guitrbus_state(const machine_config &mconfig, device_type type, const char *tag) :
+ spg2xx_game_marc101_state(mconfig, type, tag)
+ { }
+
+ void guitrbus(machine_config &config);
+
+protected:
+
+ virtual uint16_t portb_r();
+ virtual void porta_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
+ virtual void portb_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
+};
+
class spg2xx_game_marc250_state : public spg2xx_game_marc101_state
{
public:
@@ -121,6 +137,7 @@ void spg2xx_game_marc101_state::machine_reset()
spg2xx_game_state::machine_reset();
m_pulse_timer->adjust(attotime::never);
m_prev_porta = 0;
+ m_prev_portb = 0;
m_toggle = false;
}
@@ -157,6 +174,15 @@ void spg2xx_game_marc101_state::marc101(machine_config &config)
m_maincpu->porta_out().set(FUNC(spg2xx_game_marc101_state::porta_w));
}
+void spg2xx_game_guitrbus_state::guitrbus(machine_config &config)
+{
+ spg2xx(config);
+
+ m_maincpu->portb_in().set(FUNC(spg2xx_game_guitrbus_state::portb_r));
+ m_maincpu->porta_out().set(FUNC(spg2xx_game_guitrbus_state::porta_w));
+ m_maincpu->portb_out().set(FUNC(spg2xx_game_guitrbus_state::portb_w));
+}
+
// are these Port A behaviors related to IO A Special mode on the SoC?
// the bits being tested do seem to be 'ExtClk2 / ExtClk1'
@@ -170,6 +196,72 @@ uint16_t spg2xx_game_marc101_state::porta_r()
return ret;
}
+uint16_t spg2xx_game_guitrbus_state::portb_r()
+{
+ uint16_t ret = m_io_p2->read() &~ 0x0008;
+
+ ret |= m_toggle ? 0x0000 : 0x0008;
+
+ return ret;
+}
+
+void spg2xx_game_guitrbus_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ logerror("%s: porta_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask,
+ (mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x',
+ (mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x',
+ (mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x',
+ (mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x',
+ (mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x',
+ (mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x',
+ (mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x',
+ (mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x',
+ (mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x',
+ (mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x',
+ (mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x',
+ (mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x',
+ (mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x',
+ (mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x',
+ (mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x',
+ (mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x');
+
+ m_prev_porta = data;
+}
+
+void spg2xx_game_guitrbus_state::portb_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ logerror("%s: portb_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask,
+ (mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x',
+ (mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x',
+ (mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x',
+ (mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x',
+ (mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x',
+ (mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x',
+ (mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x',
+ (mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x',
+ (mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x',
+ (mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x',
+ (mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x',
+ (mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x',
+ (mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x',
+ (mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x',
+ (mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x',
+ (mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x');
+
+ if ((data & 0x0002) != (m_prev_portb & 0x0002))
+ {
+ if ((data & 0x0002))
+ {
+ logerror("ext timer reset\n");
+ m_pulse_timer->adjust(attotime::from_hz(32), 0, attotime::from_hz(32));
+ }
+ }
+
+ m_prev_portb = data;
+}
+
+
+
void spg2xx_game_marc101_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
@@ -499,6 +591,28 @@ static INPUT_PORTS_START( m489 )
PORT_BIT( 0xfffc, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
+static INPUT_PORTS_START( guitrbus )
+ PORT_START("P1")
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Red / Do")
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Yellow / Re")
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Purple / Mi")
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Green / Fa")
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Menu")
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("Start")
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Blue / Sol")
+
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Logo (either WinFun or no logo)
+
+ PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Whammy Bar")
+ PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Strum")
+
+ PORT_START("P2")
+ PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("P3")
+ PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED )
+INPUT_PORTS_END
+
void spg2xx_game_wiwi18_state::init_wiwi18()
{
@@ -542,9 +656,7 @@ void spg2xx_game_wiwi18_state::portb_w(offs_t offset, uint16_t data, uint16_t me
}
}
-void spg2xx_game_marc101_state::init_m489()
-{
-}
+
void spg2xx_game_marc101_state::portb_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
@@ -750,7 +862,6 @@ void spg2xx_game_marc250_state::portb_w(offs_t offset, uint16_t data, uint16_t m
}
}
-
ROM_START( foxsport )
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "foxsports.bin", 0x000000, 0x1000000, CRC(a5092f49) SHA1(feb4d432486b17d6cd2aed8cefd3d084f77c1733) ) // only a tiny amount of data in the 2nd half, what's it used for (if anything)
@@ -775,7 +886,12 @@ ROM_END
ROM_START( marc250 )
ROM_REGION( 0x10000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "m527.u6", 0x0000000, 0x10000000, CRC(4b856cab) SHA1(41c66bbdb0bb1442d7e11da18e9e6b20048445ba) )
-ROM_END
+ROM_END
+
+ROM_START( guitrbus )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "winfunguitar.bin", 0x000000, 0x400000, CRC(17419a27) SHA1(19377fcd18b08d3ae8e20de0244b3aaef1b5a66a) )
+ROM_END
// box marked 'Wireless game console' 'Drahtlose Spielekonsole' 87 Sports games included : 18 hyper sports games, 69 arcade games.
// Unit marked 'Hamy System' 'WiWi'
@@ -788,6 +904,11 @@ CONS( 200?, foxsport, 0, 0, rad_skat, wiwi18, spg2xx_game_wiwi18_state,
// thtere is another 'Drahtlose Spielekonsole 48-in-1' with '11 hyper sports games' (including Running) which are clearly SunPlus and would fit here, with the 37 non-hyper sports games presumably again being a NES/Famiclone cart
-CONS( 2014, marc101, 0, 0, marc101, m489, spg2xx_game_marc101_state, init_m489, "Millennium 2000 GmbH", "Millennium Arcade 101 (M489) (Game Station 2 101-in-1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2014, marc101, 0, 0, marc101, m489, spg2xx_game_marc101_state, empty_init, "Millennium 2000 GmbH", "Millennium Arcade 101 (M489) (Game Station 2 101-in-1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2015, marc250, 0, 0, marc101, m489, spg2xx_game_marc250_state, init_m527, "Millennium 2000 GmbH", "Millennium Arcade 250 (M527)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+
+// has the following strings at the start of the ROM
+// "Copyright(C) 2009-2012 ShenZhen Multi-Content Software CO., LTD"
+// "LisencedTo: MCS"
+CONS( 2012, guitrbus, 0, 0, guitrbus, guitrbus, spg2xx_game_guitrbus_state, empty_init, "WinFun", "Guitar Buster", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/includes/spg2xx.h b/src/mame/includes/spg2xx.h
index ba46e8f0e5b..43d9477952f 100644
--- a/src/mame/includes/spg2xx.h
+++ b/src/mame/includes/spg2xx.h
@@ -34,12 +34,14 @@ public:
{ }
void spg2xx_base(machine_config &config);
+ void spg2xx(machine_config &config);
+ void spg2xx_pal(machine_config &config);
+
void rad_skat(machine_config &config);
void rad_skatp(machine_config &config);
void rad_sktv(machine_config &config);
void rad_crik(machine_config &config);
void non_spg_base(machine_config &config);
- void spg2xx(machine_config &config);
void comil(machine_config &config);
void tvsprt10(machine_config &config);
void guitarfv(machine_config &config);
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 666639d2d80..d5da00f4a7f 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -31760,6 +31760,7 @@ zdog
otrail
denv150
techni4
+duetpp
ablmini
senwld
@@ -37542,6 +37543,7 @@ zone3d
@source:spg29x_lexibook_jg7425.cpp
lx_jg7425
+lx_aven
@source:spg2xx.cpp
rad_skat //
@@ -37551,6 +37553,7 @@ rad_fb2 //
mattelcs //
comil //
abltenni //
+totspies
fordrace
tvsprt10 //
decathln
@@ -37634,7 +37637,9 @@ mgt20in1
@source:spg2xx_pdc.cpp
pdc100
pdc50
+pdc200
pdc40t
+pdc150t
tmntpdc
dorapdc
vjpp2
@@ -37681,6 +37686,7 @@ foxsport
lexifit
marc101
marc250
+guitrbus
@source:spg2xx_zone.cpp
wirels60 // Wireless 60