summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author David Haywood <28625134+DavidHaywood@users.noreply.github.com>2020-01-24 20:04:11 +0000
committer ajrhacker <ajrhacker@users.noreply.github.com>2020-01-24 15:04:11 -0500
commitb7f6abf4f1dd2aa140115241969eb1c3a305697a (patch)
tree2f17ef0ce057967ac25a29ad5c5003416d765b18
parenta42fa38b795e530e43334dfae888479745a8171e (diff)
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)
-rw-r--r--hash/pi_storyreader_cart.xml16
-rw-r--r--hash/pi_storyreader_v2_cart.xml16
-rw-r--r--scripts/target/mame/mess.lua1
-rw-r--r--src/mame/drivers/elan_eu3a05.cpp111
-rw-r--r--src/mame/drivers/nes_vt.cpp131
-rw-r--r--src/mame/drivers/pubint_storyreader.cpp171
-rw-r--r--src/mame/drivers/spg2xx.cpp70
-rw-r--r--src/mame/drivers/spg2xx_senario.cpp6
-rw-r--r--src/mame/drivers/spg2xx_senario_poker.cpp66
-rw-r--r--src/mame/drivers/vt1682.cpp27
-rw-r--r--src/mame/includes/spg2xx.h2
-rw-r--r--src/mame/mame.lst12
12 files changed, 610 insertions, 19 deletions
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 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<softwarelist name="pi_storyreader_cart" description="Publications International Ltd Story Reader cartridges">
+
+ <software name="ts2" supported="no">
+ <description>Toy Story 2</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd / Disney</publisher>
+ <part name="cart" interface="pi_storyreader_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv1_toystory2.bin" size="0x100000" crc="496fe7b5" sha1="4a66e1e7ec0fdcfe578d60437fcbaaa19f7ac2d3" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
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 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<softwarelist name="pi_storyreader_v2_cart" description="Publications International Ltd Story Reader 2.0 cartridges">
+
+ <software name="ts2" supported="no">
+ <description>Toy Story 2</description>
+ <year>200?</year>
+ <publisher>Publications International Ltd / Disney</publisher>
+ <part name="cart" interface="pi_storyreader_v2_cart">
+ <dataarea name="rom" size="0x100000">
+ <rom name="storyreaderv2_toystory2.bin" size="0x100000" crc="b3b4b613" sha1="0e0bd3a9865ac35a0c8c0dae9cfaac15f5b30a89" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
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<u8> 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, "<unknown>", "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, "<unknown>", "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<generic_slot_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<address_map_bank_device> m_fullrom;
required_memory_bank m_bank;
+ required_device<screen_device> m_screen;
+
private:
required_device<cpu_device> m_soundcpu;
required_device<vrt_vt1682_alu_device> m_maincpu_alu;
@@ -153,7 +155,6 @@ private:
required_device<vrt_vt1682_timer_device> m_soundcpu_timer_b_dev;
required_device<vrt_vt1682_timer_device> m_system_timer_dev;
- required_device<screen_device> m_screen;
required_device<address_map_bank_device> m_spriteram;
required_device<address_map_bank_device> m_vram;
required_shared_ptr<uint8_t> 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