diff --git a/hash/tvgogo.xml b/hash/tvgogo.xml
index 952da5aefe6..2243ac9ba07 100644
--- a/hash/tvgogo.xml
+++ b/hash/tvgogo.xml
@@ -7,14 +7,15 @@ license:CC0-1.0
Dumped | Dumped | Name |Notes
_(EU)__|__(US)__|____________|_____________________________________
- Y* | Y | 4 in 1 |No controller
- Y | Y | Whac-A-Mole|Hammer-shaped IR motion controller
- Y | Y | Basketball |Ball-shaped motion controller
- Y | | Tennis |Racquet-shaped IR motion controller
- | Y | Dodgeball |Motion controller
- | Y | Baseball |Baseball Bat shaped motion controller
- | | Paintball |Gun controller
- | | Skateboard |Skateboard-shaped motion controller
+ Y* | Y | 4 in 1 |No controller
+ Y | Y | Whac-A-Mole |Hammer-shaped IR motion controller
+ Y | Y | Basketball |Ball-shaped motion controller
+ Y | | Tennis |Racquet-shaped IR motion controller
+ | Y | Dodgeball |Motion controller
+ | Y | Baseball |Baseball Bat shaped motion controller
+ Y | | Paintball |Gun controller
+ Y | | Snowboarding |Snowboard-shaped motion controller
+ | | Skateboard |Skateboard-shaped motion controller
The US carts do not appear to have a language selection screen
@@ -127,4 +128,26 @@ _(EU)__|__(US)__|____________|_____________________________________
+
+ Snowboarding (Europe)
+ 2005
+ Toyquest
+
+
+
+
+
+
+
+
+ Paintball (Europe)
+ 2005
+ Toyquest
+
+
+
+
+
+
+
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index e823052d558..c33b96ab4e4 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -34994,8 +34994,11 @@ nesm8b
m82
@source:nintendo/nes_sh6578.cpp
+6578cjz1
+6578cjz2
bandgpad
bandggcn
+bb6578
cpatrolm
dancmix3
ts_handy11
@@ -35090,6 +35093,7 @@ cybar120
dturbogt
jl2050
joypad65
+matetsl
msiwwe
msiwwea
msidd
@@ -35115,7 +35119,9 @@ dgun2573a
dgunl3201
dgunl3202
fcpocket
+matet220
matet300
+myaass
rminitv
@source:nintendo/nes_vt369_vtunknown.cpp
@@ -35151,6 +35157,7 @@ lxcmcysp
lxcmcysw
lxcyber
matet10
+matet100
mc_cb280
mc_hh210
mog_m320
@@ -46386,6 +46393,7 @@ tvtchspd
tvtchsb
@source:tvgames/spg2xx_lexibook.cpp
+arcade3d
lexizeus
lexiseal
discpal
@@ -46557,6 +46565,7 @@ gungunad
gungunrv
has_wamg
hikara
+hippofr
isinger
jarajal
jpopira
diff --git a/src/mame/nintendo/nes_sh6578.cpp b/src/mame/nintendo/nes_sh6578.cpp
index 386068cc6d5..8ae9c2c874a 100644
--- a/src/mame/nintendo/nes_sh6578.cpp
+++ b/src/mame/nintendo/nes_sh6578.cpp
@@ -59,6 +59,7 @@ protected:
virtual void video_start() override ATTR_COLD;
virtual void io_w(uint8_t data);
+ virtual uint8_t extio_r();
virtual void extio_w(uint8_t data);
bool m_isbanked;
required_memory_bank m_bank;
@@ -164,6 +165,18 @@ protected:
virtual void machine_reset() override ATTR_COLD;
};
+class nes_sh6578_cjz_state : public nes_sh6578_state
+{
+public:
+ nes_sh6578_cjz_state(const machine_config& mconfig, device_type type, const char* tag) :
+ nes_sh6578_state(mconfig, type, tag)
+ { }
+
+protected:
+ // TODO, work out the I/O and anything else specific to this machine
+ virtual uint8_t extio_r() override { return machine().rand(); }
+};
+
uint8_t nes_sh6578_state::bank_r(int bank, uint16_t offset)
{
uint32_t address;
@@ -428,6 +441,12 @@ void nes_sh6578_abl_wikid_state::io_w(uint8_t data)
}
}
+uint8_t nes_sh6578_state::extio_r()
+{
+ logerror("%s: extio_r\n", machine().describe_context());
+ return 0x00;
+}
+
void nes_sh6578_state::extio_w(uint8_t data)
{
logerror("%s: extio_w : %02x\n", machine().describe_context(), data);
@@ -476,7 +495,7 @@ void nes_sh6578_state::nes_sh6578_map(address_map& map)
//4023 read/write joystick,mouse control
//4024 read - mouse port / write - mouse baud
//4025 write - Printer Port
- map(0x4026, 0x4026).w(FUNC(nes_sh6578_state::extio_w));
+ map(0x4026, 0x4026).rw(FUNC(nes_sh6578_state::extio_r), FUNC(nes_sh6578_state::extio_w));
//4027 read/write - DAC data register
map(0x4031, 0x4031).w(FUNC(nes_sh6578_state::initial_startup_w));
@@ -666,6 +685,21 @@ ROM_START( cpatrolm )
ROM_LOAD( "citypatrolman.bin", 0x00000, 0x100000, CRC(4b139c67) SHA1(a5b03f472a94ee879f58bbff201b671fbf4f1ea1) )
ROM_END
+ROM_START( bb6578 )
+ ROM_REGION( 0x80000, "maincpu", 0 )
+ ROM_LOAD( "tv game baseball.bin", 0x00000, 0x80000, CRC(dec862b2) SHA1(fb3d97ccde17ab6ead8eafb4e0aafb72fbb6674c) )
+ROM_END
+
+ROM_START( 6578cjz1 )
+ ROM_REGION( 0x100000, "maincpu", 0 )
+ ROM_LOAD( "tv game1.bin", 0x00000, 0x100000, CRC(161c4119) SHA1(b2ce91b070bcaba73c8a23e7067fe8ba41151a40) )
+ROM_END
+
+ROM_START( 6578cjz2 )
+ ROM_REGION( 0x100000, "maincpu", 0 )
+ ROM_LOAD( "tv game2.bin", 0x00000, 0x100000, CRC(cda1395c) SHA1(b0fdf1d3ebd9b7138ec907a0acdf0ea2d275c990) )
+ROM_END
+
ROM_START( ablwikid )
ROM_REGION( 0x200000, "maincpu", 0 )
ROM_LOAD( "mx29f1610atc.u2", 0x00000, 0x200000, CRC(f16abf79) SHA1(aeccbb40d7fdd451ba8e5cca20464da2cf116461) )
@@ -744,6 +778,13 @@ CONS( 1997, bandggcn, 0, 0, nes_sh6578, nes_sh6578, nes_sh6578_state, i
CONS( 200?, cpatrolm, 0, 0, nes_sh6578_pal, nes_sh6578, nes_sh6578_state, init_nes_sh6578, "TimeTop", "City Patrolman", MACHINE_NOT_WORKING )
+CONS( 200?, bb6578, 0, 0, nes_sh6578, nes_sh6578, nes_sh6578_state, init_nes_sh6578, "DaiDaiXing Electronics", "TV Games Baseball (SH6578 hardware)", MACHINE_NOT_WORKING )
+
+// these don't boot much further than the timetop logo and a splash screen
+// "Super Knowledge Monopoly" is an English translation of the title
+CONS( 200?, 6578cjz1, 0, 0, nes_sh6578, nes_sh6578, nes_sh6578_cjz_state, init_nes_sh6578, "TimeTop", u8"Chāo Jí Zhī Shi Dà Fù Wēng (vol. 1)", MACHINE_NOT_WORKING )
+CONS( 200?, 6578cjz2, 6578cjz1, 0, nes_sh6578, nes_sh6578, nes_sh6578_cjz_state, init_nes_sh6578, "TimeTop", u8"Chāo Jí Zhī Shi Dà Fù Wēng (vol. 2)", MACHINE_NOT_WORKING )
+
// Super Moto 3 https://youtu.be/DR5Y_r6C_qk - has JungleTac copyrights intact, and appears to have the SH6578 versions of the games
// Handy Max 15-in-1 https://youtu.be/jQTUHj1cP-k - has JungleTac copyrights intact, and appears to have the SH6578 versions of the games
diff --git a/src/mame/nintendo/nes_vt09.cpp b/src/mame/nintendo/nes_vt09.cpp
index 93009cd91cd..4d31e3b884c 100644
--- a/src/mame/nintendo/nes_vt09.cpp
+++ b/src/mame/nintendo/nes_vt09.cpp
@@ -542,6 +542,10 @@ ROM_START( wfmotor )
ROM_LOAD( "motorcycle.bin", 0x00000, 0x400000, CRC(978f12f0) SHA1(a0230cfe4398d3971d487ff5d4b7107341799424) )
ROM_END
+ROM_START( matetsl )
+ ROM_REGION( 0x100000, "mainrom", 0 )
+ ROM_LOAD( "slurpeetetris_p25q40sh_856013.bin", 0x00000, 0x80300, CRC(d3b68de8) SHA1(97bcdfcd31bc536b626f9a369afe18de60a399da) )
+ROM_END
} // anonymous namespace
@@ -589,6 +593,8 @@ CONS( 2006, vgtablet, 0, 0, nes_vt09_4mb_rasterhack, nes_vt09, nes_vt09_state
CONS( 200?, jl2050, 0, 0, nes_vt09_16mb,nes_vt09, nes_vt09_state, empty_init, "LexiBook / JungleTac / NiceCode", "Cyber Console Center 200-in-1 (JL2050)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// might be VT369 based, if so, move
-CONS( 2018, rbbrite, 0, 0, nes_vt09_1mb, nes_vt09, nes_vt09_state, empty_init, "Coleco", "Rainbow Brite (mini-arcade)", MACHINE_NOT_WORKING )
+CONS( 2018, rbbrite, 0, 0, nes_vt09_1mb, nes_vt09, nes_vt09_state, empty_init, "Coleco", "Rainbow Brite (mini-arcade)", MACHINE_NOT_WORKING )
-CONS( 200?, timetp25, 0, 0, nes_vt09_cart, nes_vt09, nes_vt09_cart_state, empty_init, "Timetop", "Super Game 25-in-1 (GM-228)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 200?, timetp25, 0, 0, nes_vt09_cart, nes_vt09, nes_vt09_cart_state, empty_init, "Timetop", "Super Game 25-in-1 (GM-228)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+
+CONS( 2021, matetsl, 0, 0, nes_vt09_1mb, nes_vt09, nes_vt09_state, empty_init, "dreamGEAR", "My Arcade Tetris (Slurpee)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // no bonus games on this model
diff --git a/src/mame/nintendo/nes_vt32.cpp b/src/mame/nintendo/nes_vt32.cpp
index ce3066d0002..2ba38ae5169 100644
--- a/src/mame/nintendo/nes_vt32.cpp
+++ b/src/mame/nintendo/nes_vt32.cpp
@@ -361,6 +361,12 @@ ROM_START( dgunl3202 )
ROM_IGNORE(0x100)
ROM_END
+ROM_START( myaass )
+ ROM_REGION( 0x2000000, "mainrom", 0 )
+ ROM_LOAD( "s29gl256.u2", 0x00000, 0x2000000, CRC(71a3298d) SHA1(5a2441ae5a8bf3e5efe9f22843ad2b8ef2df0f40) )
+ROM_END
+
+
ROM_START( fcpocket )
ROM_REGION( 0x8000000, "mainrom", 0 )
ROM_LOAD( "s29gl01gp.bin", 0x00000, 0x8000000, CRC(8703b18a) SHA1(07943443294e80ca93f83181c8bdbf950b87c52f) ) // 2nd half = 0x00 (so 64MByte of content)
@@ -371,6 +377,12 @@ ROM_START( matet300 )
ROM_LOAD( "tetris.bin", 0x00000, 0x2000000, CRC(73cbd40a) SHA1(5996c97cebd6cec42a0ba1fba9517adf1af00098) )
ROM_END
+ROM_START( matet220 )
+ ROM_REGION( 0x2000000, "mainrom", 0 )
+ ROM_LOAD( "gamervtetris_s29gl128n10tfi01_0001227e.bin", 0x00000, 0x1000000, CRC(ac244e56) SHA1(89897f5f65f55a46bf0d6b5ca534ca31c79a0658) )
+ ROM_IGNORE(0x100)
+ROM_END
+
} // anonymous namespace
@@ -387,7 +399,13 @@ CONS( 201?, dgunl3201, 0, 0, nes_vt32_32mb, nes_vt32, nes_vt32_unk_state, empt
CONS( 201?, dgunl3202, 0, 0, nes_vt32_32mb, nes_vt32, nes_vt32_unk_state, empty_init, "dreamGEAR", "My Arcade Data East Classics - Pixel Player (308-in-1) (DGUNL-3202)", MACHINE_NOT_WORKING ) // from a US unit single 32Mbyte bank!
// There was also a 34-in-1 version of the Data East Classics in a mini-cabinet, NOT running on VT hardware, but using proper arcade ROMs, that one is reportedly running an old MAME build on an ARM SoC (although some sources say FBA)
+// many of the games don't work or have scrambled graphics, it writes 0xc0 to vtfp_411e_encryption_state_w in such cases
+CONS( 201?, myaass, 0, 0, nes_vt32_32mb, nes_vt32, nes_vt32_unk_state, empty_init, "dreamGEAR", "My Arcade All Star Stadium - Pocket Player (307-in-1)", MACHINE_NOT_WORKING )
+
CONS( 2021, matet300, 0, 0, nes_vt32_32mb, nes_vt32, nes_vt32_unk_state, empty_init, "dreamGEAR", "My Arcade Tetris (DGUNL-7029, Go Gamer, with 300 bonus games)", MACHINE_NOT_WORKING )
+// some games (eg F22) are scrambled like in myaass
+CONS( 2021, matet220, 0, 0, nes_vt32_32mb, nes_vt32, nes_vt32_unk_state, empty_init, "dreamGEAR", "My Arcade Tetris (DGUNL-7030, Gamer V, with 220 bonus games)", MACHINE_NOT_WORKING )
+
// Use DIP switch to select console or cartridge, as cartridge is fake and just toggles a GPIO
CONS( 2016, fcpocket, 0, 0, nes_vt32_4x16mb, nes_vt32_fp, nes_vt32_unk_state, empty_init, "", "FC Pocket 600 in 1", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // has external banking (2x 32mbyte banks)
diff --git a/src/mame/nintendo/nes_vt32_soc.cpp b/src/mame/nintendo/nes_vt32_soc.cpp
index 5bcab4b1c0b..e76effb2b7f 100644
--- a/src/mame/nintendo/nes_vt32_soc.cpp
+++ b/src/mame/nintendo/nes_vt32_soc.cpp
@@ -46,13 +46,39 @@ uint8_t nes_vt32_soc_device::vtfp_4119_r()
return 0x00;
}
-void nes_vt32_soc_device::vtfp_411e_w(uint8_t data)
+void nes_vt32_soc_device::vtfp_411e_encryption_state_w(uint8_t data)
{
- logerror("411e_w %02x\n", data);
+ logerror("%s: vtfp_411e_encryption_state_w %02x\n", machine().describe_context(), data);
if (data == 0x05)
- downcast(*m_maincpu).set_next_scramble(true);
+ {
+ downcast(*m_maincpu).set_next_scramble(true);
+ }
else if (data == 0x00)
- downcast(*m_maincpu).set_next_scramble(false);
+ {
+ downcast(*m_maincpu).set_next_scramble(false);
+ }
+ else if (data == 0xc0)
+ {
+ /* this seems to turn off the code encryption
+ but turns on some kind of PPU data bitswap? myaass uses it on several games
+
+ in VRAM -> should be in VRAM
+ 80 -> 08
+ 40 -> 20
+ 20- > 40
+ 10 -> 01
+ 08 -> 80
+ 04 -> 02
+ 02 -> 04
+ 01 -> 10
+
+ it is unclear if this affects reads from ROM, or directly alters reads or
+ writes involving the VRAM
+
+ */
+
+ downcast(*m_maincpu).set_next_scramble(false);
+ }
}
void nes_vt32_soc_device::vtfp_4a00_w(uint8_t data)
@@ -103,7 +129,7 @@ void nes_vt32_soc_device::nes_vt_fp_map(address_map &map)
map(0x411d, 0x411d).w(FUNC(nes_vt32_soc_device::vtfp_411d_w));
map(0x4119, 0x4119).r(FUNC(nes_vt32_soc_device::vtfp_4119_r));
- map(0x411e, 0x411e).w(FUNC(nes_vt32_soc_device::vtfp_411e_w)); // encryption toggle
+ map(0x411e, 0x411e).w(FUNC(nes_vt32_soc_device::vtfp_411e_encryption_state_w)); // encryption toggle
map(0x412c, 0x412c).w(FUNC(nes_vt32_soc_device::vtfp_412c_extbank_w)); // GPIO
map(0x412d, 0x412d).r(FUNC(nes_vt32_soc_device::vtfp_412d_r)); // GPIO
diff --git a/src/mame/nintendo/nes_vt32_soc.h b/src/mame/nintendo/nes_vt32_soc.h
index e2180767521..18bf25b272c 100644
--- a/src/mame/nintendo/nes_vt32_soc.h
+++ b/src/mame/nintendo/nes_vt32_soc.h
@@ -30,7 +30,7 @@ protected:
void nes_vt_fp_map(address_map &map) ATTR_COLD;
uint8_t vtfp_4119_r();
- void vtfp_411e_w(uint8_t data);
+ void vtfp_411e_encryption_state_w(uint8_t data);
void vtfp_412c_extbank_w(uint8_t data);
uint8_t vtfp_412d_r();
void vtfp_4242_w(uint8_t data);
diff --git a/src/mame/nintendo/nes_vt369_vtunknown.cpp b/src/mame/nintendo/nes_vt369_vtunknown.cpp
index 5405f6217bf..265ef113607 100644
--- a/src/mame/nintendo/nes_vt369_vtunknown.cpp
+++ b/src/mame/nintendo/nes_vt369_vtunknown.cpp
@@ -938,6 +938,12 @@ ROM_START( matet10 )
ROM_IGNORE(0x300)
ROM_END
+ROM_START( matet100 )
+ ROM_REGION( 0x2000000, "mainrom", 0 )
+ ROM_LOAD( "picotetris_s29gl064n90tfi04_0001227e.bin", 0x00000, 0x800000, CRC(7d9296f2) SHA1(0db5883028d14783d0abff1f7672e59534b0e513) )
+ ROM_IGNORE(0x100)
+ROM_END
+
void nes_vt369_vtunknown_state::init_lxcmcypp()
{
int size = memregion("mainrom")->bytes()/2;
@@ -1129,3 +1135,6 @@ CONS( 2021, unk128vt, 0, 0, nes_vt369_vtunknown_unk_4mb, nes_vt369_vtu
// uses a low res display like the above
CONS( 2021, matet10, 0, 0, nes_vt369_vtunknown_unk_2mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "dreamGEAR", "My Arcade Tetris (DGUNL-7083, Pixel Pocket, with 10 bonus games)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
+
+// unknown tech level, scrambled opcodes
+CONS( 2021, matet100, 0, 0, nes_vt369_vtunknown_hh_8mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "dreamGEAR", "My Arcade Tetris (DGUNL-7027, Pico Player, with 100+ bonus games)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // box says 100+ bonus games
diff --git a/src/mame/sega/megadriv_rad.cpp b/src/mame/sega/megadriv_rad.cpp
index 5f3990726d5..493b04c5a27 100644
--- a/src/mame/sega/megadriv_rad.cpp
+++ b/src/mame/sega/megadriv_rad.cpp
@@ -36,21 +36,21 @@ public:
{ }
protected:
- uint16_t read(offs_t offset);
+ virtual uint16_t read(offs_t offset);
uint16_t read_a13(offs_t offset);
- void megadriv_radica_map(address_map &map) ATTR_COLD;
+ virtual void megadriv_radica_map(address_map &map) ATTR_COLD;
void radica_base_map(address_map &map) ATTR_COLD;
int m_bank;
int m_romsize;
-private:
required_region_ptr m_rom;
};
+
class megadriv_radica_state : public megadriv_radica_state_base
{
public:
@@ -69,6 +69,28 @@ protected:
virtual void machine_reset() override ATTR_COLD;
};
+class megadriv_b010xx_select_state : public megadriv_radica_state
+{
+public:
+ megadriv_b010xx_select_state(const machine_config& mconfig, device_type type, const char* tag) :
+ megadriv_radica_state(mconfig, type, tag)
+ { }
+ void init_atgame40();
+
+private:
+ virtual void machine_reset() override ATTR_COLD;
+
+ virtual uint16_t read(offs_t offset) override;
+
+ virtual void megadriv_radica_map(address_map &map) override ATTR_COLD;
+
+ void bank_high_w(offs_t offset, uint16_t data, uint16_t mem_mask);
+ void bank_low_w(offs_t offset, uint16_t data, uint16_t mem_mask);
+ void bank_upper_w(offs_t offset, uint16_t data, uint16_t mem_mask);
+
+ void b01036_w(offs_t offset, uint16_t data, uint16_t mem_mask);
+};
+
class megadriv_dgunl_state : public megadriv_radica_state
{
@@ -91,7 +113,7 @@ private:
uint16_t read_a16302(offs_t offset, uint16_t mem_mask);
virtual void write_a1630a(offs_t offset, uint16_t data, uint16_t mem_mask);
- void megadriv_dgunl_map(address_map &map) ATTR_COLD;
+ virtual void megadriv_radica_map(address_map &map) override ATTR_COLD;
};
@@ -333,8 +355,55 @@ void megadriv_ra145_state::write_a1630a(offs_t offset, uint16_t data, uint16_t m
m_bank = m_bank / 0x10000;
}
+uint16_t megadriv_b010xx_select_state::read(offs_t offset)
+{
+ return m_rom[((m_bank >> 1) + offset) & (m_romsize - 1)];
+}
-void megadriv_dgunl_state::megadriv_dgunl_map(address_map &map)
+void megadriv_b010xx_select_state::bank_high_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ data &= 0x7f;
+ mem_mask &= 0x7f;
+
+ m_bank = (m_bank & 0xff80ffff) | (data & mem_mask) << 16;
+ logerror("%s: bank_high_w bank is now %08x\n", machine().describe_context(), m_bank);
+}
+
+void megadriv_b010xx_select_state::bank_low_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ m_bank = (m_bank & 0xffff0000) | (data & mem_mask);
+ logerror("%s: bank_low_w bank is now %08x\n", machine().describe_context(), m_bank);
+}
+
+void megadriv_b010xx_select_state::bank_upper_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ // this is handled differently to the other writes, probably some external logic
+ // rather than the same banking
+ // written before bank_high and bank_low
+ m_bank |= 0x800000;
+ logerror("%s: bank_upper_w (%04x %04x) bank is now %08x\n", machine().describe_context(), data, mem_mask, m_bank);
+}
+
+void megadriv_b010xx_select_state::b01036_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ // all games in atgame40 that fail to display anything write 0x0001 here
+ // could be coincidence, but could also be enabling the alt display mode?
+ logerror("%s: b01036_w %04x %04x (for games with no display?)\n", machine().describe_context(), data, mem_mask);
+}
+
+void megadriv_b010xx_select_state::megadriv_radica_map(address_map &map)
+{
+ radica_base_map(map);
+
+ map(0xa10104, 0xa10105).w(FUNC(megadriv_b010xx_select_state::bank_upper_w)); // read and written
+
+ map(0xb01028, 0xb01029).w(FUNC(megadriv_b010xx_select_state::bank_low_w));
+ map(0xb0102a, 0xb0102b).w(FUNC(megadriv_b010xx_select_state::bank_high_w));
+
+ map(0xb01036, 0xb01037).w(FUNC(megadriv_b010xx_select_state::b01036_w));
+}
+
+void megadriv_dgunl_state::megadriv_radica_map(address_map &map)
{
radica_base_map(map);
@@ -458,6 +527,11 @@ void megadriv_radica_state::machine_reset()
megadriv_radica_state_base::machine_reset();
}
+void megadriv_b010xx_select_state::machine_reset()
+{
+ m_bank = 0;
+ megadriv_radica_state_base::machine_reset();
+}
void megadriv_radica_state::megadriv_radica_3button_ntsc(machine_config &config)
{
@@ -502,7 +576,7 @@ void megadriv_dgunl_state::megadriv_dgunl_ntsc(machine_config &config)
ctrl1_3button(config);
ctrl2_3button(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &megadriv_dgunl_state::megadriv_dgunl_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &megadriv_dgunl_state::megadriv_radica_map);
}
void megadriv_ra145_state::megadriv_ra145_ntsc(machine_config &config)
@@ -623,13 +697,59 @@ ROM_START( matet )
ROM_IGNORE(0x100)
ROM_END
+/*
+
+As the atgame40 is not running on standard MegaDrive hardware quite a few of these games rely
+on an unsupported video mode (they still play sounds and resond to inputs / do colour fades)
+
+00 Menu located at 00800000 WORKS
+--
+01 Air Hockey located at 0000c800 WORKS
+02 Black Sheep located at 0002935a BOOTS - NO DISPLAY
+03 Bomber located at 000b6f5a WORKS
+04 Bottle Taps Race located at 000d6f5a WORKS
+05 Brain Switch located at 000ec760 BOOTS - NO DISPLAY
+06 Bulls and Cows located at 00800000 BOOTS - NO DISPLAY
+07 Cannon located at 0013e360 WORKS
+08 Checker located at 0016301e WORKS
+09 Chess located at 001aa232 WORKS
+10 Colour Puzzle located at 001f0a32 BOOTS - NO DISPLAY
+11 Cross The Road located at 008a2800 BOOTS - NO DISPLAY
+12 Curling 2010 located at 00953486 BOOTS - NO DISPLAY
+13 Fight or Lose located at 009f002e WORKS
+14 Fire Fly Glow located at 00a09ede BOOTS - NO DISPLAY
+15 Fish Story located at 00aa2ede BOOTS - NO DISPLAY
+16 Flash Memory located at 00285632 BOOTS - NO DISPLAY
+17 Formula Challenge located at 00310232 BOOTS - NO DISPLAY
+18 Hexagons located at 00394a32 WORKS
+19 Jacks Pea located at 003b4a32 BOOTS - NO DISPLAY
+20 Jewel Magic located at 00b4a874 BOOTS - NO DISPLAY
+21 Logic Dial located at 0040b4ac BOOTS - NO DISPLAY
+22 Table Magic located at 00be8f8c BOOTS - NO DISPLAY
+23 Mahjong located at 0049e8ac WORKS
+24 Match Eleven located at 004ae8ac BOOTS - NO DISPLAY
+25 Mega Brain Switch located at 005390ac BOOTS - NO DISPLAY
+26 Memory located at 0058a0ac WORKS
+27 Memory Match located at 00c8538c BOOTS - NO DISPLAY
+28 Mirror Mirror located at 00d2178c BOOTS - NO DISPLAY
+29 Mr Balls located at 0059a0ac WORKS
+30 Navel Power located at 005c0a08 WORKS
+31 Panic Lift located at 00d86f8c BOOTS - NO DISPLAY
+32 Reaction Match located at 00e2038c BOOTS - NO DISPLAY
+33 Snake located at 005dbbd4 WORKS
+34 Space Hunter located at 005ebbd4 BOOTS - NO DISPLAY
+35 Spider located at 006817d4 WORKS
+36 Sudoku Quiz located at 0069efb4 BOOTS - NO DISPLAY
+37 Treasure Hunt located at 00eb9b8c BOOTS - NO DISPLAY
+38 UFO Sighting located at 00f5938c BOOTS - NO DISPLAY
+39 Warehouse Keeper located at 00730fb4 WORKS
+40 Whack a Wolf located at 00740fb4 BOOTS - NO DISPLAY
+*/
ROM_START( atgame40 )
- ROM_REGION( 0x1000000, "rom", 0 )
- ROM_LOAD16_WORD_SWAP( "40bonusgamesin1.bin", 0x000000, 0x1000000, CRC(4eba6e83) SHA1(b8edf1b6ecb70a136b551f1454ba8afa45bd8bc1) )
-
- ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
- ROM_COPY( "rom", 0x800000, 0, 0x400000 )
+ ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "40bonusgamesin1.bin", 0x800000, 0x800000, CRC(4eba6e83) SHA1(b8edf1b6ecb70a136b551f1454ba8afa45bd8bc1) )
+ ROM_CONTINUE(0x000000, 0x800000)
ROM_END
@@ -655,7 +775,11 @@ ROM_START( ra145 )
ROM_LOAD16_WORD_SWAP( "ra145.bin", 0x000000, 0x8000000, BAD_DUMP CRC(30583950) SHA1(855eae232e3830a505f9bc1a26edb3a7d15ce4d1) )
ROM_END
-
+void megadriv_b010xx_select_state::init_atgame40()
+{
+ m_romsize = 0x1000000;
+ init_megadrie();
+}
void megadriv_dgunl_state::init_dgunl3227()
{
@@ -795,14 +919,19 @@ CONS( 2018, msi_sf2, 0, 0, megadriv_radica_6button_ntsc, msi_6button,
CONS( 2018, dgunl3227, 0, 0, megadriv_dgunl_ntsc, dgunl_1player, megadriv_dgunl_state, init_dgunl3227, "dreamGEAR", "My Arcade Pac-Man Pocket Player (DGUNL-3227)", 0 )
CONS( 2018, dgunl3227a, dgunl3227,0, megadriv_dgunl_ntsc, dgunl_1player, megadriv_dgunl_state, init_dgunl3227, "dreamGEAR", "My Arcade Pac-Man Pocket Player (DGUNL-3227, older)", 0 )
-CONS( 2021, matet, 0, 0, megadriv_radica_3button_ntsc, radica_3button, megadriv_radica_state, init_megadriv, "dreamGEAR", "My Arcade Tetris (DGUNL-7028, Pocket Player Pro)", MACHINE_NOT_WORKING)
CONS( 2018, ra145, 0, 0, megadriv_ra145_ntsc, msi_6button, megadriv_ra145_state, init_ra145, "", "Retro Arcade 16 Bits Classic Edition Mini TV Game Console - 145 Classic Games - TV Arcade Plug and Play (Mega Drive bootlegs)", MACHINE_NOT_WORKING )
+
+// Games below have a device at b0102x which appears to either be able to select ROM base on a byte boundary
+// OR maybe are running from RAM instead of ROM (with an auto-copy at the start?) with that being a DMA operation.
+
// Technically this is a MD type cartridge, but it doesn't seem to be designed for use with a standard MD as it contains
// nothing but the 16Mbyte ROM and a 5v to 3.3v converter yet the code clearly requires some extensive banking logic.
// Testing it on a real MD shows nothing, not even the menu.
//
// We don't seem to emulate the system it's designed for, so for now just treat it as its own thing (which may become
// the basis of a driver for that console)
-CONS( 2012, atgame40, 0, 0, megadriv_radica_3button_pal, radica_3button, megadriv_radica_state, init_megadrie, "AtGames", "40 Bonus Games in 1 (AtGames)", MACHINE_NOT_WORKING)
+CONS( 2012, atgame40, 0, 0, megadriv_radica_3button_pal, radica_3button, megadriv_b010xx_select_state, init_atgame40, "AtGames", "40 Bonus Games in 1 (AtGames)", MACHINE_NOT_WORKING)
+
+CONS( 2021, matet, 0, 0, megadriv_radica_3button_ntsc, radica_3button, megadriv_b010xx_select_state, init_megadriv, "dreamGEAR", "My Arcade Tetris (DGUNL-7028, Pocket Player Pro)", MACHINE_NOT_WORKING)
diff --git a/src/mame/tvgames/spg2xx_lexibook.cpp b/src/mame/tvgames/spg2xx_lexibook.cpp
index 22e95d05116..f8cdf5bfafb 100644
--- a/src/mame/tvgames/spg2xx_lexibook.cpp
+++ b/src/mame/tvgames/spg2xx_lexibook.cpp
@@ -343,6 +343,11 @@ ROM_START( lexizeus )
ROM_LOAD16_WORD_SWAP( "lexibook1g900us.bin", 0x0000, 0x800000, CRC(c2370806) SHA1(cbb599c29c09b62b6a9951c724cd9fc496309cf9))
ROM_END
+ROM_START( arcade3d )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "arcade3d.u3", 0x0000, 0x800000, CRC(130843a5) SHA1(f6494a34d162e702121cf71d384a4e57e0113498) )
+ROM_END
+
ROM_START( vsplus )
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "vsplus.bin", 0x0000, 0x1000000, CRC(2b13d2cc) SHA1(accae7606d83a313b8ec0232d2d67b63c9c617af) )
@@ -423,6 +428,8 @@ ROM_END
CONS( 200?, lexizeus, 0, 0, lexizeus, lexizeus, spg2xx_lexizeus_game_state, init_zeus, "Lexibook / JungleTac", "Zeus IG900 20-in-1 (US?)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // bad sound and some corrupt bg tilemap entries in Tiger Rescue, verify ROM data (same game runs in Zone 60 without issue)
+CONS( 200?, arcade3d, 0, 0, lexizeus, lexiseal, spg2xx_lexizeus_game_state, init_zeus, "Millennium 2000 GmbH / JungleTac", "Millennium Arcade 3D 15-in-1", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // bad sound and some corrupt bg tilemap entries in Tiger Rescue, verify ROM data (same game runs in Zone 60 without issue)
+
CONS( 200?, vsplus, 0, 0, vsplus, vsplus, spg2xx_vsplus_game_state, init_vsplus, " / JungleTac", "Vs Power Plus 30-in-1", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/tvgames/xavix.cpp b/src/mame/tvgames/xavix.cpp
index 9b36b28177f..ca291e82eff 100644
--- a/src/mame/tvgames/xavix.cpp
+++ b/src/mame/tvgames/xavix.cpp
@@ -42,7 +42,7 @@
Wildest computer robot "Daigander" (Korean version) /TAKARA/Korea - - - - - - -
2001 Ping-pong(Chinese version) /Tenpon/China - - - - - - -
Baseball Korean version /SONOKONG/Korea - - - - - - -
- 1999 ABC Jungle Fun Hippo /VTech/HK, USA, France - - - - - - -
+ 1999 ABC Jungle Fun Hippo VTech/HK (USA and UK versions only, FR is dumped) - - - - - - -
not dumped: no TSOP pads
2003 Beyblade Arcade Challenge 5-in-1 /Hasbro/USA - - - - - - have
@@ -2795,6 +2795,10 @@ ROM_START( tak_beyb )
ROM_LOAD( "beyblade.u2", 0x000000, 0x200000, CRC(bcf6b3a7) SHA1(1c80f1241138b9d7816f1e5285ff8f3c61739c95) )
ROM_END
+ROM_START( hippofr )
+ ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00 )
+ ROM_LOAD( "54-6447-010.u3", 0x000000, 0x200000, CRC(1fb15364) SHA1(ff2bb54f7d6ccd3c83e722599c6f2b213bf35df8) )
+ROM_END
/* XaviX hardware titles (1st Generation)
@@ -2808,6 +2812,13 @@ ROM_END
*/
+// product code 80-32705.
+// Some sites say 1997, but 1999 is what SSD had listed, and seems more fitting.
+// Also exists as
+// 80-32703 Hippo's Alphabet Adventure (UK)
+// 80-32700 ABC Jungle Fun (US?)
+CONS( 1999, hippofr, 0, 0, xavix_2mb, xavix,xavix_state, init_xavix, "VTech", "Hippo: et la formidable aventure des lettres (France)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // needs keyboard emulating
+
// Let's!TVプレイCLASSIC タイトーノスタルジア1
CONS( 2006, taitons1, 0, 0, xavix_i2c_24lc04_2mb, nostalgia,xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 1 (Japan)", MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/tvgames/xavix_2002.cpp b/src/mame/tvgames/xavix_2002.cpp
index b0983129dd4..2d18a12f554 100644
--- a/src/mame/tvgames/xavix_2002.cpp
+++ b/src/mame/tvgames/xavix_2002.cpp
@@ -192,6 +192,17 @@ static INPUT_PORTS_START( xavix_i2c )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("i2cmem", FUNC(i2cmem_device::read_sda))
INPUT_PORTS_END
+static INPUT_PORTS_START( maxheart )
+ PORT_INCLUDE(xavix_i2c)
+
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_16WAY
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_16WAY
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_16WAY
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_16WAY
+INPUT_PORTS_END
static INPUT_PORTS_START( epo_tfit )
PORT_INCLUDE(xavix)
@@ -912,7 +923,7 @@ CONS( 2004, epo_tfit, 0, 0, superxavix_i2c_24c04_4mb, epo_tfit, superxavix_
CONS( 2010, epo_rgfj, 0, 0, superxavix_i2c_24c08, xavix_i2c, superxavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Ishikawa Ryou Excite Golf (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// Let's!TVプレイ ふたりはプリキュアMaxHeart マットでダンス MaxHeartにおどっちゃおう
-CONS( 2004, maxheart, 0, 0, superxavix_i2c_24c04_4mb, xavix_i2c, superxavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Futari wa PreCure MaxHeart Mat de Dance MaxHeart ni Odotchaou (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+CONS( 2004, maxheart, 0, 0, superxavix_i2c_24c04_4mb, maxheart, superxavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Futari wa PreCure MaxHeart Mat de Dance MaxHeart ni Odotchaou (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
// どこでもドラえもん 日本旅行ゲームDX体感!どこドラグランプリ!
CONS( 2004, epo_doka, 0, 0, xavix2002_4mb, xavix, superxavix_state, init_epo_doka, "Epoch / SSD Company LTD", "Doko Demo Doraemon Nihon Ryokou Game DX Taikan! Doko Dora Grand Prix! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )