diff options
author | David Haywood <28625134+DavidHaywood@users.noreply.github.com> | 2020-07-02 19:03:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-02 20:03:29 +0200 |
commit | 50baacce8b98bc561213e07e61c505394176b6c4 (patch) | |
tree | 184d099b80e848169001021b343c37ac2e591334 | |
parent | b87984408aa34e53bfcd75bfa87fbd7c216d62b7 (diff) |
-Miscellaneous SPG-related additions, changes, and improvements associated with recent promotions. [David Haywood]
- Added alternate V.Smile V.Motion BIOS. [Sean Riddle, TeamEurope]
New working machines
--------------------
Dora l'exploratrice - Pocket Dream Console (VideoJet, France) [TeamEurope, David Haywood]
PDC50 - Pocket Dream Console (VideoJet, France) [TeamEurope, David Haywood]
Plug Play TV Games 2 (4-in-1) (VideoJet, France) [TeamEurope, David Haywood]
PDC40 Tactile - Pocket Dream Console (VideoJet, France) [TeamEurope, David Haywood]
New machines marked as NOT_WORKING
----------------------------------
Virtual TV Ping Pong [Sean Riddle, David Haywood]
Kiu Games [TeamEurope, David Haywood]
New NOT_WORKING software list additions
---------------------------------------
vsmilem.xml:
Action Mania (USA) [Sean Riddle, TeamEurope]
Soccer Challenge (USA) [Sean Riddle, TeamEurope]
Marvel Spider-Man & Friends - Secret Missions (USA) [Sean Riddle, TeamEurope]
Toy Story 3 (USA) [Sean Riddle, TeamEurope]
-rw-r--r-- | hash/mobigo_cart.xml | 24 | ||||
-rw-r--r-- | hash/vsmilem_cart.xml | 67 | ||||
-rw-r--r-- | src/mame/drivers/generalplus_gpl16250_nand.cpp | 19 | ||||
-rw-r--r-- | src/mame/drivers/nes_clone.cpp | 38 | ||||
-rw-r--r-- | src/mame/drivers/spg2xx_pdc.cpp | 144 | ||||
-rw-r--r-- | src/mame/drivers/spg2xx_wiwi.cpp | 267 | ||||
-rw-r--r-- | src/mame/drivers/vsmile.cpp | 15 | ||||
-rw-r--r-- | src/mame/includes/generalplus_gpl16250_nand.h | 1 | ||||
-rw-r--r-- | src/mame/mame.lst | 6 |
9 files changed, 531 insertions, 50 deletions
diff --git a/hash/mobigo_cart.xml b/hash/mobigo_cart.xml index 7cd5c229991..41d0920f36a 100644 --- a/hash/mobigo_cart.xml +++ b/hash/mobigo_cart.xml @@ -475,5 +475,29 @@ license:CC0 </dataarea> </part> </software> + + <!-- these have downloaded games on them, they do however appear to be tied to the machine that downloaded them, on other units they appear as blank --> + <software name="user1" supported="no"> + <description>NAND User Cartridge (unknown data, set 1)</description> + <year>201?</year> + <publisher>VTech</publisher> + <part name="cart" interface="mobigo_cart"> + <dataarea name="rom" size="0x8400000"> + <rom name="80-201401.bin" size="0x8400000" crc="ea99f4d7" sha1="a9f8a7f05de21d971895e3385621112461a0a339"/> + </dataarea> + </part> + </software> + + <software name="user2" supported="no"> + <description>NAND User Cartridge (unknown data, set 2)</description> + <year>201?</year> + <publisher>VTech</publisher> + <part name="cart" interface="mobigo_cart"> + <dataarea name="rom" size="0x8400000"> + <rom name="80-201404.bin" size="0x8400000" crc="a776ff2b" sha1="a154ad9bd58d14128752236fee5385aace3717e1"/> + <rom name="80-201404_Console.bin" size="0x8400000" crc="ed3388f5" sha1="583d7eab0bf2a0e9bb90a28d1fdda701f0a7f32b"/> + </dataarea> + </part> + </software> </softwarelist> diff --git a/hash/vsmilem_cart.xml b/hash/vsmilem_cart.xml index f15c2119571..51e0c85d971 100644 --- a/hash/vsmilem_cart.xml +++ b/hash/vsmilem_cart.xml @@ -100,7 +100,7 @@ Language: +========+===================+===========================================================================================+ | XX | 80-084240(US) | Ni Hao Kai Lan | | XX | 80-084245(FR) | Ni Hao Kai Lan - Joyeux Nouvel an chinois! | -+========+===================+===========================================================================================+ ++========+===================+===========================================================================================+ | | 80-084260(US) | My Pet Puppy (unreleased in USA? UK version plays OK on NTSC console) | | XX | 80-084262(NL) | Mijn Puppy! | | | 80-084263(UK) | My Pet Puppy | @@ -259,6 +259,18 @@ Language: </part> </software> + <software name="actnmniamb" cloneof="actnmniam" supported="no"> + <description>Action Mania (USA)</description> + <year>201?</year> + <publisher>VTech</publisher> + <part name="cart" interface="vsmile_cart"> + <dataarea name="rom" size="0x0800000"> + <rom name="vmotion80-084000.bin" size="0x0800000" crc="c3ca971e" sha1="5c63215280ec3fdb01e8b4a0c151496718b6bc0a" /> + </dataarea> + </part> + </software> + + <software name="actnmniamnl" cloneof="actnmniam" supported="no"> <description>Sport Games (Netherlands)</description> <year>201?</year> @@ -990,7 +1002,19 @@ Language: </software> <!-- Soccer Challenge --> - <software name="soccerchmg" supported="no"> + <software name="soccerchm" supported="no"> + <description>Soccer Challenge (USA)</description> + <year>200?</year> + <publisher>VTech</publisher> + + <part name="cart" interface="vsmile_cart"> + <dataarea name="rom" size="0x0800000"> + <rom name="vmotion80-084300.bin" size="0x0800000" crc="4d0dd939" sha1="b5411b036fa91daf56f654be4ce71b4ac15541ca" /> + </dataarea> + </part> + </software> + + <software name="soccerchmg" cloneof="soccerchm" supported="no"> <description>Fussball Meisterschaft (Germany)</description> <year>20??</year> <publisher>VTech</publisher> @@ -1005,8 +1029,7 @@ Language: </part> </software> - <!-- Soccer Challenge --> - <software name="soccerchmf" supported="no" cloneof="soccerchmg"> + <software name="soccerchmf" cloneof="soccerchm" supported="no"> <description>Football Challenge (France)</description> <year>20??</year> <publisher>VTech</publisher> @@ -1019,7 +1042,20 @@ Language: </part> </software> - <software name="spidermnmg" supported="no"> + + <software name="spidermnm" supported="no"> + <description>Marvel Spider-Man & Friends - Secret Missions (USA)</description> + <year>200?</year> + <publisher>VTech</publisher> + + <part name="cart" interface="vsmile_cart"> + <dataarea name="rom" size="0x0800000"> + <rom name="vmotion80-084140.bin" size="0x0800000" crc="be4f9c32" sha1="9f7d77f1cdf64ab993a5d07b91d435a861c91758" /> + </dataarea> + </part> + </software> + + <software name="spidermnmg" cloneof="spidermnm" supported="no"> <description>Marvel Spider-Man & Freunde - Geheime Missionen (Germany)</description> <year>2010</year> <publisher>VTech</publisher> @@ -1034,7 +1070,7 @@ Language: </part> </software> - <software name="spidermnmf" cloneof="spidermnmg" supported="no"> + <software name="spidermnmf" cloneof="spidermnm" supported="no"> <description>Marvel Spider-Man & ses amis - Missions Secrètes (France)</description> <year>2008</year> <publisher>VTech</publisher> @@ -1115,7 +1151,18 @@ Language: </part> </software> - <software name="toystor3mg" supported="no"> + <software name="toystor3" supported="no"> + <description>Toy Story 3 (USA)</description> + <year>2010</year> + <publisher>VTech</publisher> + <part name="cart" interface="vsmile_cart"> + <dataarea name="rom" size="0x1000000"> + <rom name="vmotion80-084420.bin" size="0x1000000" crc="c0500151" sha1="265d55fd723ff7698154165719ff9cfe6c3bf0c3" /> + </dataarea> + </part> + </software> + + <software name="toystor3mg" cloneof="toystor3" supported="no"> <description>Toy Story 3 (Germany)</description> <year>2010</year> <publisher>VTech</publisher> @@ -1132,7 +1179,7 @@ Language: </part> </software> - <software name="toystor3mf" cloneof="toystor3mg" supported="no"> + <software name="toystor3mf" cloneof="toystor3" supported="no"> <description>Toy Story 3 (France)</description> <year>2010</year> <publisher>VTech</publisher> @@ -1145,7 +1192,7 @@ Language: </part> </software> - <software name="toystor3ms" cloneof="toystor3mg" supported="no"> + <software name="toystor3ms" cloneof="toystor3" supported="no"> <description>Disney/Pixar Toy Story 3 (Spain)</description> <year>2010</year> <publisher>VTech</publisher> @@ -1286,5 +1333,5 @@ Language: </dataarea> </part> </software> - + </softwarelist> diff --git a/src/mame/drivers/generalplus_gpl16250_nand.cpp b/src/mame/drivers/generalplus_gpl16250_nand.cpp index 85de19d0744..e1eae87e606 100644 --- a/src/mame/drivers/generalplus_gpl16250_nand.cpp +++ b/src/mame/drivers/generalplus_gpl16250_nand.cpp @@ -458,6 +458,15 @@ ROM_START( wlsair60 ) ROM_LOAD( "wlsair60.nand", 0x0000, 0x8400000, CRC(eec23b97) SHA1(1bb88290cf54579a5bb51c08a02d793cd4d79f7a) ) ROM_END +ROM_START( kiugames ) + ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only + + ROM_REGION( 0x21000000, "nandrom", ROMREGION_ERASE00 ) + ROM_LOAD( "hy27084g2m.u2", 0x0000, 0x21000000, CRC(65cc3864) SHA1(b759ec9816fe98a33ee7d5e12e5492f0160c5b31) ) +ROM_END + + ROM_START( jak_gtg ) ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only @@ -729,7 +738,7 @@ void generalplus_gpac800_game_state::machine_reset() */ // probably more bytes are used - int dest = m_strippedrom[0x15] << 8; + int dest = m_strippedrom[0x15] << 8 | (m_strippedrom[0x16] << 16); // copy a block of code from the NAND to RAM for (int i = 0; i < m_initial_copy_words; i++) @@ -795,6 +804,13 @@ void generalplus_gpac800_game_state::nand_wlsair60() m_initial_copy_words = 0x2800; } +void generalplus_gpac800_game_state::nand_kiugames() +{ + nand_init840(); + m_initial_copy_words = 0x10000; +} + + void generalplus_gpac800_game_state::nand_vbaby() { nand_init840(); @@ -828,6 +844,7 @@ CONS(2010, wlsair60, 0, 0, generalplus_gpac800, jak_car2, generalplus_gp 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) +CONS(200?, kiugames, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_kiugames, "VideoJet", "Kiu Games", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) // probably has other names in English too? menus don't appear to be in German CONS(200?, jak_gtg, 0, 0, generalplus_gpac800, jak_gtg, generalplus_gpac800_game_state, nand_init210, "JAKKS Pacific Inc / HotGen Ltd", "Golden Tee Golf (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) CONS(200?, jak_car2, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_init210, "JAKKS Pacific Inc / HotGen Ltd", "Cars 2 (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) diff --git a/src/mame/drivers/nes_clone.cpp b/src/mame/drivers/nes_clone.cpp index 555b5456ba1..eef9a37b597 100644 --- a/src/mame/drivers/nes_clone.cpp +++ b/src/mame/drivers/nes_clone.cpp @@ -75,6 +75,18 @@ private: int m_rombase; }; +class nes_clone_vtvppong_state : public nes_clone_state +{ +public: + nes_clone_vtvppong_state(const machine_config& mconfig, device_type type, const char* tag) : + nes_clone_state(mconfig, type, tag) + { } + void nes_clone_vtvppong(machine_config& config); + +private: + void nes_clone_vtvppong_map(address_map& map); +}; + void nes_clone_state::sprite_dma_w(address_space &space, uint8_t data) { @@ -249,15 +261,12 @@ void nes_clone_dnce2000_state::nes_clone_dnce2000(machine_config& config) m_maincpu->set_addrmap(AS_PROGRAM, &nes_clone_dnce2000_state::nes_clone_dnce2000_map); } - - void nes_clone_dnce2000_state::nes_clone_dnce2000_map(address_map& map) { nes_clone_basemap(map); map(0x8000, 0xffff).rw(FUNC(nes_clone_dnce2000_state::rom_r), FUNC(nes_clone_dnce2000_state::bank_w)); } - void nes_clone_dnce2000_state::machine_reset() { nes_clone_state::machine_reset(); @@ -280,6 +289,19 @@ void nes_clone_dnce2000_state::bank_w(uint8_t data) m_rombase = data; } +void nes_clone_vtvppong_state::nes_clone_vtvppong(machine_config& config) +{ + nes_clone_pal(config); + m_maincpu->set_addrmap(AS_PROGRAM, &nes_clone_vtvppong_state::nes_clone_vtvppong_map); +} + +void nes_clone_vtvppong_state::nes_clone_vtvppong_map(address_map& map) +{ + nes_clone_basemap(map); + map(0x8000, 0xffff).rom().region("maincpu", 0x38000); +} + + ROM_START( pjoypj001 ) ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "powerjoy_pj001_lh28f008sc_89a6.bin", 0x00000, 0x100000, CRC(e655e0aa) SHA1(c96d3422e26451c366fee2151fedccb95014cbc7) ) @@ -298,6 +320,13 @@ ROM_START( dnce2000 ) // use Mapper 241 if you want to run this in a NES emulato ROM_LOAD( "dance.bin", 0x00000, 0x40000, CRC(0982bb50) SHA1(bd608159d7e624ea345f2a188de51cb1aa116421) ) ROM_END +ROM_START( vtvppong ) + ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE00 ) // high bit is never set in the first 0x28000 bytes of this ROM, probably 7-bit sound data? code might need opcode bits swapping + ROM_LOAD( "vtvpongcpu.bin", 0x00000, 0x40000, CRC(52df95fa) SHA1(3015bcc90eee862b3568f122b402c9defa566aab) ) + + ROM_REGION( 0x20000, "gfx1", ROMREGION_ERASE00 ) + ROM_LOAD( "vtvpongppu.bin", 0x00000, 0x20000, CRC(474dfc0c) SHA1(4d0afab111e40172ae0b31e94f1b74b73a18385f) ) +ROM_END void nes_clone_state::init_nes_clone() { @@ -308,4 +337,7 @@ CONS( 200?, pjoypj001, 0, 0, nes_clone, nes_clone, nes_clone_state, init_nes_clo // "Flashback Mini 7800 uses normal NES-style hardware, together with a mapper chipset similar to the Waixing kk33xx cartridges (NES 2.0 Mapper 534)" CONS( 2004, afbm7800, 0, 0, nes_clone, nes_clone, nes_clone_state, init_nes_clone, "Atari", "Atari Flashback Mini 7800", MACHINE_NOT_WORKING ) +CONS( 200?, vtvppong, 0, 0, nes_clone_vtvppong, nes_clone, nes_clone_vtvppong_state, init_nes_clone, "<unknown>", "Virtual TV Ping Pong", MACHINE_NOT_WORKING ) + + CONS( 200?, dnce2000, 0, 0, nes_clone_dnce2000, dnce2000, nes_clone_dnce2000_state, init_nes_clone, "Shenzhen Soyin Electric Appliance Ind. Co., Ltd.", "Dance 2000 / Hot 2000 (Jin Bao TV Dancing Carpet, SY-2000-04)", 0 ) diff --git a/src/mame/drivers/spg2xx_pdc.cpp b/src/mame/drivers/spg2xx_pdc.cpp index 24290fc0565..04f17451600 100644 --- a/src/mame/drivers/spg2xx_pdc.cpp +++ b/src/mame/drivers/spg2xx_pdc.cpp @@ -14,6 +14,9 @@ public: { } void pdc100(machine_config& config); + void pdc_tactile(machine_config& config); + + void init_pdc40t(); protected: virtual void machine_start() override; @@ -21,6 +24,18 @@ protected: virtual void porta_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; + uint16_t touch_xpos_r() + { // >= 0x800 = right of screen + uint16_t ret = ioport("AD1")->read(); + return ret; + } + + uint16_t touch_ypos_r() + { // >= 0x800 = top of screen + uint16_t ret = ioport("AD2")->read(); + return ret; + } + private: int m_numbanks; }; @@ -47,8 +62,66 @@ static INPUT_PORTS_START( pdc100 ) PORT_START("P3") PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + +INPUT_PORTS_END + + +static INPUT_PORTS_START( pdc_tactile ) + PORT_START("P1") + PORT_BIT( 0x01ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("A") + PORT_BIT( 0xfc00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START("P2") + PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START("P3") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Touch") + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("B") + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Pause / Menu") + PORT_BIT( 0x0038, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // if this bit flips you get black screen (soft power off?) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0600, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0xe000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START("AD1") + PORT_BIT(0xfff, 0x800, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 1.10f, -0.055f, 0) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_START("AD2") + PORT_BIT(0xfff, 0x800, IPT_LIGHTGUN_Y) PORT_INVERT PORT_CROSSHAIR(Y, 1.148f, -0.1f, 0) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_START("AD3") + PORT_BIT( 0x003f, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unk, causes powerdown + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unk, causes powerdown + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unk, causes powerdown + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unk, causes powerdown + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unk, causes powerdown + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unk, causes powerdown INPUT_PORTS_END +static INPUT_PORTS_START( vjpp2 ) + PORT_START("P1") + PORT_BIT( 0xffff, 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_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_NAME("Pause") + PORT_BIT( 0xff80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START("P3") + PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) +INPUT_PORTS_END void spg2xx_pdc100_game_state::machine_start() { @@ -67,10 +140,11 @@ void spg2xx_pdc100_game_state::porta_w(offs_t offset, uint16_t data, uint16_t me { // pdc100 simply writes 0000 at times during bootup while initializing stuff, which causes an invalid bankswitch mid-code execution if (data & 0xff00) + { switch_bank(data & (m_numbanks - 1)); + } } - void spg2xx_pdc100_game_state::pdc100(machine_config &config) { non_spg_base(config); @@ -78,8 +152,38 @@ void spg2xx_pdc100_game_state::pdc100(machine_config &config) 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) +{ + pdc100(config); + + m_maincpu->porta_in().set_ioport("P1"); + 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<2>().set_ioport("AD3"); } + +void spg2xx_pdc100_game_state::init_pdc40t() +{ + uint8_t *src = memregion("maincpu")->base(); + int len = memregion("maincpu")->bytes(); + + std::vector<u8> buffer(len); + + for (int i = 0; i < len; i++) + { + buffer[i] = src[bitswap<26>(i, 18, 20, 16, 17, 24, 25, 19, 23, 22, 21, 5, 6, 7, 8, 13, 15, 14, 9, 10, 12, 11, 1, 2, 3, 4, 0)]; + } + std::copy(buffer.begin(), buffer.end(), &src[0]); +} + + 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" @@ -88,22 +192,54 @@ ROM_START( pdc100 ) ROM_IGNORE(0x4000000) ROM_END +ROM_START( pdc50 ) + ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "pdc50_7050.u3", 0x000000, 0x1000000, CRC(9b4eb348) SHA1(81d2ff5af7b6dc5e1f9277b45f259762e7d24cce) ) + ROM_RELOAD(0x1000000,0x1000000) + ROM_RELOAD(0x2000000,0x1000000) + ROM_RELOAD(0x3000000,0x1000000) +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( tmntpdc ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "pdc_turtles.bin", 0x000000, 0x800000, CRC(ee9e70a3) SHA1(7620f1b7aeaec8032faa8eb7552f775e8d6d14ba) ) ROM_END +ROM_START( dorapdc ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "pdc_dora_5030.bin", 0x000000, 0x800000, CRC(cea549ad) SHA1(b6ac8ea186d7c624451dd6121932cecb38c1f25f) ) +ROM_END + +ROM_START( vjpp2 ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "29lv320at.u2", 0x000000, 0x400000, CRC(de2592eb) SHA1(9b537205808c502cf872e62f9701357ef8e28f3c) ) +ROM_END // 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 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 ) +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 ) + +// 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( 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( 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, 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, tmntpdc, 0, 0, pdc100, pdc100, spg2xx_pdc100_game_state, empty_init, "Conny / VideoJet", "Teenage Mutant Ninja Turtles - Pocket Dream Console (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 ) diff --git a/src/mame/drivers/spg2xx_wiwi.cpp b/src/mame/drivers/spg2xx_wiwi.cpp index ceeec61c580..7d3836ec0a2 100644 --- a/src/mame/drivers/spg2xx_wiwi.cpp +++ b/src/mame/drivers/spg2xx_wiwi.cpp @@ -28,38 +28,249 @@ class spg2xx_game_marc101_state : public spg2xx_game_state { public: spg2xx_game_marc101_state(const machine_config &mconfig, device_type type, const char *tag) : - spg2xx_game_state(mconfig, type, tag) + spg2xx_game_state(mconfig, type, tag), + m_prev_porta(0), + m_toggle(false) { } + void marc101(machine_config &config); + void init_m489(); protected: + void machine_start() override; + void machine_reset() override; + + virtual void device_timer(emu_timer& timer, device_timer_id id, int param, void* ptr) override; + + virtual uint16_t porta_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; + + uint16_t m_prev_porta; + bool m_toggle; + emu_timer *m_pulse_timer; private: - void portb_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; + }; -class spg2xx_game_marc250_state : public spg2xx_game_state +class spg2xx_game_marc250_state : public spg2xx_game_marc101_state { public: spg2xx_game_marc250_state(const machine_config &mconfig, device_type type, const char *tag) : - spg2xx_game_state(mconfig, type, tag) + spg2xx_game_marc101_state(mconfig, type, tag), + m_toggle2(false) { } void init_m527(); protected: - void machine_reset() override - { - spg2xx_game_state::machine_reset(); - switch_bank(31); - m_maincpu->reset(); - } + void machine_start() override; + void machine_reset() override; + + virtual void device_timer(emu_timer& timer, device_timer_id id, int param, void* ptr) override; + + virtual uint16_t porta_r() override; + 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; private: - void portb_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; + bool m_toggle2; + emu_timer *m_pulse_timer2; }; +void spg2xx_game_marc101_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case 0: + m_toggle = !m_toggle; + //printf("toggle\n"); + break; + } +} + +void spg2xx_game_marc250_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case 0: + m_toggle = !m_toggle; + //printf("toggle\n"); + break; + + case 1: + m_toggle2 = !m_toggle2; + //printf("toggle\n"); + break; + } +} + + +void spg2xx_game_marc101_state::machine_start() +{ + spg2xx_game_state::machine_start(); + m_pulse_timer = timer_alloc(0); + m_pulse_timer->adjust(attotime::never); + +} + +void spg2xx_game_marc101_state::machine_reset() +{ + spg2xx_game_state::machine_reset(); + m_pulse_timer->adjust(attotime::never); + m_prev_porta = 0; + m_toggle = false; +} + +void spg2xx_game_marc250_state::machine_start() +{ + spg2xx_game_marc101_state::machine_start(); + m_pulse_timer2 = timer_alloc(1); + m_pulse_timer2->adjust(attotime::never); + + // hack, makes x-racer3 and some others more stable, TODO: find out what is really wrong + m_maincpu->set_clock_scale(2.0000f); + +} + +void spg2xx_game_marc250_state::machine_reset() +{ + spg2xx_game_marc101_state::machine_reset(); + switch_bank(31); + m_maincpu->reset(); + + m_pulse_timer2->adjust(attotime::never); + m_toggle2 = false; +} + + +void spg2xx_game_marc101_state::marc101(machine_config &config) +{ + spg2xx(config); + + m_maincpu->set_pal(true); + m_screen->set_refresh_hz(50); + + m_maincpu->porta_in().set(FUNC(spg2xx_game_marc101_state::porta_r)); + m_maincpu->porta_out().set(FUNC(spg2xx_game_marc101_state::porta_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' + +uint16_t spg2xx_game_marc101_state::porta_r() +{ + uint16_t ret = m_io_p1->read() &~ 0x2000; + + ret |= m_toggle ? 0x2000 : 0x0000; + + return ret; +} + + +void spg2xx_game_marc101_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'); + + // see function at 053E19 (marc101) + // it has several states + // 00 - wait a while + // 01 - set 0x0400 in port a high + // 02 - clear 0x0400 in port a + // 07 - measure number of times 0x2000 on port a changes, with min/max acceptable values and a timeout + // ff - failure (causes blank screen / shutdown + inf loop) + if ((data & 0x0400) != (m_prev_porta & 0x0400)) + { + if (!(data & 0x0400)) + { + //logerror("pulse / timer reset\n"); + m_pulse_timer->adjust(attotime::from_hz(32), 0, attotime::from_hz(32)); + } + } + + m_prev_porta = data; +} + +uint16_t spg2xx_game_marc250_state::porta_r() +{ + uint16_t ret = m_io_p1->read() &~ 0x6000; + ret |= m_toggle ? 0x2000 : 0x0000; + ret |= m_toggle2 ? 0x4000 : 0x0000; +// printf("porta %04x\n", ret); + + return ret; +} + + +void spg2xx_game_marc250_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'); + + // see function at 8AB2 (marc250 menu) + // it has several states + // 00 - wait a while + // 01 - clear 0x1000 in port a + // 02 - wait a while + // 05 - check rate of port a bit 0x4000 + + // 06 - wait a while + // 07 - clear 0x1000 in port a + // 08 - wait a while + // 09 - check rate of port a bit 0x2000 + + // ff - failure (causes blank screen / shutdown + inf loop) + + // function is at 04D918 in x-racer 3 (values tweaked to pass) + // but x-racer 3 also seems to need faster CPU or it randomly corrupts (or its an IRQ problem?) + + if ((data & 0x1000) != (m_prev_porta & 0x1000)) + { + if (!(data & 0x1000)) + { + // these values stop the marc250 menu from failing, but not the games + //printf("pulse / timer reset\n"); + m_pulse_timer->adjust(attotime::from_hz(6), 0, attotime::from_hz(6)); + m_pulse_timer2->adjust(attotime::from_hz(12), 0, attotime::from_hz(12)); + } + } + + m_prev_porta = data; +} static INPUT_PORTS_START( wiwi18 ) @@ -302,7 +513,7 @@ void spg2xx_game_wiwi18_state::init_wiwi18() } - void spg2xx_game_wiwi18_state::portb_w(offs_t offset, uint16_t data, uint16_t mem_mask) +void spg2xx_game_wiwi18_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', @@ -329,15 +540,10 @@ void spg2xx_game_wiwi18_state::init_wiwi18() else switch_bank(0); } - } void spg2xx_game_marc101_state::init_m489() { - uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); - - // bypass a call that turns unit off after about 2 seconds, maybe it's a battery check? - if (rom[0x6460]==0x4240) rom[0x6460] = 0x4241; } void spg2xx_game_marc101_state::portb_w(offs_t offset, uint16_t data, uint16_t mem_mask) @@ -383,13 +589,11 @@ void spg2xx_game_marc101_state::portb_w(offs_t offset, uint16_t data, uint16_t m void spg2xx_game_marc250_state::init_m527() { - uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); - // bypass a call that turns unit off after about 10 seconds, maybe it's a battery check? - rom[((31 * 0x800000) / 2) | 0x004ea5] = 0x4241; - - // same for xracing 3 - rom[((22 * 0x800000) / 2) | 0x00eb2a] = 0x4241; + // the code being patched turns the IRQ off, code looks a bit like smarttv code.. is SoC IRQ handling wrong? + // or is this more security, or something else? games don't run with the IRQ off... +#if 1 + uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); uint16_t ident2[6] = { 0x9512, 0x2862, 0xa70a, 0x0002, 0xd71b, 0x2862 }; @@ -412,7 +616,6 @@ void spg2xx_game_marc250_state::init_m527() } } - // this turns the IRQ off, code looks a bit like smarttv code.. is SoC IRQ handling wrong? // pass maze road //rom[((12 * 0x800000) / 2) | 0x0284b5] = 0x0003; @@ -422,7 +625,7 @@ void spg2xx_game_marc250_state::init_m527() //rom[((17 * 0x800000) / 2) | 0x015e58] = 0x0003; // cliff overhang / gym dancing //rom[((18 * 0x800000) / 2) | 0x01cab4] = 0x0003; - rom[((18 * 0x800000) / 2) | 0x021e25] = 0xffff; + rom[((18 * 0x800000) / 2) | 0x021e25] = 0xffff; // secondary 'turn off' // jump chess //rom[((19 * 0x800000) / 2) | 0x012c3a] = 0x0003; // boxing, basketball etc. @@ -435,13 +638,14 @@ void spg2xx_game_marc250_state::init_m527() //rom[((26 * 0x800000) / 2) | 0x0084dd] = 0x0003; // 4 score //rom[((27 * 0x800000) / 2) | 0x145cdd] = 0x0003; +#endif } void spg2xx_game_marc250_state::portb_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - if (m_maincpu->pc() == 0x18) + if (m_maincpu->pc() < 0x2000) { - printf("%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().c_str(), data, 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', @@ -496,9 +700,10 @@ void spg2xx_game_marc250_state::portb_w(offs_t offset, uint16_t data, uint16_t m // bank 30 = (used) 'ROM 2 64M' // bank 31 = (used) menu (no bank number check) - if ((m_maincpu->pc() == 0x18) && (data != 0x00ff)) + // bits 0x1804 aren't set as an output, but clearly need to be treated as output, also bad values of 0x00ff and 0x0000 are written on startup, with direction bits set! + // this seems similar to issues with banking in some other units. + if ((m_maincpu->pc() < 0x2000) && (data != 0x00ff) && (data != 0x0000)) { - // bits 0x1804 aren't set as an output, but clearly need to be treated as output switch (data & 0x1807) { case 0x0000: switch_bank(0); break; // unused @@ -583,6 +788,6 @@ 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( 200?, marc101, 0, 0, spg2xx, 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, init_m489, "Millennium 2000 GmbH", "Millennium Arcade 101 (M489) (Game Station 2 101-in-1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) -CONS( 200?, marc250, 0, 0, spg2xx, m489, spg2xx_game_marc250_state, init_m527, "Millennium 2000 GmbH", "Millennium Arcade 250 (M527)", MACHINE_NOT_WORKING | 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 ) diff --git a/src/mame/drivers/vsmile.cpp b/src/mame/drivers/vsmile.cpp index 723bb22e32a..b5bc1a83c4a 100644 --- a/src/mame/drivers/vsmile.cpp +++ b/src/mame/drivers/vsmile.cpp @@ -323,9 +323,22 @@ ROM_END ROM_START( vsmilem ) ROM_REGION16_BE( 0x800000, "sysrom", ROMREGION_ERASEFF ) - ROM_LOAD16_WORD_SWAP( "vsmilemotion.bin", 0x000000, 0x200000, CRC(60fa5426) SHA1(91e0b7b44b975df65095d6ee622436d65fb1aca5) ) // from a Spanish unit (but doesn't seem region specific) + ROM_SYSTEM_BIOS( 0, "bios0", "bios0" ) + ROMX_LOAD( "vsmilemotion.bin", 0x000000, 0x200000, CRC(60fa5426) SHA1(91e0b7b44b975df65095d6ee622436d65fb1aca5), ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(0) ) // from a Spanish unit (but doesn't seem region specific) + + /* This ROM doesn't show the 'Motion' logo at all, but was dumped from a Motion unit + + Console says "Vtech V.Smile V-motion Active Learning System" + "FCC ID 62R-0788, IC 1135D-0788" "53-36600-056-080" + melted into plastic "VT8281" + The PCB has the code 35-078800-001-103_708979-2. + */ + ROM_SYSTEM_BIOS( 1, "bios1", "bios1" ) + ROMX_LOAD( "vmotionbios.bin", 0x000000, 0x200000, CRC(427087ea) SHA1(dc9eaa55f4a0047b6069ef73beea86d26f0f5394), ROM_GROUPWORD | ROM_REVERSE | ROM_BIOS(1) ) // from a US unit + ROM_END + // year, name, parent, compat, machine, input, class, init, company, fullname, flags CONS( 2005, vsmile, 0, 0, vsmile, vsmile, vsmile_state, empty_init, "VTech", "V.Smile", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) CONS( 2008, vsmilem, vsmile, 0, vsmilem, vsmilem, vsmilem_state, empty_init, "VTech", "V.Smile Motion", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/includes/generalplus_gpl16250_nand.h b/src/mame/includes/generalplus_gpl16250_nand.h index 3613c9d83cd..34c24423fcf 100644 --- a/src/mame/includes/generalplus_gpl16250_nand.h +++ b/src/mame/includes/generalplus_gpl16250_nand.h @@ -35,6 +35,7 @@ public: void nand_vbaby(); void nand_tsm(); void nand_beambox(); + void nand_kiugames(); protected: virtual void machine_start() override; diff --git a/src/mame/mame.lst b/src/mame/mame.lst index da64ecdd346..8ef8a06fd62 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -14738,6 +14738,7 @@ mobigo2 @source:generalplus_gpl16250_nand.cpp wlsair60 // Wireless Air 60 +kiugames jak_car2 jak_gtg jak_sspop @@ -31661,6 +31662,7 @@ nespal // Nintendo Entertainment System PAL pjoypj001 afbm7800 dnce2000 +vtvppong @source:nes_sh6578.cpp bandgpad @@ -37625,7 +37627,11 @@ mgt20in1 @source:spg2xx_pdc.cpp pdc100 +pdc50 +pdc40t tmntpdc +dorapdc +vjpp2 @source:spg2xx_playvision.cpp pvmil // |