From b7f6abf4f1dd2aa140115241969eb1c3a305697a Mon Sep 17 00:00:00 2001 From: David Haywood <28625134+DavidHaywood@users.noreply.github.com> Date: Fri, 24 Jan 2020 20:04:11 +0000 Subject: Plug and Play work (#6214) * new WORKING machines ---- Vs Maxx Texas Hold'em TV Poker - 6 Player Edition (US) [Sean Riddle, David Haywood] Deluxe TV Poker - Texas Hold'em, Blackjack & Video Poker (US) [Sean Riddle, David Haywood] * (nw) * (nw) * new WORKING machines --- TV Sports 10-in-1 / Decathlon Atlhetic Sport Games [TeamEurope, David Haywood] new NOT WORKING machines --- Lexibook Compact Cyber Arcade - Frozen [TeamEurope] * (nw) * new NOT WORKING ---- Sudoku (Elan type hardware) [Sean Riddle] * new NOT WORKING --- Lexibook Compact Cyber Arcade - 250-in-1 (JL2375) [TeamEurope, David Haywood] * new NOT WORKING ---- Plug and Play Sudoku (VT based) [Sean Riddle, David Haywood] * (nw) * new clones --- Excite Sports Wireless Interactive TV Game - 48-in-1 (set 2, PAL) [TeamEurope] * (nw) --- hash/pi_storyreader_cart.xml | 16 +++ hash/pi_storyreader_v2_cart.xml | 16 +++ scripts/target/mame/mess.lua | 1 + src/mame/drivers/elan_eu3a05.cpp | 111 +++++++++++++++++++ src/mame/drivers/nes_vt.cpp | 131 ++++++++++++++++++++++- src/mame/drivers/pubint_storyreader.cpp | 171 ++++++++++++++++++++++++++++++ src/mame/drivers/spg2xx.cpp | 70 +++++++++++- src/mame/drivers/spg2xx_senario.cpp | 6 ++ src/mame/drivers/spg2xx_senario_poker.cpp | 66 ++++++++++-- src/mame/drivers/vt1682.cpp | 27 ++++- src/mame/includes/spg2xx.h | 2 + src/mame/mame.lst | 12 +++ 12 files changed, 610 insertions(+), 19 deletions(-) create mode 100644 hash/pi_storyreader_cart.xml create mode 100644 hash/pi_storyreader_v2_cart.xml create mode 100644 src/mame/drivers/pubint_storyreader.cpp diff --git a/hash/pi_storyreader_cart.xml b/hash/pi_storyreader_cart.xml new file mode 100644 index 00000000000..0eaeb6b2732 --- /dev/null +++ b/hash/pi_storyreader_cart.xml @@ -0,0 +1,16 @@ + + + + + + Toy Story 2 + 200? + Publications International Ltd / Disney + + + + + + + + diff --git a/hash/pi_storyreader_v2_cart.xml b/hash/pi_storyreader_v2_cart.xml new file mode 100644 index 00000000000..6f8a8bd78e6 --- /dev/null +++ b/hash/pi_storyreader_v2_cart.xml @@ -0,0 +1,16 @@ + + + + + + Toy Story 2 + 200? + Publications International Ltd / Disney + + + + + + + + diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 8414c771bce..d07aeab2569 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3835,6 +3835,7 @@ files { MAME_DIR .. "src/mame/drivers/unkmandd.cpp", MAME_DIR .. "src/mame/drivers/bbl380.cpp", MAME_DIR .. "src/mame/drivers/actions_atj2279b.cpp", + MAME_DIR .. "src/mame/drivers/pubint_storyreader.cpp", } createMESSProjects(_target, _subtarget, "ultimachine") diff --git a/src/mame/drivers/elan_eu3a05.cpp b/src/mame/drivers/elan_eu3a05.cpp index 2eb0825c060..541bead1c4f 100644 --- a/src/mame/drivers/elan_eu3a05.cpp +++ b/src/mame/drivers/elan_eu3a05.cpp @@ -126,6 +126,9 @@ public: void elan_eu3a05(machine_config &config); void airblsjs(machine_config& config); + void elan_sudoku(machine_config &config); + + private: // screen updates uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -137,6 +140,7 @@ private: void elan_eu3a05_bank_map(address_map &map); void elan_eu3a05_map(address_map &map); + void elan_sudoku_map(address_map &map); // driver_device overrides virtual void machine_start() override; @@ -214,6 +218,16 @@ void elan_eu3a05_state::elan_eu3a05_map(address_map &map) //map(0xfffe, 0xffff).r(m_sys, FUNC(elan_eu3a05commonsys_device::irq_vector_r)); // allow normal IRQ for brk } +// default e000 mapping is the same as eu3a14, other registers seem closer to eua05, probably a different chip type +void elan_eu3a05_state::elan_sudoku_map(address_map& map) +{ + elan_eu3a05_map(map); + map(0xe000, 0xffff).rom().region("maincpu", 0x0000); + // not sure how these work, might be a modified 6502 core instead. + map(0xfffa, 0xfffb).r(m_sys, FUNC(elan_eu3a05commonsys_device::nmi_vector_r)); // custom vectors handled with NMI for now + //map(0xfffe, 0xffff).r(m_sys, FUNC(elan_eu3a05commonsys_device::irq_vector_r)); // allow normal IRQ for brk +} + void elan_eu3a05_state::elan_eu3a05_bank_map(address_map &map) { @@ -286,6 +300,86 @@ static INPUT_PORTS_START( airblsjs ) INPUT_PORTS_END +static INPUT_PORTS_START( sudoku ) + PORT_START("IN0") + PORT_DIPNAME( 0x01, 0x01, "IN0" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("IN1") + PORT_DIPNAME( 0x01, 0x01, "IN1" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("IN2") + PORT_DIPNAME( 0x01, 0x01, "IN2" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + void elan_eu3a05_state::machine_start() { @@ -447,6 +541,13 @@ void elan_eu3a05_state::elan_eu3a05(machine_config &config) */ } +void elan_eu3a05_state::elan_sudoku(machine_config& config) +{ + elan_eu3a05(config); + m_maincpu->set_addrmap(AS_PROGRAM, &elan_eu3a05_state::elan_sudoku_map); +} + + void elan_eu3a05_state::airblsjs(machine_config& config) { elan_eu3a05(config); @@ -476,6 +577,14 @@ ROM_START( airblsjs ) ROM_LOAD( "airblsjs.bin", 0x000000, 0x400000, BAD_DUMP CRC(d10a6a84) SHA1(fa65f06e7da229006ddaffb245eef2cc4f90a66d) ) // ROM probably ok, but needs verification pass ROM_END +ROM_START( sudoelan ) + ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "sudoku.bin", 0x00000, 0x100000, CRC(c2596173) SHA1(cc74932648b577b735151014e8c04ed778e11704) ) + ROM_RELOAD(0x100000,0x100000) + ROM_RELOAD(0x200000,0x100000) + ROM_RELOAD(0x300000,0x100000) +ROM_END + CONS( 2004, rad_sinv, 0, 0, elan_eu3a05, rad_sinv, elan_eu3a05_state, empty_init, "Radica (licensed from Taito)", "Space Invaders [Lunar Rescue, Colony 7, Qix, Phoenix] (Radica, Arcade Legends TV Game)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // "5 Taito games in 1" @@ -483,3 +592,5 @@ CONS( 2004, rad_tetr, 0, 0, elan_eu3a05, rad_tetr, elan_eu3a05_state, empty_init // ROM contains the string "Credit:XiAn Hummer Software Studio(CHINA) Tel:86-29-84270600 Email:HummerSoft@126.com" PCB has datecode of "050423" (23rd April 2005) CONS( 2005, airblsjs, 0, 0, airblsjs, airblsjs, elan_eu3a05_state, empty_init, "Advance Bright Ltd", "Air-Blaster Joystick (AB1500, PAL)", MACHINE_NOT_WORKING ) + +CONS( 2006, sudoelan, 0, 0, elan_sudoku, sudoku, elan_eu3a05_state, empty_init, "Senario / All in 1 Products Ltd", "Ultimate Sudoku TV Edition 3-in-1", MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/nes_vt.cpp b/src/mame/drivers/nes_vt.cpp index 990acf2a470..fd90d5bcef0 100644 --- a/src/mame/drivers/nes_vt.cpp +++ b/src/mame/drivers/nes_vt.cpp @@ -421,6 +421,34 @@ private: required_ioport m_plunger; }; +class nes_vt_sudoku_state : public nes_vt_state +{ +public: + nes_vt_sudoku_state(const machine_config& mconfig, device_type type, const char* tag) : + nes_vt_state(mconfig, type, tag), + m_io0(*this,"IO0"), + m_io1(*this,"IO1") + { } + + void init_sudoku(); + + void nes_vt_sudoku(machine_config& config); + +protected: + //virtual void machine_start() override; + //virtual void machine_reset() override; + +private: + DECLARE_READ8_MEMBER(in0_r); + DECLARE_READ8_MEMBER(in1_r); + DECLARE_WRITE8_MEMBER(in0_w); + + void nes_vt_sudoku_map(address_map& map); + + required_ioport m_io0; + required_ioport m_io1; +}; + @@ -1510,6 +1538,19 @@ WRITE8_MEMBER(nes_vt_ablpinb_state::ablpinb_in0_w) logerror("ablpinb_in0_w %02x\n", data); } +READ8_MEMBER(nes_vt_sudoku_state::in0_r) +{ + return machine().rand(); +} + +READ8_MEMBER(nes_vt_sudoku_state::in1_r) +{ + return machine().rand(); +} + +WRITE8_MEMBER(nes_vt_sudoku_state::in0_w) +{ +} void nes_vt_state::nes_vt_map(address_map &map) { @@ -1552,6 +1593,15 @@ void nes_vt_ablpinb_state::nes_vt_ablpinb_map(address_map& map) map(0x4017, 0x4017).r(FUNC(nes_vt_ablpinb_state::ablpinb_in1_r)); } +void nes_vt_sudoku_state::nes_vt_sudoku_map(address_map& map) +{ + nes_vt_map(map); + + // override the inputs as specific non-standard 'controller' behavior is needed here and adding it to the generic NES controller bus wouldn't make sense. + map(0x4016, 0x4016).rw(FUNC(nes_vt_sudoku_state::in0_r),FUNC(nes_vt_sudoku_state::in0_w)); + map(0x4017, 0x4017).r(FUNC(nes_vt_sudoku_state::in1_r)); +} + /* Some later VT models have more RAM */ void nes_vt_state::nes_vt_xx_map(address_map &map) { @@ -1783,6 +1833,14 @@ void nes_vt_ablpinb_state::nes_vt_ablpinb(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nes_vt_ablpinb_state::nes_vt_ablpinb_map); } +void nes_vt_sudoku_state::nes_vt_sudoku(machine_config &config) +{ + nes_vt_base(config); + + // override for controllers + m_maincpu->set_addrmap(AS_PROGRAM, &nes_vt_sudoku_state::nes_vt_sudoku_map); +} + void nes_vt_state::nes_vt(machine_config &config) { nes_vt_base(config); @@ -1968,6 +2026,48 @@ static INPUT_PORTS_START( ablpinb ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("NUDGE" ) INPUT_PORTS_END +static INPUT_PORTS_START( sudoku ) + PORT_START("IO0") + PORT_START("IO1") +INPUT_PORTS_END + +void nes_vt_sudoku_state::init_sudoku() +{ + u8 *src = memregion("mainrom")->base(); + int len = memregion("mainrom")->bytes(); + + std::vector buffer(len); + { + for (int i = 0; i < len; i += 8) + { + buffer[i+0] = src[i+5]; + buffer[i+1] = src[i+4]; + buffer[i+2] = src[i+7]; + buffer[i+3] = src[i+6]; + buffer[i+4] = src[i+1]; + buffer[i+5] = src[i+0]; + buffer[i+6] = src[i+3]; + buffer[i+7] = src[i+2]; + } + + std::copy(buffer.begin(), buffer.end(), &src[0]); + } + + if (0) + { + FILE *fp; + char filename[256]; + sprintf(filename,"decrypted_%s", machine().system().name); + fp=fopen(filename, "w+b"); + if (fp) + { + fwrite(src, len, 1, fp); + fclose(fp); + } + } +} + + ROM_START( vdogdeme ) ROM_REGION( 0x100000, "mainrom", 0 ) @@ -1979,6 +2079,7 @@ ROM_START( vdogdemo ) ROM_LOAD( "rom.bin", 0x00000, 0x80000, CRC(054af705) SHA1(e730aeaa94b9cc28aa8b512a5bf411ec45226831) ) ROM_END + ROM_START( pinkjelly ) ROM_REGION( 0x200000, "mainrom", 0 ) ROM_LOAD( "seesaw.bin", 0x00000, 0x200000, CRC(67b5a079) SHA1(36ebfd64809af072b73acfa3a426b57017851bf4) ) @@ -2004,6 +2105,11 @@ ROM_START( vtboxing ) ROM_LOAD( "rom.bin", 0x00000, 0x80000, CRC(c115b1af) SHA1(82106e1c11c3279c5d8731c112f713fa3f290125) ) ROM_END +ROM_START( sudokuv ) + ROM_REGION( 0x80000, "mainrom", 0 ) + ROM_LOAD( "sudoku2.bin", 0x00000, 0x80000, CRC(d1ffcc1e) SHA1(2010e60933a08d0b9271ef37f338758aacba6d2d) ) +ROM_END + ROM_START( mc_dgear ) ROM_REGION( 0x400000, "mainrom", 0 ) ROM_LOAD( "dreamgear 75-in-1.prg", 0x00000, 0x400000, CRC(9aabcb8f) SHA1(aa9446b7777fa64503871225fcaf2a17aafd9af1) ) @@ -2032,6 +2138,20 @@ ROM_START( lxcmcysw ) ROM_LOAD( "jl2365swr-1.u2", 0x00000, 0x4000000, CRC(60ece391) SHA1(655de6b36ba596d873de2839522b948ccf45e006) ) ROM_END +ROM_START( lxcmcyfz ) + ROM_REGION( 0x4000000, "mainrom", 0 ) + // sub-board was marked for 2GB capacity (A0-A26 address lines), but only address lines A0-A24 are connected to the chip + ROM_LOAD( "jl2365_frozen.u1", 0x00000, 0x4000000, CRC(64d4c708) SHA1(1bc2d161326ce3039ab9ba46ad62695060cfb2e1) ) +ROM_END + +ROM_START( lxcmc250 ) + ROM_REGION( 0x4000000, "mainrom", 0 ) + // sub-board was marked for 2GB capacity (A0-A26 address lines), but only address lines A0-A24 are connected to the chip + ROM_LOAD( "cca250in1.u1", 0x00000, 0x4000000, CRC(6ccd6ad6) SHA1(fafed339097c3d1538faa306021a8373c1b799b3) ) +ROM_END + + + ROM_START( cybar120 ) ROM_REGION( 0x2000000, "mainrom", 0 ) ROM_LOAD( "m2500p-vt09-epson,20091222ver05,_30r-sx1067-01_pcb,_12r0cob128m_12001-3d05_fw.bin", 0x00000, 0x1000000, CRC(f7138980) SHA1(de31264ee3a5a5c77a86733b2e2d6845fee91ea5) ) @@ -2329,6 +2449,11 @@ CONS( 200?, vtboxing, 0, 0, nes_vt, nes_vt, nes_vt_state, empty_init, "VRT // 050329 (29th March 2005) date on PCB CONS( 2005, ablpinb, 0, 0, nes_vt_ablpinb, ablpinb, nes_vt_ablpinb_state, empty_init, "Advance Bright Ltd", "Pinball (P8002, ABL TV Game)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) + +// Black pad marked 'SUDOKU' with tails on the S and U characters looping over the logo +// 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 +CONS( 200?, sudokuv, 0, 0, nes_vt_sudoku, sudoku, nes_vt_sudoku_state, init_sudoku, "", "Plug and Play Sudoku (VT based)", MACHINE_NOT_WORKING ) + // should be VT03 based // for testing 'Shark', 'Octopus', 'Harbor', and 'Earth Fighter' use the extended colour modes, other games just seem to use standard NES modes @@ -2360,10 +2485,11 @@ CONS( 200?, dgun2500, 0, 0, nes_vt_dg, nes_vt, nes_vt_dg_state, empty_init, " // don't even get to menu. very enhanced chipset, VT368/9? CONS( 2012, dgun2561, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_state, empty_init, "dreamGEAR", "dreamGEAR My Arcade Portable Gaming System (DGUN-2561)", MACHINE_NOT_WORKING ) CONS( 200?, lxcmcy, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade", MACHINE_NOT_WORKING ) +CONS( 200?, lxcmc250, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade - 250-in-1 (JL2375)", MACHINE_NOT_WORKING ) CONS( 200?, lxcmcysw, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade - Star Wars Rebels", MACHINE_NOT_WORKING ) +CONS( 200?, lxcmcyfz, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade - Frozen", MACHINE_NOT_WORKING ) // Also Lexibook Compact Cyber Arcade - Disney Princesses // Lexibook Compact Cyber Arcade - Cars -// Lexibook Compact Cyber Arcade - Frozen // Lexibook Compact Cyber Arcade - Paw Patrol // Lexibook Compact Cyber Arcade - Barbie // Lexibook Compact Cyber Arcade - Finding Dory @@ -2372,6 +2498,7 @@ CONS( 200?, lxcmcysw, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_state, empty_init, " // more? + // boots, same platform with scrambled opcodes as FC pocket // palette issues in some games because they actually use the old VT style palette // but no way to switch? @@ -2384,6 +2511,8 @@ CONS( 2015, dgun2573, 0, 0, nes_vt_fp, nes_vt, nes_vt_hh_state, empty_init, " CONS( 200?, polmega, 0, 0, nes_vt_vh2009, nes_vt, nes_vt_vh2009_state, empty_init, "Polaroid", "Megamax GPD001SDG", MACHINE_NOT_WORKING ) CONS( 200?, silv35, 0, 0, nes_vt_vh2009, nes_vt, nes_vt_vh2009_state, empty_init, "SilverLit", "35 in 1 Super Twins", MACHINE_NOT_WORKING ) + + // same encryption as above, but seems like newer hardware (or the above aren't using most of the features) CONS( 200?, lpgm240, 0, 0, nes_vt_vh2009, nes_vt, nes_vt_vh2009_state, empty_init, "", "Let's Play! Game Machine 240 in 1", MACHINE_NOT_WORKING ) // mini 'retro-arcade' style cabinet diff --git a/src/mame/drivers/pubint_storyreader.cpp b/src/mame/drivers/pubint_storyreader.cpp new file mode 100644 index 00000000000..e64c65cdb24 --- /dev/null +++ b/src/mame/drivers/pubint_storyreader.cpp @@ -0,0 +1,171 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +/****************************************************************************** + + Non-video 'electronic book' reader that takes cartridges + + Cartridges are accessed using serial read methods, contain data, not code + so must be internal ROMs on the systems. + + + --- + + V1 - rectangular cart + glob up, pins toward you, pins 1-10, left to right + + 1 tied high + 2 CE1 left glob + 3 CE2 right glob + 4 pin 5 + 5 pin 4 + 6 data + 7 ground + 8 clock + 9 3.3 volts + 10 tied high + + ---- + + V2 - rounded top cart + + 1 CE1 left glob + 2 CE2 right glob + 3 tied high + 4 ground + 5 clock + 6 data + 7 ground + 8 ground + 9 3.3 volts + 10 tied high + + V2 PCB silkscreened with GPR23L822A - 8Mbit serial ROM + + ---- + + To dump: + set data and clock high, CE1 low for 1 mS + set CE1 high for 3 uS + set data low for 2 uS + set clock low for 2 uS + set data high for 2 uS + set clock high for 2 uS + set clock low for 2 uS + set data low for 2 uS + loop 24 times: + set clock high for 1 uS + set clock low for 1 uS + make data high Z + loop 8M tims: + set clock high for 1 uS + sample data + set clock low for 1 uS + set CE1 low + + if 2 globs, repeat with CE2 + +*******************************************************************************/ + +#include "emu.h" + +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" + +#include "screen.h" +#include "softlist.h" +#include "speaker.h" + +class pi_storyreader_state : public driver_device +{ +public: + pi_storyreader_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_cart(*this, "cartslot"), + m_cart_region(nullptr) + { } + + void pi_storyreader(machine_config &config); + void pi_storyreader_v2(machine_config &config); + +private: + virtual void machine_start() override; + virtual void machine_reset() override; + + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load); + + required_device m_cart; + memory_region *m_cart_region; +}; + + + +void pi_storyreader_state::machine_start() +{ + // if there's a cart, override the standard mapping + if (m_cart && m_cart->exists()) + { + std::string region_tag; + m_cart_region = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str()); + } +} + +void pi_storyreader_state::machine_reset() +{ +} + +DEVICE_IMAGE_LOAD_MEMBER(pi_storyreader_state::cart_load) +{ + uint32_t size = m_cart->common_get_size("rom"); + + m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE); + m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom"); + + return image_init_result::PASS; +} + +static INPUT_PORTS_START( pi_storyreader ) +INPUT_PORTS_END + + +void pi_storyreader_state::pi_storyreader(machine_config &config) +{ + // unknown CPU / MCU type + + // screenless + + GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "pi_storyreader_cart"); + m_cart->set_width(GENERIC_ROM16_WIDTH); + m_cart->set_device_load(FUNC(pi_storyreader_state::cart_load)); + + SOFTWARE_LIST(config, "cart_list").set_original("pi_storyreader_cart"); +} + +void pi_storyreader_state::pi_storyreader_v2(machine_config &config) +{ + // unknown CPU / MCU type + + // screenless + + GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "pi_storyreader_v2_cart"); + m_cart->set_width(GENERIC_ROM16_WIDTH); + m_cart->set_device_load(FUNC(pi_storyreader_state::cart_load)); + + SOFTWARE_LIST(config, "cart_list").set_original("pi_storyreader_v2_cart"); +} + + +ROM_START( pi_stry ) + ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "internal.mcu.rom", 0x0000, 0x1000, NO_DUMP ) // unknown type / size +ROM_END + +ROM_START( pi_stry2 ) + ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "internal.mcu.rom", 0x0000, 0x1000, NO_DUMP ) // unknown type / size +ROM_END + +// year, name, parent, compat, machine, input, class, init, company, fullname, flags + +// These are said to not be compatible with each other +CONS( 200?, pi_stry, 0, 0, pi_storyreader, pi_storyreader, pi_storyreader_state, empty_init, "Publications International Ltd", "Story Reader", MACHINE_IS_SKELETON ) +CONS( 200?, pi_stry2, 0, 0, pi_storyreader_v2, pi_storyreader, pi_storyreader_state, empty_init, "Publications International Ltd", "Story Reader 2.0", MACHINE_IS_SKELETON ) diff --git a/src/mame/drivers/spg2xx.cpp b/src/mame/drivers/spg2xx.cpp index 4ae41b6ea2b..3c301f0d837 100644 --- a/src/mame/drivers/spg2xx.cpp +++ b/src/mame/drivers/spg2xx.cpp @@ -196,21 +196,21 @@ READ8_MEMBER(spg2xx_game_state::i2c_r) READ16_MEMBER(spg2xx_game_state::rad_porta_r) { uint16_t data = m_io_p1->read(); - logerror("Port A Read: %04x\n", data); + logerror("%s: Port A Read: %04x\n", machine().describe_context(), data); return data; } READ16_MEMBER(spg2xx_game_state::rad_portb_r) { uint16_t data = m_io_p2->read(); - logerror("Port B Read: %04x\n", data); + logerror("%s: Port B Read: %04x\n", machine().describe_context(), data); return data; } READ16_MEMBER(spg2xx_game_state::rad_portc_r) { uint16_t data = m_io_p3->read(); - logerror("Port C Read: %04x\n", data); + logerror("%s: Port C Read: %04x\n", machine().describe_context(), data); return data; } @@ -463,6 +463,29 @@ static INPUT_PORTS_START( wiwi18 ) PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_CUSTOM ) // NTSC (1) / PAL (0) flag INPUT_PORTS_END + + +static INPUT_PORTS_START( tvsprt10 ) + PORT_START("P1") + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0180, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // Start + PORT_BIT( 0xfc00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START("P2") + PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START("P3") + PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) +INPUT_PORTS_END + + static INPUT_PORTS_START( mattelcs ) // there is a 'secret test mode' that previously got activated before inputs were mapped, might need unused inputs to active? PORT_START("P1") PORT_BIT( 0x0007, IP_ACTIVE_LOW, IPT_UNUSED ) // must be IP_ACTIVE_LOW or you can't switch to Football properly? @@ -712,6 +735,20 @@ void spg2xx_game_state::abltenni(machine_config &config) m_maincpu->set_rowscroll_offset(8); } +void spg2xx_game_state::tvsprt10(machine_config &config) +{ + SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); + m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_state::mem_map_2m); + m_maincpu->set_force_no_drc(true); // uses JVS opcode, not implemented in recompiler + + spg2xx_base(config); + + m_maincpu->porta_in().set(FUNC(spg2xx_game_state::rad_porta_r)); + m_maincpu->portb_in().set(FUNC(spg2xx_game_state::rad_portb_r)); + m_maincpu->portc_in().set(FUNC(spg2xx_game_state::rad_portc_r)); +} + + void spg2xx_game_state::rad_skatp(machine_config &config) { rad_skat(config); @@ -789,6 +826,11 @@ ROM_START( abltenni ) ROM_LOAD16_WORD_SWAP( "ablpnpwirelesstennis.bin", 0x000000, 0x400000, CRC(66bd8ef1) SHA1(a83640d5d9e84e10d29a065a61e0d7bbec16c6e4) ) ROM_END +ROM_START( tvsprt10 ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "tvsports10in1.bin", 0x000000, 0x400000, CRC(98b79889) SHA1(b0ba534d59b794bb38c071c70ab5bcf711364e06) ) +ROM_END + ROM_START( wiwi18 ) ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "26gl128.bin", 0x000000, 0x1000000, CRC(0b103ac9) SHA1(14434908f429942096fb8db5b5630603fd54fb2c) ) @@ -816,6 +858,23 @@ void spg2xx_game_state::init_wiwi18() rom[0x1ca259] = 0xf165; } +void spg2xx_game_state::init_tvsprt10() +{ + uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); + // hack 'MASK' check (some kind of EEPROM maybe?) + // this hack means the ROM CRC fails, but without it the CRC is OK, so dump is good. + /* + port b 0010 = chip select? / always set when accessing? + 0008 = write enable (set when writing, not when reading) + 0004 = chip select? / always set when accessing? + 0002 = clock? (toggles) + 0001 = data in / out + */ + rom[0x18c55d] ^= 0x0001; +} + + + // year, name, parent, compat, machine, input, class, init, company, fullname, flags // Radica TV games @@ -826,7 +885,10 @@ CONS( 2007, rad_sktv, 0, 0, rad_sktv, rad_sktv, spg2xx_game_state, ini 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, abltenni, abltenni, spg2xx_game_state, empty_init, "Advance Bright Ltd", "Wireless Tennis (WT2000, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 2006, abltenni, 0, 0, abltenni, 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 ) + +// same as Excalibur Decathlon? not the same as the ABL game +CONS( 2006, tvsprt10, 0, 0, tvsprt10, tvsprt10, spg2xx_game_state, init_tvsprt10, "Simba / V-Tac Technology Co Ltd.", "TV Sports 10-in-1 / Decathlon Atlhetic Sport Games", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // Mattel games CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, empty_init, "Mattel", "Mattel Classic Sports", MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/drivers/spg2xx_senario.cpp b/src/mame/drivers/spg2xx_senario.cpp index 5b73e2af25f..f4d670b15d2 100644 --- a/src/mame/drivers/spg2xx_senario.cpp +++ b/src/mame/drivers/spg2xx_senario.cpp @@ -264,6 +264,12 @@ void spg2xx_senario_cosmo_state::sencosmo(machine_config& config) { senbbs(config); m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_senario_cosmo_state::mem_map_flash_bypass); + /* the game crashes if you get no matches after the 2nd spin on the 'Fashion Disaster' slot machine mini-game. + this could be a real game bug (as to trigger it you'd have to make a poor choice not to hold any matches after the first spin) + however with the recompiler execution of bad data causes MAME to immediately drop to commandline with no error message + without recompiler the game just hangs */ + m_maincpu->set_force_no_drc(true); + } diff --git a/src/mame/drivers/spg2xx_senario_poker.cpp b/src/mame/drivers/spg2xx_senario_poker.cpp index a4c0d88532f..7d6a62623ae 100644 --- a/src/mame/drivers/spg2xx_senario_poker.cpp +++ b/src/mame/drivers/spg2xx_senario_poker.cpp @@ -1,7 +1,12 @@ // license:BSD-3-Clause // copyright-holders:Ryan Holtz, David Haywood -/* 'Zone' systems */ +/* Senario 6 Player Poker systems + +TODO: +improve controller hookup / simulation and remove PC-based hacks! + +*/ #include "includes/spg2xx.h" #include "sentx6p.lh" @@ -35,6 +40,10 @@ public: void sentx6p(machine_config &config); + void init_sentx6p(); + void init_sentx6puk(); + void init_sentx6pd(); + void mem_map_2m_texas(address_map &map); DECLARE_INPUT_CHANGED_MEMBER(ok_latch) @@ -108,12 +117,17 @@ private: output_finder<6> m_option_allin; output_finder<6> m_led; + + // for I/O hacks + uint32_t m_pchackaddress1; + uint32_t m_pchackaddress2; + uint16_t m_controller_sense_addr; }; void sentx6p_state::mem_map_2m_texas(address_map &map) { - map(0x000000, 0x1fffff).bankr("cartbank"); + map(0x000000, 0x3fffff).bankr("cartbank"); map(0x3f0000, 0x3f7fff).ram(); } @@ -342,7 +356,7 @@ void sentx6p_state::machine_reset() following addresses are for the other controllers, and get set based on Port B status flags */ address_space &mem = m_maincpu->space(AS_PROGRAM); - mem.write_word(0x1e08,0x0001); + mem.write_word(m_controller_sense_addr,0x0001); } void sentx6p_state::controller_send_data(int which) @@ -365,7 +379,7 @@ void sentx6p_state::controller_send_data(int which) READ16_MEMBER(sentx6p_state::sentx_porta_r) { int select_bits = (m_porta_data >> 8) & 0x3f; - logerror("%s: sentx_porta_r (with controller select bits %02x)\n", machine().describe_context(), select_bits); + //logerror("%s: sentx_porta_r (with controller select bits %02x)\n", machine().describe_context(), select_bits); /* 0000 = no controller? (system buttons only?) 0100 = controller 1? @@ -392,14 +406,14 @@ READ16_MEMBER(sentx6p_state::sentx_porta_r) // hacks needed for reading from the UART to work // the select bit must be high here to read from the controller? - if (m_maincpu->pc() == 0x2981e) + if (m_maincpu->pc() == m_pchackaddress1) { ret ^= 0x3f; } // but must be low again here after writing the select bits in order to not // get stuck in a timeout loop - if (m_maincpu->pc() == 0x29834) + if (m_maincpu->pc() == m_pchackaddress2) { ret &= ~0x3f; @@ -667,14 +681,46 @@ void sentx6p_state::sentx6p(machine_config &config) } ROM_START( sentx6p ) - ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "vsmaxxtexasholdem.bin", 0x000000, 0x400000, CRC(00180abb) SHA1(c2af28f64bfdfc9d671bb84561f8a916bc907176) ) +ROM_END + +ROM_START( sentx6puk ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) // chksum:05B58350 is @ 0x3000. // This is the correct sum of 0x3010 - 0x1fffff (the first half of the ROM area after the checksum string) // The 2nd half is not summed (and not used by the game?) but definitely exists in ROM (same data on 2 units) ROM_LOAD16_WORD_SWAP( "senario texas holdem.bin", 0x000000, 0x400000, CRC(7c7d2d33) SHA1(71631074ba66e3b0cdeb86ebca3931599f3a911c) ) ROM_END -// "go 02d1d0" "do r1 = ff" to get past initial screen (currently bypassed by setting controller sense in RAM earlier, see hack in machine_reset) -// a 'deluxe' version of this also exists with extra game modes -CONS( 2004, sentx6p, 0, 0, sentx6p, sentx6p, sentx6p_state, empty_init, "Senario / Play Vision", "Vs Maxx Texas Hold'em TV Poker - 6 Player Edition (UK)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // from a UK Play Vision branded box, values in GBP +ROM_START( sentx6pd ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "senariodeluxetvpoker.bin", 0x000000, 0x800000, CRC(e2b6844e) SHA1(2413195dfe7a08d16ca870c070a19034c9fe8c30) ) +ROM_END + +void sentx6p_state::init_sentx6puk() +{ + m_pchackaddress1 = 0x2981e; + m_pchackaddress2 = 0x29834; + m_controller_sense_addr = 0x1e08; +} + +void sentx6p_state::init_sentx6p() +{ + m_pchackaddress1 = 0x29754; + m_pchackaddress2 = 0x2976a; + m_controller_sense_addr = 0x0804; +} + +void sentx6p_state::init_sentx6pd() +{ + m_pchackaddress1 = 0xca20; + m_pchackaddress2 = 0xca36; + m_controller_sense_addr = 0x1e3a; +} + +CONS( 2004, sentx6p, 0, 0, sentx6p, sentx6p, sentx6p_state, init_sentx6p, "Senario", "Vs Maxx Texas Hold'em TV Poker - 6 Player Edition (US)", MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // from a US version, values in USD +CONS( 2004, sentx6puk, sentx6p, 0, sentx6p, sentx6p, sentx6p_state, init_sentx6puk, "Senario / Play Vision", "Vs Maxx Texas Hold'em TV Poker - 6 Player Edition (UK)", MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // from a UK Play Vision branded box, values in GBP +CONS( 2004, sentx6pd, 0, 0, sentx6p, sentx6p, sentx6p_state, init_sentx6pd, "Senario", "Deluxe TV Poker - Texas Hold'em, Blackjack & Video Poker (US)", MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +// Deluxe version wasn't released outside of US? \ No newline at end of file diff --git a/src/mame/drivers/vt1682.cpp b/src/mame/drivers/vt1682.cpp index 9383458fd3b..15008deee5b 100644 --- a/src/mame/drivers/vt1682.cpp +++ b/src/mame/drivers/vt1682.cpp @@ -111,13 +111,13 @@ public: m_maincpu(*this, "maincpu"), m_fullrom(*this, "fullrom"), m_bank(*this, "cartbank"), + m_screen(*this, "screen"), m_soundcpu(*this, "soundcpu"), m_maincpu_alu(*this, "mainalu"), m_soundcpu_alu(*this, "soundalu"), m_soundcpu_timer_a_dev(*this, "snd_timera_dev"), m_soundcpu_timer_b_dev(*this, "snd_timerb_dev"), m_system_timer_dev(*this, "sys_timer_dev"), - m_screen(*this, "screen"), m_spriteram(*this, "spriteram"), m_vram(*this, "vram"), m_sound_share(*this, "sound_share"), @@ -144,6 +144,8 @@ protected: required_device m_fullrom; required_memory_bank m_bank; + required_device m_screen; + private: required_device m_soundcpu; required_device m_maincpu_alu; @@ -153,7 +155,6 @@ private: required_device m_soundcpu_timer_b_dev; required_device m_system_timer_dev; - required_device m_screen; required_device m_spriteram; required_device m_vram; required_shared_ptr m_sound_share; @@ -664,6 +665,7 @@ public: { } void vt1682_exsport(machine_config& config); + void vt1682_exsportp(machine_config& config); virtual DECLARE_READ8_MEMBER(uiob_r); DECLARE_WRITE8_MEMBER(uiob_w); @@ -5768,6 +5770,14 @@ void vt1682_exsport_state::vt1682_exsport(machine_config& config) m_uio->portb_out().set(FUNC(vt1682_exsport_state::uiob_w)); } +void vt1682_exsport_state::vt1682_exsportp(machine_config& config) +{ + vt_vt1682_state::vt_vt1682(config); + // TODO, different clocks, timings etc.! + m_screen->set_refresh_hz(50); +} + + void vt1682_wow_state::vt1682_wow(machine_config& config) { @@ -5840,6 +5850,12 @@ ROM_START( exsprt48 ) ROM_LOAD( "excitesportgames_48.bin", 0x00000, 0x2000000, CRC(1bf239a0) SHA1(d69c16bac5fb15c62abb5a0c0920405647205539) ) // original dump had upper 2 address lines swapped, unmarked chip, so lines were guessed when dumping ROM_END +// differs by 2 bytes from above, the rasters glitch in MotorStorm in a different way, so it's likely an NTSC/PAL difference? +ROM_START( exsprt48a ) + ROM_REGION( 0x2000000, "mainrom", ROMREGION_ERASE00 ) + ROM_LOAD( "48in1sports.bin", 0x00000, 0x2000000, CRC(8e490541) SHA1(aeb01b3d7229fc888b36aaa924fe6b10597a7783) ) +ROM_END + ROM_START( wowwg ) ROM_REGION( 0x2000000, "mainrom", 0 ) ROM_LOAD( "msp55lv128.bin", 0x00000, 0x1000000, CRC(f607c40c) SHA1(66d3960c3b8fbab06a88cf039419c79a6c8633f0) ) @@ -5885,8 +5901,11 @@ CONS( 200?, intg5410, 0, 0, intech_interact_bank, miwi2, intec_interact_state // Other standalone Mi Kara units should fit here as well -// European versions not verified as the same yet -CONS( 200?, exsprt48, 0, 0, vt1682_exsport, exsprt48, vt1682_exsport_state, regular_init, "Excite", "Excite Sports Wireless Interactive TV Game - 48-in-1 (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // "32 Arcade, 8 Sports, 8 Stadium" + +// the timing code for MotorStorm differs between these sets (although fails wiht our emulation in both cases, even if the game runs fine in other collections) +CONS( 200?, exsprt48, 0, 0, vt1682_exsport, exsprt48, vt1682_exsport_state, regular_init, "Excite", "Excite Sports Wireless Interactive TV Game - 48-in-1 (set 1, NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // "32 Arcade, 8 Sports, 8 Stadium" +CONS( 200?, exsprt48a, exsprt48, 0, vt1682_exsportp, exsprt48, vt1682_exsport_state, regular_init, "Excite", "Excite Sports Wireless Interactive TV Game - 48-in-1 (set 2, PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // ^ + /* There is at least one alt US version of this also on VT1682 diff --git a/src/mame/includes/spg2xx.h b/src/mame/includes/spg2xx.h index 745ee8ca05a..8ec57d6fabb 100644 --- a/src/mame/includes/spg2xx.h +++ b/src/mame/includes/spg2xx.h @@ -39,9 +39,11 @@ public: void rad_crik(machine_config &config); void non_spg_base(machine_config &config); void abltenni(machine_config &config); + void tvsprt10(machine_config &config); void init_crc(); void init_wiwi18(); + void init_tvsprt10(); protected: virtual void machine_start() override; diff --git a/src/mame/mame.lst b/src/mame/mame.lst index b5d66f811b0..ebc641b5356 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -12886,6 +12886,7 @@ rad_baskp rad_sinv rad_tetr airblsjs +sudoelan @source:electra.cpp avenger // (c) 1975 Electra @@ -31271,11 +31272,14 @@ vtpinball // From V.R. Technology VT SDK vtsndtest // From V.R. Technology VT SDK vtboxing // From V.R. Technology VT SDK ablpinb +sudokuv mc_dgear dgun2500 dgun2561 lxcmcy +lxcmc250 lxcmcysw +lxcmcyfz cybar120 mc_dg101 mc_aa2 @@ -31336,6 +31340,7 @@ miwi2_7 intact89 intg5410 exsprt48 +exsprt48a wowwg @source:newbrain.cpp @@ -33938,6 +33943,10 @@ sol20 // @source:pturn.cpp pturn // (c) 1984 Jaleco +@source:pubint_storyreader.cpp +pi_stry +pi_stry2 + @source:pubtimed.cpp pubtimed // @@ -39836,6 +39845,7 @@ rad_crik // rad_fb2 // mattelcs // abltenni // +tvsprt10 // wiwi18 // @source:spg2xx_jakks.cpp @@ -39882,6 +39892,8 @@ sencosmo @source:spg2xx_senario_poker.cpp sentx6p // +sentx6puk +sentx6pd @source:spg2xx_vii.cpp vii // KenSingTon / Jungle Soft / Siatronics Vii -- cgit v1.2.3