summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author David Haywood <28625134+DavidHaywood@users.noreply.github.com>2020-11-07 17:50:42 +0000
committer GitHub <noreply@github.com>2020-11-08 04:50:42 +1100
commit0460594109287482a36318bc0f685f4470d9352a (patch)
treed58719388ef0209424a42758ac2247b1ae46af6d
parent97578c5d94bdbb47d8be8cf7598ac21c209947f9 (diff)
Plug and Play work (some working VT additions) + some non-working + 2 IQuest cartridges (#7450)
new NOT WORKING software list entries -------------------- leapfrog_iquest_cart.xml: start40 IQuest 4.0 Starter Pack [David Haywood, Sean Riddle, Kamaal Brown] scig5 Science Grade 5 [David Haywood, Sean Riddle, Kamaal Brown] new WORKING machines -------------------- Joystick 30 [David Haywood, Sean Riddle, Kamaal Brown] Joypad 65 [David Haywood, Sean Riddle, Kamaal Brown] new NOT WORKING machines -------------------- Virtual TV Soccer [David Haywood, Sean Riddle] Cyber Arcade Pocket (JL1895) [Tim Schuerewegen] new NOT WORKING clones -------------------- Seal 30-in-1 (VT based, Model FN098134) [David Haywood, Team Europe]
-rw-r--r--hash/leapfrog_iquest_cart.xml30
-rw-r--r--src/mame/drivers/leapfrog_iquest.cpp9
-rw-r--r--src/mame/drivers/nes_clone.cpp125
-rw-r--r--src/mame/drivers/nes_vt02_vt03.cpp8
-rw-r--r--src/mame/drivers/nes_vt09.cpp6
-rw-r--r--src/mame/drivers/nes_vt369_vtunknown.cpp61
-rw-r--r--src/mame/mame.lst5
7 files changed, 203 insertions, 41 deletions
diff --git a/hash/leapfrog_iquest_cart.xml b/hash/leapfrog_iquest_cart.xml
new file mode 100644
index 00000000000..4e42919bd5d
--- /dev/null
+++ b/hash/leapfrog_iquest_cart.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<!--
+license:CC0
+-->
+<softwarelist name="leapfrog_iquest_cart" description="LeapFrog IQuest cartridges">
+
+ <software name="start40" supported="no">
+ <description>IQuest 4.0 Starter Pack</description>
+ <year>200?</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapfrog_iquest_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="iqueststarterpack.bin" size="0x400000" crc="f20f1a67" sha1="4bc8533e0266ba6d21d14e45e30af3cdb943c865" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="scig5" supported="no">
+ <description>Science Grade 5</description>
+ <year>200?</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapfrog_iquest_cart">
+ <dataarea name="rom" size="0x400000">
+ <rom name="iquestsciencegrade5.bin" size="0x400000" crc="0ce7729c" sha1="b3585b1f181afe618835742d2dcd05903671c789" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/src/mame/drivers/leapfrog_iquest.cpp b/src/mame/drivers/leapfrog_iquest.cpp
index 7d6fcdfb1bf..5ca1195d730 100644
--- a/src/mame/drivers/leapfrog_iquest.cpp
+++ b/src/mame/drivers/leapfrog_iquest.cpp
@@ -4,7 +4,7 @@
Leapfrog IQuest
- has LCD display, resolution unknown
+ has LCD display
*******************************************************************************/
@@ -102,8 +102,8 @@ void leapfrog_iquest_state::leapfrog_iquest(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(10));
- m_screen->set_size(160, 160);
- m_screen->set_visarea(0, 160-1, 0, 160-1);
+ m_screen->set_size(90, 64);
+ m_screen->set_visarea(0, 90-1, 0, 64-1);
m_screen->set_screen_update(FUNC(leapfrog_iquest_state::screen_update));
//m_screen->screen_vblank().set(FUNC(leapfrog_iquest_state::screen_vblank));
@@ -120,4 +120,5 @@ ROM_START( iquest )
ROM_END
// year, name, parent, compat, machine, input, class, init, company, fullname, flags
-CONS( 200?, iquest, 0, 0, leapfrog_iquest, leapfrog_iquest, leapfrog_iquest_state, empty_init, "LeapFrog", "IQuest (US)", MACHINE_IS_SKELETON )
+// it is unknown if the versions of IQuest without 4.0 on the case have different system ROM
+CONS( 200?, iquest, 0, 0, leapfrog_iquest, leapfrog_iquest, leapfrog_iquest_state, empty_init, "LeapFrog", "IQuest 4.0 (US)", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/nes_clone.cpp b/src/mame/drivers/nes_clone.cpp
index bff4aa2cd20..bc9403546e4 100644
--- a/src/mame/drivers/nes_clone.cpp
+++ b/src/mame/drivers/nes_clone.cpp
@@ -52,6 +52,7 @@ protected:
optional_ioport m_io1;
uint8_t m_latch0;
uint8_t m_latch1;
+ uint8_t m_previous_port0;
required_device<ppu2c0x_device> m_ppu;
@@ -74,7 +75,7 @@ private:
virtual void machine_reset() override;
uint8_t rom_r(offs_t offset);
void bank_w(uint8_t data);
- int m_rombase;
+ uint8_t m_rombase;
};
class nes_clone_vtvppong_state : public nes_clone_state
@@ -91,26 +92,45 @@ private:
void nes_clone_vtvppong_map(address_map& map);
};
-class nes_clone_suduko_state : public nes_clone_state
+class nes_clone_sudoku_state : public nes_clone_state
{
public:
- nes_clone_suduko_state(const machine_config& mconfig, device_type type, const char* tag) :
+ nes_clone_sudoku_state(const machine_config& mconfig, device_type type, const char* tag) :
nes_clone_state(mconfig, type, tag)
{ }
void init_sudoku();
- void nes_clone_suduko(machine_config& config);
+ void nes_clone_sudoku(machine_config& config);
private:
- void nes_clone_suduko_map(address_map& map);
+ void nes_clone_sudoku_map(address_map& map);
virtual void machine_start() override;
virtual void machine_reset() override;
uint8_t rom_r(offs_t offset);
void bank_w(uint8_t data);
- int m_rombase;
+ uint8_t m_rombase;
};
+class nes_clone_vtvsocr_state : public nes_clone_state
+{
+public:
+ nes_clone_vtvsocr_state(const machine_config& mconfig, device_type type, const char* tag) :
+ nes_clone_state(mconfig, type, tag)
+ { }
+
+ void nes_clone_vtvsocr(machine_config& config);
+
+private:
+ void nes_clone_vtvsocr_map(address_map& map);
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ uint8_t rom_r(offs_t offset);
+ void bank_w(offs_t offset, uint8_t data);
+ uint8_t m_bankregs[4];
+};
+
+
class nes_clone_afbm7800_state : public nes_clone_state
{
@@ -218,11 +238,16 @@ uint8_t nes_clone_state::in1_r()
void nes_clone_state::in0_w(uint8_t data)
{
//logerror("%s: in0_w %02x\n", machine().describe_context(), data);
- if (data & 0x01)
- return;
+ if ((data & 0x01) != (m_previous_port0 & 0x01))
+ {
+ if (data & 0x01)
+ {
+ m_latch0 = m_io0->read();
+ m_latch1 = m_io1->read();
+ }
+ }
- m_latch0 = m_io0->read();
- m_latch1 = m_io1->read();
+ m_previous_port0 = data;
}
@@ -312,6 +337,7 @@ void nes_clone_state::machine_reset()
{
m_latch0 = 0;
m_latch1 = 0;
+ m_previous_port0 = 0;
}
@@ -864,43 +890,42 @@ void nes_clone_afbm7800_state::machine_start()
Sudoku Specifics
**************************************************/
-void nes_clone_suduko_state::machine_reset()
+void nes_clone_sudoku_state::machine_reset()
{
nes_clone_state::machine_reset();
m_rombase = 0;
}
-void nes_clone_suduko_state::machine_start()
+void nes_clone_sudoku_state::machine_start()
{
nes_clone_state::machine_start();
save_item(NAME(m_rombase));
}
-void nes_clone_suduko_state::nes_clone_suduko(machine_config& config)
+void nes_clone_sudoku_state::nes_clone_sudoku(machine_config& config)
{
nes_clone(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &nes_clone_suduko_state::nes_clone_suduko_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &nes_clone_sudoku_state::nes_clone_sudoku_map);
}
-void nes_clone_suduko_state::nes_clone_suduko_map(address_map& map)
+void nes_clone_sudoku_state::nes_clone_sudoku_map(address_map& map)
{
nes_clone_basemap(map);
- map(0x8000, 0xffff).rw(FUNC(nes_clone_suduko_state::rom_r), FUNC(nes_clone_suduko_state::bank_w));
+ map(0x8000, 0xffff).rw(FUNC(nes_clone_sudoku_state::rom_r), FUNC(nes_clone_sudoku_state::bank_w));
}
-uint8_t nes_clone_suduko_state::rom_r(offs_t offset)
+uint8_t nes_clone_sudoku_state::rom_r(offs_t offset)
{
return m_mainrom[(offset + (m_rombase * 0x8000)) & (m_mainromsize - 1)];
}
-void nes_clone_suduko_state::bank_w(uint8_t data)
+void nes_clone_sudoku_state::bank_w(uint8_t data)
{
logerror("%04x: bank_w %02x\n", machine().describe_context(), data);
m_rombase = data;
}
-
-void nes_clone_suduko_state::init_sudoku()
+void nes_clone_sudoku_state::init_sudoku()
{
u8 *src = memregion("maincpu")->base();
int len = memregion("maincpu")->bytes();
@@ -921,10 +946,58 @@ void nes_clone_suduko_state::init_sudoku()
std::copy(buffer.begin(), buffer.end(), &src[0]);
}
+}
+
+/**************************************************
+ Soccer Specifics
+ INES Mapper 178 / NES 2.0 Mapper 551 clone or similar?
+**************************************************/
+
+void nes_clone_vtvsocr_state::machine_reset()
+{
+ nes_clone_state::machine_reset();
+ m_bankregs[0] = 0;
+ m_bankregs[1] = 0;
+ m_bankregs[2] = 0;
+ m_bankregs[3] = 0;
+}
+void nes_clone_vtvsocr_state::machine_start()
+{
+ nes_clone_state::machine_start();
+ save_item(NAME(m_bankregs));
+}
+void nes_clone_vtvsocr_state::nes_clone_vtvsocr(machine_config& config)
+{
+ nes_clone(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &nes_clone_vtvsocr_state::nes_clone_vtvsocr_map);
}
+void nes_clone_vtvsocr_state::nes_clone_vtvsocr_map(address_map& map)
+{
+ nes_clone_basemap(map);
+ map(0x4800, 0x4803).w(FUNC(nes_clone_vtvsocr_state::bank_w));
+ map(0x8000, 0xffff).r(FUNC(nes_clone_vtvsocr_state::rom_r));
+}
+
+uint8_t nes_clone_vtvsocr_state::rom_r(offs_t offset)
+{
+ int bank = m_bankregs[1] >> 1;
+ return m_mainrom[(offset + (bank * 0x8000)) & (m_mainromsize - 1)];
+}
+
+void nes_clone_vtvsocr_state::bank_w(offs_t offset, uint8_t data)
+{
+ logerror("%04x: bank_w %02x %02x\n", machine().describe_context(), offset, data);
+ m_bankregs[offset] = data;
+}
+
+/**************************************************
+ Ping Pong Specifics
+**************************************************/
+
+
void nes_clone_vtvppong_state::init_vtvppong()
{
u8 *src = memregion("maincpu")->base();
@@ -995,6 +1068,12 @@ ROM_START( vtvppong )
ROM_LOAD( "vtvpongppu.bin", 0x00000, 0x20000, CRC(474dfc0c) SHA1(4d0afab111e40172ae0b31e94f1b74b73a18385f) )
ROM_END
+ROM_START( vtvsocr )
+ ROM_REGION( 0x40000, "maincpu", 0 )
+ // 8-bit ROM, but byteswapped for encryption?
+ ROM_LOAD16_WORD_SWAP( "virtualtvsoccer.bin", 0x00000, 0x40000, CRC(2cfe42aa) SHA1(c2cafdbd5cc6491c94efd3f1be4b70c9de737b46) )
+ROM_END
+
void nes_clone_state::init_nes_clone()
{
}
@@ -1009,10 +1088,12 @@ CONS( 200?, dnce2000, 0, 0, nes_clone_dnce2000, dnce2000, nes_clone_dnce2000_sta
// Black pad marked 'SUDOKU' with tails on the S and U characters looping over the logo. Box says "Plug and Play Sudoku"
// Has 2 sets of 4 buttons in circular 'direction pad' layouts (on the left for directions, on the right for functions) and 9 red numbered buttons with red power LED on left of them, and reset button on right
// Alt. version was released with 'New York Times' titlescreen
-CONS( 200?, papsudok, 0, 0, nes_clone_suduko, papsudok, nes_clone_suduko_state, init_sudoku, "Nice Code", "Plug and Play Sudoku Game (NES based)", 0 ) // plays, but unclear how 'save' feature is meant to work, is it meant to save after shutdown or not? no obvious writes
+CONS( 200?, papsudok, 0, 0, nes_clone_sudoku, papsudok, nes_clone_sudoku_state, init_sudoku, "Nice Code", "Plug and Play Sudoku Game (NES based)", 0 ) // plays, but unclear how 'save' feature is meant to work, is it meant to save after shutdown or not? no obvious writes
-CONS( 200?, nytsudo, 0, 0, nes_clone_suduko, papsudok, nes_clone_suduko_state, init_sudoku, "Excalibur / Nice Code", "The New York Times Sudoku", 0 ) // based on the above
+CONS( 200?, nytsudo, 0, 0, nes_clone_sudoku, papsudok, nes_clone_sudoku_state, init_sudoku, "Excalibur / Nice Code", "The New York Times Sudoku", 0 ) // based on the above
CONS( 200?, vtvppong, 0, 0, nes_clone_vtvppong, nes_clone, nes_clone_vtvppong_state, init_vtvppong, "<unknown>", "Virtual TV Ping Pong", MACHINE_NOT_WORKING )
CONS( 200?, pjoypj001, 0, 0, nes_clone, nes_clone, nes_clone_state, init_nes_clone, "Trump Grand", "PowerJoy (PJ001, NES based plug & play)", MACHINE_NOT_WORKING )
+
+CONS( 200?, vtvsocr, 0, 0, nes_clone_vtvsocr, nes_clone, nes_clone_vtvsocr_state, init_nes_clone, "<unknown>", "Virtual TV Soccer", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/nes_vt02_vt03.cpp b/src/mame/drivers/nes_vt02_vt03.cpp
index d4c7f2e5f8e..f07cf78fd0a 100644
--- a/src/mame/drivers/nes_vt02_vt03.cpp
+++ b/src/mame/drivers/nes_vt02_vt03.cpp
@@ -1099,7 +1099,10 @@ ROM_START( pjoys60 )
ROM_LOAD( "power joy supermax 60-in-1.prg", 0x00000, 0x400000, CRC(1ab45228) SHA1(d148924afc39fc588235331a1a30df6e0d8e1e18) )
ROM_END
-
+ROM_START( joysti30 )
+ ROM_REGION( 0x400000, "mainrom", 0 )
+ ROM_LOAD( "joystick30.bin", 0x00000, 0x400000, CRC(b3f089af) SHA1(478d53d38eeffdbc4a1271d0e060aeb29e919502) )
+ROM_END
// CoolBoy AEF-390 8bit Console, B8VPCBVer03 20130703 0401E2015897A
ROM_START( mc_8x6cb )
@@ -1363,6 +1366,9 @@ CONS( 200?, dgun853, 0, 0, nes_vt_vh2009_8mb, nes_vt, nes_vt_swap_op_
CONS( 200?, silv35, 0, 0, nes_vt_vh2009_4mb, nes_vt, nes_vt_swap_op_d5_d6_state, empty_init, "SilverLit / JungleTac", "35 in 1 Super Twins", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
CONS( 2004, vsmaxxvd, 0, 0, nes_vt_vh2009_8mb, nes_vt, nes_vt_swap_op_d5_d6_state, empty_init, "Senario / JungleTac", "Vs Maxx Video Extreme 50-in-1 (with Speed Racer and Snood)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
CONS( 200?, vsmaxx77, 0, 0, nes_vt_vh2009_8mb, nes_vt, nes_vt_swap_op_d5_d6_state, empty_init, "Senario / JungleTac", "Vs Maxx Wireless 77-in-1", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 200?, joysti30, 0, 0, nes_vt_vh2009_4mb, nes_vt, nes_vt_swap_op_d5_d6_state, empty_init, "WinFun / JungleTac", "Joystick 30", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // doesn't show WinFun onscreen, but packaging does
+
+
// die is marked as VH2009, as above, but no scrambled opcodes here
CONS( 201?, techni4, 0, 0, nes_vt_pal_2mb, nes_vt, nes_vt_state, empty_init, "Technigame", "Technigame Super 4-in-1 Sports (PAL)", MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/nes_vt09.cpp b/src/mame/drivers/nes_vt09.cpp
index 21ab4710208..b02e9669c8f 100644
--- a/src/mame/drivers/nes_vt09.cpp
+++ b/src/mame/drivers/nes_vt09.cpp
@@ -433,6 +433,11 @@ ROM_START( vgpmini )
// there was a dump of a 'secure' area with this, but it was just the bottom 0x10000 bytes of the existing rom.
ROM_END
+ROM_START( joypad65 )
+ ROM_REGION( 0x800000, "mainrom", 0 )
+ ROM_LOAD( "joypad65.bin", 0x00000, 0x800000, CRC(b7f81c5f) SHA1(8579d9bc866415e0049979b7c3427d8dd0a60813) )
+ROM_END
+
// MSI Entertainment games (MSI previously operated as Majesco Entertainment)
// There are meant to be multiple revisions of this software, some with theme tunes for the new wrestlers, some without. This one appears to lack them.
@@ -462,6 +467,7 @@ CONS( 200?, senario25, 0, 0, nes_vt09_2mb, nes_vt09, nes_vt09_state, empty_ini
CONS( 200?, rcapnp, 0, 0, nes_vt09_2mb, nes_vt09, nes_vt09_state, empty_init, "RCA / JungleTac", "RCA NS-500 30-in-1", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
CONS( 200?, dturbogt, 0, 0, nes_vt09_8mb, nes_vt09, nes_vt09_state, empty_init, "dreamGEAR / JungleTac", "Turbo GT 50-in-1", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
CONS( 200?, ventur25, 0, 0, nes_vt09_4mb, nes_vt09, nes_vt09_state, empty_init, "<unknown> / JungleTac", "Venturer '25 Games' 25-in-1", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 200?, joypad65, 0, 0, nes_vt09_8mb, nes_vt09, nes_vt09_state, empty_init, "WinFun / JungleTac", "Joypad 65", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
CONS( 2005, vgpocket, 0, 0, nes_vt09_4mb, nes_vt09, nes_vt09_state, empty_init, "Performance Designed Products / JungleTac", "VG Pocket (VG-2000)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
CONS( 200?, vgpmini, 0, 0, nes_vt09_4mb, nes_vt09, nes_vt09_state, empty_init, "Performance Designed Products / JungleTac", "VG Pocket Mini (VG-1500)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// VG Pocket Max (VG-2500) (blue case, 75 games)
diff --git a/src/mame/drivers/nes_vt369_vtunknown.cpp b/src/mame/drivers/nes_vt369_vtunknown.cpp
index a9a3890159f..29d13db5216 100644
--- a/src/mame/drivers/nes_vt369_vtunknown.cpp
+++ b/src/mame/drivers/nes_vt369_vtunknown.cpp
@@ -158,6 +158,7 @@ public:
{ }
void nes_vt369_vtunknown_hh(machine_config& config);
+ void nes_vt369_vtunknown_hh_1mb(machine_config& config);
void nes_vt369_vtunknown_hh_4mb(machine_config& config);
void nes_vt369_vtunknown_hh_8mb(machine_config& config);
void nes_vt369_vtunknown_hh_16mb(machine_config& config);
@@ -472,6 +473,17 @@ void nes_vt369_vtunknown_unk_state::nes_vt369_vtunknown_hh_swap_8mb(machine_conf
m_soc->set_addrmap(AS_PROGRAM, &nes_vt369_vtunknown_unk_state::vt_external_space_map_8mbyte);
}
+void nes_vt369_vtunknown_unk_state::nes_vt369_vtunknown_hh_1mb(machine_config& config)
+{
+ nes_vt369_vtunknown_hh(config);
+ m_soc->set_addrmap(AS_PROGRAM, &nes_vt369_vtunknown_unk_state::vt_external_space_map_1mbyte);
+}
+
+void nes_vt369_vtunknown_unk_state::nes_vt369_vtunknown_hh_4mb(machine_config& config)
+{
+ nes_vt369_vtunknown_hh(config);
+ m_soc->set_addrmap(AS_PROGRAM, &nes_vt369_vtunknown_unk_state::vt_external_space_map_4mbyte);
+}
void nes_vt369_vtunknown_unk_state::nes_vt369_vtunknown_hh_8mb(machine_config& config)
{
@@ -485,11 +497,7 @@ void nes_vt369_vtunknown_unk_state::nes_vt369_vtunknown_hh_16mb(machine_config&
m_soc->set_addrmap(AS_PROGRAM, &nes_vt369_vtunknown_unk_state::vt_external_space_map_16mbyte);
}
-void nes_vt369_vtunknown_unk_state::nes_vt369_vtunknown_hh_4mb(machine_config& config)
-{
- nes_vt369_vtunknown_hh(config);
- m_soc->set_addrmap(AS_PROGRAM, &nes_vt369_vtunknown_unk_state::vt_external_space_map_4mbyte);
-}
+
static INPUT_PORTS_START( nes_vt369_vtunknown )
@@ -698,6 +706,11 @@ ROM_START( zonefusn )
ROM_LOAD( "fusion.bin", 0x00000, 0x1000000, CRC(240bf970) SHA1(1b82d95a252c08e52fb8da6320276574a30b60db) )
ROM_END
+ROM_START( sealvt )
+ ROM_REGION( 0x1000000, "mainrom", 0 )
+ ROM_LOAD( "l157-44 v02.u1", 0x00000, 0x1000000, CRC(0fabced0) SHA1(3f8cd85b12b125b01c831c9f2f2937e29c1b6205) )
+ROM_END
+
ROM_START( gcs2mgp )
ROM_REGION( 0x2000000, "mainrom", 0 )
ROM_LOAD( "gcs2_v4.u3", 0x00000, 0x1000000, CRC(3b5be765) SHA1(c54f1a732d638b0ee582ca822715c9d3a3af5ef3) )
@@ -756,7 +769,7 @@ ROM_START( gtct885 )
ROM_REGION( 0x800000, "mainrom", 0 )
ROM_LOAD( "ct-885 g25q64c.bin", 0x00000, 0x800000, CRC(a5b2b568) SHA1(79de79364fa731e421627ec68e3bfa9d311aa7fc) )
- ROM_REGION( 0x100, "extra", 0 ) // additional 8-pin chip (maybe SEEPROM? or PROM?)
+ ROM_REGION( 0x100, "extra", 0 ) // data from additional 8-pin chip for protection
ROM_LOAD( "mystery chip.bin", 0x00000, 0x100, CRC(8173c1c2) SHA1(7521a4676166a81a79209638491026b2d8e32895) )
ROM_END
@@ -764,7 +777,7 @@ ROM_START( rd5_240 )
ROM_REGION( 0x800000, "mainrom", 0 )
ROM_LOAD( "red5.bin", 0x00000, 0x800000, CRC(0e564e73) SHA1(c29a927c830ab3876e9b63e2d41bef962c05518f) )
- ROM_REGION( 0x100, "extra", 0 ) // additional 8-pin chip (maybe SEEPROM? or PROM?)
+ ROM_REGION( 0x100, "extra", 0 ) // data from additional 8-pin chip for protection
ROM_LOAD( "mystery chip.bin", 0x00000, 0x100, NO_DUMP )
ROM_END
@@ -792,6 +805,17 @@ ROM_START( hkb502a )
ROM_LOAD( "internal.bin", 0x0000, 0x1000, CRC(da5850f0) SHA1(39d674d965818922aad5993e9499170d3ebc43bf) )
ROM_END
+ROM_START( lxcap )
+ ROM_REGION( 0x800000, "mainrom", 0 )
+ ROM_LOAD( "lexibook_cyber_arcade_pocket.bin", 0x00000, 0x800000, CRC(245d0cd3) SHA1(d91cca2d0f99a6ca202fa9ba6d03587ea8af0cd9) )
+
+ ROM_REGION( 0x1000, "internal", 0 ) // maps at 1000-1fff on main CPU, and it boots using vectors in 1ffx area
+ ROM_LOAD( "internal.bin", 0x0000, 0x1000, CRC(da5850f0) SHA1(39d674d965818922aad5993e9499170d3ebc43bf) )
+
+ ROM_REGION( 0x100, "extra", 0 ) // data from additional 8-pin chip for protection
+ ROM_LOAD( "mystery chip.bin", 0x00000, 0x100, CRC(491d206b) SHA1(a5411a7afe3b4df93b1b22e5533f5010bd3aaa93) )
+ROM_END
+
ROM_START( denv150 )
ROM_REGION( 0x1000000, "mainrom", 0 )
ROM_LOAD( "denver150in1.bin", 0x00000, 0x1000000, CRC(6b3819d7) SHA1(b0039945ce44a52ea224ab736d5f3c6980409b5d) ) // 2nd half is blank
@@ -799,7 +823,7 @@ ROM_END
ROM_START( egame150 )
ROM_REGION( 0x800000, "mainrom", 0 )
- ROM_LOAD( "rom.bin", 0x00000, 0x800000, CRC(113819d7) SHA1(b0039945ce44a52ea224ab736d5f3c6980409b5d) )
+ ROM_LOAD( "rom.bin", 0x00000, 0x800000, CRC(a19644ea) SHA1(01c004d126edf792f71c1e9ed98b3c96d9278a69) )
ROM_END
ROM_START( retro400 )
@@ -911,6 +935,8 @@ CONS( 2017, rtvgc300fz,0, 0, nes_vt369_vtunknown_cy_bigger, nes_vt369_vtunknow
// uncertain, NOT SPI ROM
CONS( 200?, zonefusn, 0, 0, nes_vt369_vtunknown_fp_16mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "Ultimate Products / Jungle's Soft", "Zone Fusion", MACHINE_NOT_WORKING )
+// same as above but without Jungle's Soft boot logo? model number taken from cover of manual
+CONS( 200?, sealvt, zonefusn, 0, nes_vt369_vtunknown_fp_16mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "Lexibook / Sit Up Limited / Jungle's Soft", "Seal 30-in-1 (VT based, Model FN098134)", MACHINE_NOT_WORKING )
// NOT SPI roms, start with '6a'
@@ -921,7 +947,12 @@ CONS( 2016, dgun2593, 0, 0, nes_vt369_vtunknown_cy_bigger, nes_vt369_vtunknow
// similar, starts with a '6a' ror a opcode which is presumably encrypted / extended, then normal looking code, then unknown instructions
CONS( 200?, gcs2mgp, 0, 0, nes_vt369_vtunknown_cy_bigger, nes_vt369_vtunknown, nes_vt369_vtunknown_cy_state, empty_init, "Jungle's Soft", "Mini Game Player 48-in-1", MACHINE_NOT_WORKING )
+/*****************************************************************************
+* below are VT369 games that use BGA on sub
+*****************************************************************************/
+// doesn't use most features, M705-128A6 sub-board with BGA
+CONS( 201?, retro400, 0, 0, nes_vt369_vtunknown_hh_16mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "<unknown>", "Retro FC 400-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
/*****************************************************************************
* below are VT369 games that use SQI / SPI ROM
@@ -950,19 +981,21 @@ CONS( 201?, gtct885, mc_tv200, 0, nes_vt369_vtunknown_hh_8mb, nes_vt369_vtun
// similar to above, but with 40 extra games, menu is protected with code from extra ROM (although RTS opcodes seem to work)
CONS( 201?, rd5_240, 0, 0, nes_vt369_vtunknown_hh_8mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "Red5", "Mini Arcade Machine 240-in-1 (Red5)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
-CONS( 201?, hkb502, 0, 0, nes_vt369_vtunknown_hh_8mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "<unknown>", "HKB-502 268-in-1 (set 1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
-CONS( 201?, hkb502a, hkb502, 0, nes_vt369_vtunknown_hh_8mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "<unknown>", "HKB-502 268-in-1 (set 2)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 201?, hkb502, 0, 0, nes_vt369_vtunknown_hh_4mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "<unknown>", "HKB-502 268-in-1 (set 1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 201?, hkb502a, hkb502, 0, nes_vt369_vtunknown_hh_4mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "<unknown>", "HKB-502 268-in-1 (set 2)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
+
+// uses a LCD with resolution of 160x128 (image scaled to fit for some games, others run natively at 160x128)
+// contains a protection chip, command 80 XX returns a byte
+CONS( 201?, lxcap, 0, 0, nes_vt369_vtunknown_hh_8mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "Lexibook", "Cyber Arcade Pocket (JL1895)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
+
// VT369, but doesn't use most features
-CONS( 201?, myarccn, 0, 0, nes_vt369_vtunknown_hh_8mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "DreamGear", "My Arcade Caveman Ninja", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 201?, myarccn, 0, 0, nes_vt369_vtunknown_hh_1mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "DreamGear", "My Arcade Caveman Ninja", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
// confirmed VT369, uses more features (including sound CPU)
CONS( 201?, denv150, 0, 0, nes_vt369_vtunknown_cy_bigger, nes_vt369_vtunknown, nes_vt369_vtunknown_cy_state, empty_init, "Denver", "Denver Game Console GMP-240C 150-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
CONS( 201?, egame150, denv150, 0, nes_vt369_vtunknown_cy_bigger, nes_vt369_vtunknown, nes_vt369_vtunknown_cy_state, empty_init, "<unknown>", "E-Game! 150-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
-// doesn't use most features
-CONS( 201?, retro400, 0, 0, nes_vt369_vtunknown_hh_16mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "<unknown>", "Retro FC 400-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
-
// uncertain, uses SPI ROM so probably VT369
CONS( 2017, otrail, 0, 0, nes_vt369_vtunknown_unk_1mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "Basic Fun", "The Oregon Trail", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 4b00be75036..dd7f0d2ef07 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -32235,6 +32235,7 @@ dnce2000
vtvppong
papsudok
nytsudo
+vtvsocr
@source:nes_sh6578.cpp
bandgpad
@@ -32280,6 +32281,7 @@ dgun853
silv35
vsmaxxvd
vsmaxx77
+joysti30
techni4
senwld
protpp
@@ -32332,6 +32334,7 @@ ventur25
vgpocket
vgpmini
vgtablet
+joypad65
@source:nes_vt32.cpp
dgun2573
@@ -32351,6 +32354,7 @@ gtct885
rd5_240
hkb502
hkb502a
+lxcap
retro400
myarccn
fapocket
@@ -32379,6 +32383,7 @@ lpgm240
tup240
otrail
zonefusn
+sealvt
gcs2mgp
@source:newbrain.cpp