From 5c5073fe92214ad4373ea51349797fa9768e8af2 Mon Sep 17 00:00:00 2001
From: mamehaze <140764005+mamehaze@users.noreply.github.com>
Date: Thu, 2 Nov 2023 12:35:43 +0000
Subject: Added various TV games. (#11654) [TeamEurope, ChinnyVision,
wai-3-love, David Haywood]
* tvgames/elan_eu3a05vid.cpp: Hooked up transparent pen register.
* tvgames/trkfldch.cpp: Hooked up additional DMA registers and added an input register for JG7000.
* skeleton/easy_karaoke.cpp: Listed built-in songs.
* ekara_japan_bh.xml: Added another title to the list of undumped cartridges.
New working systems
--------------------
Game Zone II 128-in-1 [TeamEurope, David Haywood]
Joystick88 [TeamEurope, David Haywood]
Motorcycle 30-in-1 [TeamEurope, David Haywood]
My Arcade Plug And Play 220 Game Retro Controller (DGUN-2959) [TeamEurope, ChinnyVision]
Super TV Air Jet 6-in-1 (Lexibook Junior) [TeamEurope, David Haywood]
Wireless Boxing (PAL, Play Vision) [TeamEurope, David Haywood]
New systems marked not working
------------------
Zone Family Fit [TeamEurope, David Haywood]
Dance Dance Revolution - Broadwalk Arcade [wai-3-love]
Kidizoom (Germany, blue camera) [TeamEurope]
Kidizoom Connect (Germany, pink camera) [TeamEurope]
Sudoku TV Game (PAL, 2 players) [TeamEurope, David Haywood]
TV Sports Plug & Play 5-in-1 (JG7000) [TeamEurope, David Haywood]
Virtual Football (with 3 bonus games) [TeamEurope, David Haywood]
New working software items
-------------
nes_vt_cart.xml
5 Bonus Games [TeamEurope, David Haywood]
New software items marked not working
-----------
easy_karaoke_cart.xml
Golden Greats Vol.1 [TeamEurope, David Haywood]
Golden Greats Vol.2 [TeamEurope, David Haywood]
Mega Hits Vol.1 [TeamEurope, David Haywood]
Mega Hits Vol.3 [TeamEurope, David Haywood]
---
hash/easy_karaoke_cart.xml | 143 ++++++++++++++++++++-
hash/ekara_japan_bh.xml | 1 +
hash/nes_vt_cart.xml | 12 ++
src/mame/mame.lst | 25 +++-
src/mame/nintendo/nes_vt02_vt03.cpp | 82 +++++++++++-
src/mame/nintendo/nes_vt09.cpp | 7 +
src/mame/skeleton/easy_karaoke.cpp | 18 +++
src/mame/tvgames/elan_ep3a19a.cpp | 1 -
src/mame/tvgames/elan_eu3a05.cpp | 35 +++++
src/mame/tvgames/elan_eu3a05vid.cpp | 29 ++---
src/mame/tvgames/elan_eu3a05vid.h | 6 +-
.../tvgames/generalplus_gpl16250_spi_direct.cpp | 22 ++++
src/mame/tvgames/generalplus_gpl32612.cpp | 17 +++
src/mame/tvgames/spg29x.cpp | 57 +++++++-
src/mame/tvgames/spg2xx.cpp | 7 +
src/mame/tvgames/trkfldch.cpp | 140 ++++++++++++++++++--
16 files changed, 560 insertions(+), 42 deletions(-)
diff --git a/hash/easy_karaoke_cart.xml b/hash/easy_karaoke_cart.xml
index 6f3118bee8a..66444c631f2 100644
--- a/hash/easy_karaoke_cart.xml
+++ b/hash/easy_karaoke_cart.xml
@@ -4,14 +4,77 @@
license:CC0-1.0
-->
+
+
+ Golden Greats Vol.1
+ 2004
+ IVL Technologies
+
+
+
+
+
+
+
+
+
+
+
+
+ Golden Greats Vol.2
+ 2004
+ IVL Technologies
+
+
+
+
+
+
+
+
+
+
Golden Greats Vol.3
2004
IVL Technologies
-
+
@@ -19,13 +82,25 @@ license:CC0-1.0
+
Golden Greats Vol.4
2004
IVL Technologies
-
+
@@ -33,6 +108,44 @@ license:CC0-1.0
+
+
+ Mega Hits Vol.1
+ 2004
+ IVL Technologies
+
+
+
+
+
+
+
+
+
+
+
Mega Hits Vol.2
2004
@@ -47,4 +160,30 @@ license:CC0-1.0
+
+
+ Mega Hits Vol.3
+ 2004
+ IVL Technologies
+
+
+
+
+
+
+
+
+
+
diff --git a/hash/ekara_japan_bh.xml b/hash/ekara_japan_bh.xml
index 3e36a542d02..c92b7abb797 100644
--- a/hash/ekara_japan_bh.xml
+++ b/hash/ekara_japan_bh.xml
@@ -21,6 +21,7 @@ license:CC0-1.0
BH-04 (unknown)
*BH-05 Best Hit Collection)
*BH-06 Best Hit Collection
+ BH-07 Best Hit Collection
(more? what's the BH highest number?)
diff --git a/hash/nes_vt_cart.xml b/hash/nes_vt_cart.xml
index c84a36a019b..2efbd2a4cb7 100644
--- a/hash/nes_vt_cart.xml
+++ b/hash/nes_vt_cart.xml
@@ -18,4 +18,16 @@ license:CC0-1.0
+
+
+ 5 Bonus Games
+ 200?
+ <unknown>
+
+
+
+
+
+
+
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 97433b93937..b165a33e53b 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -34094,6 +34094,7 @@ vsmaxx15
dgun806
@source:nintendo/nes_vt02_vt03.cpp
+88in1joy
ablmini
ablpinb
ablping
@@ -34103,8 +34104,10 @@ ddrdismx
ddrstraw
dgun2500
dgun2869
+dgun2959
dgun851
dgun853
+gamezn2
gprnrs1
gprnrs16
joysti30
@@ -34142,6 +34145,7 @@ senwld
silv35
solargm
sporzbx
+sporzbxa
sporzpp
sporztn
sudo6in1
@@ -34151,6 +34155,7 @@ timetp36
timetp7
vdogdeme
vdogdemo
+vfootbal
vsmax25v
vsmaxx17
vsmaxx77
@@ -34185,6 +34190,7 @@ vgtablet
vgpmini
vgpocket
vsmaxtx2
+wfmotor
@source:nintendo/nes_vt32.cpp
dgun2573
@@ -44474,15 +44480,16 @@ tvbg6a
tvbg6b
@source:tvgames/elan_eu3a05.cpp
-rad_sinv
-rad_tetr
airblsjs
buzztime
-sudelan3
-sudelan
carlecfg
pvmilfin
pvwwcas
+rad_sinv
+rad_tetr
+sudelan
+sudelan3
+sudoku2p
@source:tvgames/elan_eu3a14.cpp
rad_gtg
@@ -44554,6 +44561,7 @@ bfmpac
bfpacman
bfspyhnt
bftetris
+siddr
wiwcs
@source:tvgames/generalplus_gpl162xx_lcdtype.cpp
@@ -44567,6 +44575,8 @@ jak_tmnthp
jak_dchp
jak_ddhp
jak_prhp
+kidizmb
+kidizmp
zippity
zippityuk
@@ -44604,6 +44614,7 @@ hyprscan //
jak_bbh
jak_bbsf
zone3d
+zonefamf
@source:tvgames/spg29x_lexibook_jg7425.cpp
lx_jg7425
@@ -44629,6 +44640,7 @@ itvphone
jjstrip
jouet
knd
+lxairjet
lxspidaj
mattelcs //
ordentv
@@ -44820,10 +44832,11 @@ megadri4
megadri4a
@source:tvgames/trkfldch.cpp
-trkfldch // (c) 2007 Konami
-my1stddr // (c) 2006 Konami
abl4play
+lexitvsprt
+my1stddr // (c) 2006 Konami
shtscore
+trkfldch // (c) 2007 Konami
@source:tvgames/tvgame.cpp
tvgame // 2011
diff --git a/src/mame/nintendo/nes_vt02_vt03.cpp b/src/mame/nintendo/nes_vt02_vt03.cpp
index 795ad437ba4..d2538b842d7 100644
--- a/src/mame/nintendo/nes_vt02_vt03.cpp
+++ b/src/mame/nintendo/nes_vt02_vt03.cpp
@@ -79,6 +79,7 @@ public:
void nes_vt_pal_2mb(machine_config& config);
void nes_vt_pal_4mb(machine_config& config);
void nes_vt_pal_8mb(machine_config& config);
+ void nes_vt_pal_16mb(machine_config& config);
void nes_vt_512kb(machine_config& config);
void nes_vt_1mb(machine_config& config);
@@ -101,6 +102,7 @@ public:
void vt_external_space_map_1mbyte_majkon(address_map& map);
void init_protpp();
+ void init_gamezn2();
protected:
required_device m_soc;
@@ -167,6 +169,7 @@ public:
{ }
void nes_vt_waixing_alt_4mb_sporzpp(machine_config& config);
+ void nes_vt_pal_4mb_sporzbxa(machine_config& config);
private:
uint8_t in1_r() override
@@ -230,6 +233,7 @@ public:
{ }
void nes_vt_2mb_ablping(machine_config& config);
+ void nes_vt_2mb_vfootbal(machine_config& config);
private:
uint8_t ablping_extraio_r();
@@ -571,6 +575,14 @@ void nes_vt_state::nes_vt_pal_8mb(machine_config& config)
m_soc->set_addrmap(AS_PROGRAM, &nes_vt_state::vt_external_space_map_8mbyte);
}
+void nes_vt_state::nes_vt_pal_16mb(machine_config& config)
+{
+ NES_VT02_VT03_SOC_PAL(config, m_soc, PAL_APU_CLOCK);
+ configure_soc(m_soc);
+ m_soc->set_addrmap(AS_PROGRAM, &nes_vt_state::vt_external_space_map_16mbyte);
+}
+
+
void nes_vt_waixing_state::nes_vt_waixing_512kb(machine_config &config)
{
NES_VT02_VT03_SOC(config, m_soc, NTSC_APU_CLOCK);
@@ -622,6 +634,12 @@ void nes_vt_waixing_alt_sporzpp_state::nes_vt_waixing_alt_4mb_sporzpp(machine_co
m_soc->set_8000_scramble(0x5, 0x4, 0x3, 0x2, 0x7, 0x6, 0x7, 0x8);
}
+void nes_vt_waixing_alt_sporzpp_state::nes_vt_pal_4mb_sporzbxa(machine_config& config)
+{
+ NES_VT02_VT03_SOC_PAL(config, m_soc, PAL_APU_CLOCK);
+ configure_soc(m_soc);
+ m_soc->set_addrmap(AS_PROGRAM, &nes_vt_state::vt_external_space_map_4mbyte);
+}
void nes_vt_hum_state::nes_vt_hummer_2mb(machine_config& config)
{
@@ -673,6 +691,18 @@ void nes_vt_ablping_state::nes_vt_2mb_ablping(machine_config &config)
m_soc->extra_write_3_callback().set(FUNC(nes_vt_ablping_state::ablping_extraio_w));
}
+void nes_vt_ablping_state::nes_vt_2mb_vfootbal(machine_config &config)
+{
+ NES_VT02_VT03_SOC_PAL(config, m_soc, PAL_APU_CLOCK);
+ configure_soc(m_soc);
+ m_soc->set_addrmap(AS_PROGRAM, &nes_vt_ablping_state::vt_external_space_map_2mbyte);
+
+ m_soc->extra_read_2_callback().set(FUNC(nes_vt_ablping_state::ablping_extraio_r));
+ m_soc->extra_read_3_callback().set(FUNC(nes_vt_ablping_state::ablping_extraio_r));
+ m_soc->extra_write_2_callback().set(FUNC(nes_vt_ablping_state::ablping_extraio_w));
+ m_soc->extra_write_3_callback().set(FUNC(nes_vt_ablping_state::ablping_extraio_w));
+}
+
uint8_t nes_vt_base_state::upper_412c_r()
{
logerror("%s: upper_412c_r\n", machine().describe_context());
@@ -1072,6 +1102,11 @@ ROM_START( sporzbx )
ROM_LOAD( "sporzboxing.bin", 0x00000, 0x400000, CRC(8b832c0b) SHA1(8193955a81e894a01308a80d5153f2ecfe134da6) )
ROM_END
+ROM_START( sporzbxa )
+ ROM_REGION( 0x400000, "mainrom", 0 )
+ ROM_LOAD( "wlboxing.bin", 0x00000, 0x400000, CRC(5df7beb9) SHA1(dadcec310e4a7b3ca061c6fe6be319cda2445b24) )
+ROM_END
+
ROM_START( sporztn )
ROM_REGION( 0x400000, "mainrom", 0 )
ROM_LOAD( "wirelesstennis.bin", 0x00000, 0x400000, CRC(e60f5ee1) SHA1(838ba7f4e9dcd0101eaaef5be883206d8856f45c) )
@@ -1271,6 +1306,11 @@ ROM_START( protpp )
ROM_LOAD( "vpingpong_s29al008d70tfi02_0001225b.bin", 0x00000, 0x100000, CRC(8cf46272) SHA1(298a6341d26712ec1f282e7514e995a7af5ac012) )
ROM_END
+ROM_START( vfootbal )
+ ROM_REGION( 0x200000, "mainrom", 0 )
+ ROM_LOAD( "vfootball.u3", 0x00000, 0x200000, CRC(3b586f64) SHA1(92ee41ccfad32f7629bd43503cfb15e9624283ce) )
+ROM_END
+
ROM_START( zdog )
ROM_REGION( 0x400000, "mainrom", 0 )
ROM_LOAD( "zdog.bin", 0x00000, 0x400000, CRC(5ed3485b) SHA1(5ab0e9370d4ed1535205deb0456878c4e400dd81) )
@@ -1293,6 +1333,21 @@ ROM_START( dgun2869 )
ROM_IGNORE(0x100)
ROM_END
+ROM_START( dgun2959 )
+ ROM_REGION( 0x2000000, "mainrom", 0 )
+ ROM_LOAD( "dgun2959.bin", 0x00000, 0x1000000, CRC(6e9b2f45) SHA1(abac2c1783e99b02f9c44f714d5184aea86661ae) )
+ROM_END
+
+ROM_START( 88in1joy )
+ ROM_REGION( 0x400000, "mainrom", 0 )
+ ROM_LOAD( "88in1joystick.bin", 0x00000, 0x400000, CRC(86b8d819) SHA1(6da387b2e6ce02a3ec203e2af8a961959ba1cf62) )
+ROM_END
+
+ROM_START( gamezn2 )
+ ROM_REGION( 0x400000, "mainrom", 0 )
+ ROM_LOAD16_WORD_SWAP( "gamezone2.bin", 0x00000, 0x400000, CRC(f7b2d609) SHA1(7d2d8f6e822c4e6b97e9accaa524b7910c6b97bf) ) // byteswapped as protection?
+ROM_END
+
void nes_vt_state::init_protpp()
@@ -1312,6 +1367,22 @@ void nes_vt_state::init_protpp()
}
}
+void nes_vt_state::init_gamezn2()
+{
+ u8 *src = memregion("mainrom")->base();
+ int len = memregion("mainrom")->bytes();
+
+ std::vector buffer(len);
+ {
+ for (int i = 0; i < len; i++)
+ {
+ buffer[i] = bitswap<8>(src[i],7,6,5,4,3,2,0,1); // bottom 2 bits are swapped?
+ }
+
+ std::copy(buffer.begin(), buffer.end(), &src[0]);
+ }
+}
+
} // anonymous namespace
@@ -1341,7 +1412,8 @@ CONS( 2005, ablpinb, 0, 0, nes_vt_pal_2mb, ablpinb, nes_vt_ablpinb_state, e
// need to map 2 player controls for Ping Pong, 'Eat-Bean' (the PacMan hack) gets stuck during intermission? (same happens on hardware?)
CONS( 2004, sporzpp, 0, 0, nes_vt_waixing_alt_4mb_sporzpp, sporzpp, nes_vt_waixing_alt_sporzpp_state, empty_init, "Macro Winners", "Game Sporz Wireless Duet Play Ping-Pong", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// has some longer than expected delays when sounds should play on the Boxing part, but NES hacks are all functional
-CONS( 2004, sporzbx, 0, 0, nes_vt_waixing_alt_4mb_sporzpp, sporzpp, nes_vt_waixing_alt_sporzpp_state, empty_init, "Macro Winners", "Game Sporz Wireless Boxing", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2004, sporzbx, 0, 0, nes_vt_waixing_alt_4mb_sporzpp, sporzpp, nes_vt_waixing_alt_sporzpp_state, empty_init, "Macro Winners", "Game Sporz Wireless Boxing", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2004, sporzbxa, sporzbx, 0, nes_vt_pal_4mb_sporzbxa, sporzpp, nes_vt_waixing_alt_sporzpp_state, empty_init, "Macro Winners (Play Vision license)", "Wireless Boxing (PAL, Play Vision)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// has some longer than expected delays when sounds should play on the Tennis part, but NES hacks are all functional, US version is sold in DreamGear branded box.
CONS( 2004, sporztn, 0, 0, nes_vt_pal_4mb, sporzpp, nes_vt_wldsoctv_state, empty_init, "Macro Winners (Play Vision license)", "Wireless Tennis (PAL, Play Vision)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// missing PCM audio, but regular APU SFX work
@@ -1392,6 +1464,8 @@ CONS( 2004, vsmaxxvd, 0, 0, nes_vt_vh2009_8mb, nes_vt, nes_vt_swap_op_
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
+// mostly bootleg NES games, but also has Frogger, Scramble and Asteroids in it
+CONS( 200?, gamezn2, 0, 0, nes_vt_4mb, nes_vt, nes_vt_state, init_gamezn2, "", "Game Zone II 128-in-1", MACHINE_IMPERFECT_GRAPHICS ) // was this PAL? (lots of raster splits are broken at the moment either way)
// 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 )
@@ -1410,6 +1484,8 @@ CONS( 200?, mc_sp69, 0, 0, nes_vt_4mb_sp69, nes_vt, nes_vt_sp69_state, em
// PCB has PP1100-MB 061110 on it, possible date YYMMDD code? (pinball is 050329, guitar fever is 070516, air blaster 050423, kickboxing 061011 etc.)
CONS( 2006, ablping, 0, 0, nes_vt_2mb_ablping, nes_vt, nes_vt_ablping_state, empty_init, "Advance Bright Ltd", "Ping Pong / Table Tennis / Super Ping Pong (PP1100, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 200?, vfootbal, 0, 0, nes_vt_2mb_vfootbal,nes_vt, nes_vt_ablping_state, empty_init, "", "Virtual Football (with 3 bonus games)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+
// Hummer systems, scrambled bank register
CONS( 200?, mc_sam60, 0, 0, nes_vt_hummer_2mb, nes_vt, nes_vt_hum_state, empty_init, "Hummer Technology Co., Ltd.", "Samuri (60 in 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
CONS( 200?, zdog, 0, 0, nes_vt_hummer_4mb, nes_vt, nes_vt_hum_state, empty_init, "Hummer Technology Co., Ltd.", "ZDog (44 in 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
@@ -1462,6 +1538,9 @@ CONS( 201?, mc_89in1, 0, 0, nes_vt_4mb, nes_vt, nes_vt_state, empty
// Works fine, uses ony VT02 features
CONS( 201?, mc_tv200, 0, 0, nes_vt_8mb, nes_vt, nes_vt_state, empty_init, "Thumbs Up", "200 in 1 Retro TV Game", MACHINE_IMPERFECT_GRAPHICS )
+// TODO: add cart port and hook up nes_vt_cart.xml
+CONS( 201?, 88in1joy, 0, 0, nes_vt_4mb, nes_vt, nes_vt_state, empty_init, "Play Vision", "Joystick88", MACHINE_IMPERFECT_GRAPHICS )
+
// Runs fine, non-sport 121 in 1 games perfect, but minor graphical issues in
// sport games, also no sound in menu or sport games due to missing PCM
@@ -1476,3 +1555,4 @@ CONS( 201?, ppgc200g, 0, 0, nes_vt_pal_8mb, nes_vt, nes_vt_state, emp
// unknown tech level, it's most likely a vt09 or vt369 but isn't using any of the extended features
CONS( 201?, dgun2869, 0, 0, nes_vt_16mb, nes_vt, nes_vt_state, empty_init, "dreamGEAR", "My Arcade Retro Micro Controller - 220 Built-In Video Games (DGUN-2869)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 201?, dgun2959, 0, 0, nes_vt_pal_16mb, nes_vt, nes_vt_state, empty_init, "dreamGEAR", "My Arcade Plug And Play 220 Game Retro Controller (DGUN-2959)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/nintendo/nes_vt09.cpp b/src/mame/nintendo/nes_vt09.cpp
index 6b836952619..9c2f81baaee 100644
--- a/src/mame/nintendo/nes_vt09.cpp
+++ b/src/mame/nintendo/nes_vt09.cpp
@@ -537,6 +537,12 @@ ROM_START( timetp25 )
ROM_FILL(0x1fce36, 0x01, 0x04 | 0x40) // the code doesn't set the 'alt 4bpp' mode bit, but needs it? why? it isn't hardcoded as the system takes cartridges which don't want it
ROM_END
+ROM_START( wfmotor )
+ ROM_REGION( 0x400000, "mainrom", 0 )
+ ROM_LOAD( "motorcycle.bin", 0x00000, 0x400000, CRC(978f12f0) SHA1(a0230cfe4398d3971d487ff5d4b7107341799424) )
+ROM_END
+
+
} // anonymous namespace
@@ -572,6 +578,7 @@ CONS( 200?, rcapnp, 0, 0, nes_vt09_2mb, nes_vt09, nes_vt09_state, empty_ini
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, " / 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( 200?, wfmotor, 0, 0, nes_vt09_4mb, nes_vt09, nes_vt09_state, empty_init, "WinFun / JungleTac", "Motorcycle 30-in-1", 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/skeleton/easy_karaoke.cpp b/src/mame/skeleton/easy_karaoke.cpp
index 4de9ec7e977..96a20dc7326 100644
--- a/src/mame/skeleton/easy_karaoke.cpp
+++ b/src/mame/skeleton/easy_karaoke.cpp
@@ -173,6 +173,24 @@ void easy_karaoke_state::easy_karaoke(machine_config &config)
SOFTWARE_LIST(config, "cart_list").set_original("easy_karaoke_cart");
}
+/*
+The 'easykara' set has the following songs built in.
+
+One Step Closer S Club Juniors
+S Club Party S Club 7
+Automatic High S Club Juniors
+Don't Stop Movin' S Club 7
+Get the Party Started Pink
+Feel Robbie Williams
+Complicated Avril Lavigne
+One love Blue
+If you're not the one Daniel Bedingfield
+Sound of the Underground Girls Aloud
+
+There are regional variants of the product sold under different names, for example
+there appears to be a French Lexibook unit based on this tech with different songs.
+
+*/
ROM_START( easykara )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "ics0303-b.bin", 0x000000, 0x400000, CRC(43d86ae8) SHA1(219dcbf72b92d1b7e00f78f237194ab47dc08f1b) )
diff --git a/src/mame/tvgames/elan_ep3a19a.cpp b/src/mame/tvgames/elan_ep3a19a.cpp
index 2046e3540cb..0337f0d0dbe 100644
--- a/src/mame/tvgames/elan_ep3a19a.cpp
+++ b/src/mame/tvgames/elan_ep3a19a.cpp
@@ -282,7 +282,6 @@ void elan_ep3a19a_state::elan_ep3a19a(machine_config &config)
m_vid->set_entries(256);
m_vid->set_is_pvmilfin();
m_vid->set_use_spritepages();
- m_vid->set_force_transpen_ff();
m_vid->set_force_basic_scroll();
/* sound hardware */
diff --git a/src/mame/tvgames/elan_eu3a05.cpp b/src/mame/tvgames/elan_eu3a05.cpp
index e7ce4996745..ff0ee2d9311 100644
--- a/src/mame/tvgames/elan_eu3a05.cpp
+++ b/src/mame/tvgames/elan_eu3a05.cpp
@@ -615,6 +615,31 @@ static INPUT_PORTS_START( sudoku )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( sudoku2p )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+
+ PORT_START("IN2")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
static INPUT_PORTS_START( carlecfg )
PORT_START("IN0")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
@@ -913,6 +938,14 @@ ROM_START( sudelan )
ROM_RELOAD(0x200000,0x200000)
ROM_END
+ROM_START( sudoku2p )
+ ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "1596.bin", 0x00000, 0x100000, CRC(fe8ce5bc) SHA1(8fb1463c6d349e07f6483da2b6cce10a4f25fcec) )
+ ROM_RELOAD(0x100000,0x100000)
+ ROM_RELOAD(0x200000,0x100000)
+ ROM_RELOAD(0x300000,0x100000)
+ROM_END
+
ROM_START( carlecfg )
@@ -990,6 +1023,8 @@ CONS( 2006, sudelan3, 0, 0, elan_sudoku, sudoku, elan_eu3a05_state
// Senario also distributed this version in the US without the '3 in 1' text on the box, ROM has not been verified to match
CONS( 2005, sudelan, 0, 0, elan_sudoku_pal, sudoku, elan_eu3a05_state, init_sudelan, "All in 1 Products Ltd / Play Vision", "Carol Vorderman's Sudoku Plug & Play TV Game (All in 1 / Play Vision)", MACHINE_NOT_WORKING )
+CONS( 2005, sudoku2p, 0, 0, elan_sudoku_pal, sudoku2p, elan_eu3a05_state, empty_init, "", "Sudoku TV Game (PAL, 2 players)", MACHINE_NOT_WORKING ) // a pair of yellow controllers with 'TV Sudoku Awesome Puzzles' on their label
+
CONS( 200?, carlecfg, 0, 0, elan_sudoku, carlecfg, elan_eu3a05_state, empty_init, "Excalibur Electronics Inc", "Carl Edwards' Chase For Glory", MACHINE_NOT_WORKING )
// see https://millionaire.fandom.com/wiki/Haluatko_miljon%C3%A4%C3%A4riksi%3F_(Play_Vision_game)
diff --git a/src/mame/tvgames/elan_eu3a05vid.cpp b/src/mame/tvgames/elan_eu3a05vid.cpp
index 787175a238a..08c0a7558b5 100644
--- a/src/mame/tvgames/elan_eu3a05vid.cpp
+++ b/src/mame/tvgames/elan_eu3a05vid.cpp
@@ -18,7 +18,6 @@ elan_eu3a05vid_device::elan_eu3a05vid_device(const machine_config &mconfig, cons
m_vrambase(0x600),
m_spritebase(0x3e00),
m_use_spritepages(false),
- m_force_transpen_ff(false),
m_force_basic_scroll(false)
{
}
@@ -44,7 +43,7 @@ void elan_eu3a05vid_device::map(address_map &map)
map(0x0d, 0x0e).rw(FUNC(elan_eu3a05vid_device::splitpos_r), FUNC(elan_eu3a05vid_device::splitpos_w));
map(0x0f, 0x16).rw(FUNC(elan_eu3a05vid_device::tile_scroll_r), FUNC(elan_eu3a05vid_device::tile_scroll_w));
map(0x17, 0x17).ram(); // unknown
- map(0x18, 0x18).ram(); // unknown
+ map(0x18, 0x18).rw(FUNC(elan_eu3a05vid_device::transpen_r), FUNC(elan_eu3a05vid_device::transpen_w));
// no other writes seen
}
@@ -202,18 +201,6 @@ void elan_eu3a05vid_device::draw_sprites(screen_device &screen, bitmap_ind16 &bi
if (colour & 0x80)
colour = 0;
- int transpen = 0;
-
- /* HACK - how is this calculated
- phoenix and the game select need it like this
- it isn't a simple case of unk2 being transpen either because Qix has some elements set to 0x07
- where the transpen needs to be 0x00 and Space Invaders has it set to 0x04
- it could be a global register rather than something in the spritelist?
- */
- if (((attr == 0xff) && (unk2 == 0xff)) || m_force_transpen_ff)
- transpen = 0xff;
-
-
if (!(flags & 0x80))
continue;
@@ -279,7 +266,7 @@ void elan_eu3a05vid_device::draw_sprites(screen_device &screen, bitmap_ind16 &bi
uint8_t pix = fullbankspace.read_byte(realaddr);
- if (pix != transpen)
+ if (pix != m_transpen)
{
if (flags & 0x04) // flipx
{
@@ -619,6 +606,18 @@ uint32_t elan_eu3a05vid_device::screen_update(screen_device &screen, bitmap_ind1
return 0;
}
+uint8_t elan_eu3a05vid_device::transpen_r()
+{
+ logerror("%s: transpen_r (Transparency Pen)\n", machine().describe_context());
+ return m_transpen;
+}
+
+void elan_eu3a05vid_device::transpen_w(uint8_t data)
+{
+ logerror("%s: transpen_w (Transparency Pen) %02x\n", machine().describe_context(), data);
+ m_transpen = data;
+}
+
// Tile bases
void elan_eu3a05vid_device::tile_gfxbase_lo_w(uint8_t data)
diff --git a/src/mame/tvgames/elan_eu3a05vid.h b/src/mame/tvgames/elan_eu3a05vid.h
index 1be6f359f81..736cd8490e7 100644
--- a/src/mame/tvgames/elan_eu3a05vid.h
+++ b/src/mame/tvgames/elan_eu3a05vid.h
@@ -24,7 +24,6 @@ public:
void set_is_sudoku();
void set_is_pvmilfin();
void set_use_spritepages() { m_use_spritepages = true; }
- void set_force_transpen_ff() { m_force_transpen_ff = true; }
void set_force_basic_scroll() { m_force_basic_scroll = true; }
protected:
@@ -49,6 +48,7 @@ private:
uint8_t m_tile_scroll[4*2]{};
uint8_t m_splitpos[2]{};
+ uint8_t m_transpen = 0;
uint16_t get_scroll(int which);
@@ -73,6 +73,9 @@ private:
uint8_t sprite_gfxbase_lo_r();
uint8_t sprite_gfxbase_hi_r();
+ uint8_t transpen_r();
+ void transpen_w(uint8_t data);
+
uint8_t elan_eu3a05_vidctrl_r();
void elan_eu3a05_vidctrl_w(uint8_t data);
@@ -89,7 +92,6 @@ private:
int m_vrambase;
int m_spritebase;
bool m_use_spritepages;
- bool m_force_transpen_ff;
bool m_force_basic_scroll;
};
diff --git a/src/mame/tvgames/generalplus_gpl16250_spi_direct.cpp b/src/mame/tvgames/generalplus_gpl16250_spi_direct.cpp
index 844ae934897..796e294b1cb 100644
--- a/src/mame/tvgames/generalplus_gpl16250_spi_direct.cpp
+++ b/src/mame/tvgames/generalplus_gpl16250_spi_direct.cpp
@@ -25,6 +25,7 @@ public:
}
void init_fif();
+ void init_siddr();
void generalplus_gpspi_direct(machine_config &config);
@@ -210,6 +211,13 @@ ROM_START( bftetris )
ROM_LOAD16_WORD_SWAP( "arcadeclassicstetris_25q16ct_c84015.bin", 0x0000, 0x200000, CRC(a97e1bab) SHA1(400944d310d5d5fccb2c6d048d7bf0cb00da09de) )
ROM_END
+ROM_START( siddr )
+ ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
+ //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
+
+ ROM_REGION16_BE(0x800000, "maincpu:spidirect", ROMREGION_ERASE00)
+ ROM_LOAD16_WORD_SWAP( "ddr-toy.bin", 0x0000, 0x400000, CRC(873cbcc8) SHA1(bdd3d12adb1284991a3f8aaa8e451e3a55931267) )
+ROM_END
void generalplus_gpspi_direct_game_state::init_fif()
{
@@ -221,6 +229,17 @@ void generalplus_gpspi_direct_game_state::init_fif()
}
}
+void generalplus_gpspi_direct_game_state::init_siddr()
+{
+ uint8_t* spirom8 = (uint8_t*)memregion("maincpu:spidirect")->base();
+ for (int i = 0x3000; i < 0x400000; i++)
+ {
+ spirom8[i] = bitswap<8>(spirom8[i] ^ 0x68,
+ 3, 5, 0, 7, 1, 4, 2, 6);
+ }
+}
+
+
} // anonymous namespace
@@ -232,3 +251,6 @@ CONS(2017, bfgalaga, 0, 0, generalplus_gpspi_direct, bfmpac, generalplus_gpspi_d
CONS(2018, bfdigdug, 0, 0, generalplus_gpspi_direct, bfmpac, generalplus_gpspi_direct_game_state, init_fif, "Basic Fun", "Dig Dug (mini arcade)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
CONS(2019, bfspyhnt, 0, 0, generalplus_gpspi_direct, bfspyhnt, generalplus_gpspi_direct_game_state, init_fif, "Basic Fun", "Spy Hunter (mini arcade)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
CONS(2019, bftetris, 0, 0, generalplus_gpspi_direct, bfspyhnt, generalplus_gpspi_direct_game_state, init_fif, "Basic Fun", "Tetris (mini arcade)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+
+// probably not identical hardware, encryption is different, but it does seem to still be a 'direct access' SPI ROM case
+CONS(201?, siddr, 0, 0, generalplus_gpspi_direct, bfspyhnt, generalplus_gpspi_direct_game_state, init_siddr, "Super Impulse", "Dance Dance Revolution - Broadwalk Arcade", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
diff --git a/src/mame/tvgames/generalplus_gpl32612.cpp b/src/mame/tvgames/generalplus_gpl32612.cpp
index b84b9b332f5..5afd315952f 100644
--- a/src/mame/tvgames/generalplus_gpl32612.cpp
+++ b/src/mame/tvgames/generalplus_gpl32612.cpp
@@ -274,6 +274,18 @@ ROM_START( zippityuk )
ROM_LOAD( "29f2c08aacwp.u2", 0x0000, 0x10800000, CRC(27d172ae) SHA1(9ade19d7aa28fba13581e6879b39e3a7702260b0) )
ROM_END
+ROM_START( kidizmp )
+ ROM_REGION( 0x10800000, "nandrom", ROMREGION_ERASE00 )
+ ROM_LOAD( "s34ml02g1_withspare.u13", 0x0000, 0x10800000, CRC(c5d55bdc) SHA1(073fc3fd56c532750b4e2020abe27d3448999d56) )
+ROM_END
+
+ROM_START( kidizmb )
+ ROM_REGION( 0x8400000, "nandrom", ROMREGION_ERASE00 )
+ ROM_LOAD( "hy27uf081g2a_withspare.bin", 0x0000, 0x8400000, CRC(b87861c4) SHA1(8b5cc2557b54a37928be818430b91c48db98758f) )
+ROM_END
+
+
+
void generalplus_gpl32612_game_state::nand_init(int blocksize, int blocksize_stripped)
{
uint8_t* rom = memregion("nand")->base();
@@ -327,3 +339,8 @@ CONS( 200?, jak_dchp, 0, 0, gpl32612, gpl32612, generalplus_gp
CONS( 201?, zippity, 0, 0, zippity, gpl32612, generalplus_zippity_game_state, empty_init, "LeapFrog", "Zippity (US)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
// TODO, check if code differs, or just unused areas of the NAND
CONS( 201?, zippityuk, zippity, 0, zippity, gpl32612, generalplus_zippity_game_state, empty_init, "LeapFrog", "Zippity (UK)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
+
+// GP32C01 (maybe, picture is unclear) - Camera for kids
+CONS( 2013, kidizmp, 0, 0, zippity, gpl32612, generalplus_zippity_game_state, empty_init, "VTech", "Kidizoom Connect (Germany, pink camera)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
+// seems to be older tech, just glob + ROM, assuming it's a GP32 series based on above and due to having ARM code
+CONS( 201?, kidizmb, 0, 0, zippity, gpl32612, generalplus_zippity_game_state, empty_init, "VTech", "Kidizoom (Germany, blue camera)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
diff --git a/src/mame/tvgames/spg29x.cpp b/src/mame/tvgames/spg29x.cpp
index 2987ad7c3e8..9bcace98cec 100644
--- a/src/mame/tvgames/spg29x.cpp
+++ b/src/mame/tvgames/spg29x.cpp
@@ -156,8 +156,9 @@ public:
protected:
void machine_reset() override;
-private:
std::vector m_strippedrom;
+
+private:
int m_firstvector = 0;
};
@@ -176,6 +177,21 @@ protected:
private:
};
+class spg29x_zonefamf_game_state : public spg29x_nand_game_state
+{
+public:
+ spg29x_zonefamf_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ spg29x_nand_game_state(mconfig, type, tag)
+ { }
+
+ void nand_zonefamf();
+
+protected:
+ void machine_reset() override;
+
+private:
+};
+
@@ -429,6 +445,23 @@ void spg29x_zone3d_game_state::machine_reset()
m_maincpu->set_state_int(SCORE_PC, 0x1000);
}
+void spg29x_zonefamf_game_state::machine_reset()
+{
+ spg29x_game_state::machine_reset();
+
+ uint32_t sourceaddr = 0x80000;
+ for (uint32_t addr = 0; addr <= 0x80000; addr++)
+ {
+ address_space& mem = m_maincpu->space(AS_PROGRAM);
+ uint8_t byte = m_strippedrom[sourceaddr];
+ mem.write_byte(addr, byte);
+ sourceaddr++;
+ }
+
+ m_maincpu->set_state_int(SCORE_PC, 0x4);
+}
+
+
QUICKLOAD_LOAD_MEMBER(spg29x_game_state::quickload_hyper_exe)
{
@@ -542,6 +575,12 @@ void spg29x_nand_game_state::nand_jak_bbsf()
m_firstvector = 0x8;
}
+void spg29x_zonefamf_game_state::nand_zonefamf()
+{
+ nand_init(0x840, 0x800);
+// m_firstvector = 0x8;
+}
+
void spg29x_zone3d_game_state::init_zone3d()
{
@@ -575,6 +614,17 @@ ROM_START( jak_bbsf )
ROM_LOAD32_DWORD("internal.rom", 0x000000, 0x008000, NO_DUMP)
ROM_END
+ROM_START( zonefamf )
+ ROM_REGION( 0x21000000, "nand", 0 )
+ ROM_LOAD("hy27uf084g2m_withspare.u1", 0x000000, 0x21000000, CRC(ee12b689) SHA1(fd9c708b6bb2e7574173a140d8839869a8c9f51a) )
+
+ ROM_REGION( 0x008000, "spg290", ROMREGION_32BIT | ROMREGION_LE )
+ ROM_LOAD32_DWORD("internal.rom", 0x000000, 0x008000, NO_DUMP)
+
+ //has 1x 48LC8M16A2 (128Mbit/16MByte SDRAM) for loading game into
+ROM_END
+
+
ROM_START( zone3d )
ROM_REGION( 0x100000, "spi", 0 )
ROM_LOAD("zone_25l8006e_c22014.bin", 0x000000, 0x100000, CRC(8c571771) SHA1(cdb46850286d31bf58d45b75ffc396ed774ac4fd) )
@@ -620,9 +670,12 @@ COMP( 2006, hyprscan, 0, 0, hyperscan, hyperscan, spg29x_game_state,
COMP( 2009, jak_bbh, 0, 0, spg29x, hyperscan, spg29x_nand_game_state, nand_jak_bbh, "JAKKS Pacific Inc", "Big Buck Hunter Pro (JAKKS Pacific TV Game)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) //has ISSI 404A (24C04)
COMP( 2011, jak_bbsf, 0, 0, spg29x, hyperscan, spg29x_nand_game_state, nand_jak_bbsf,"JAKKS Pacific Inc", "Big Buck Safari (JAKKS Pacific TV Game)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // has ISSI 416A (24C16)
-// ends up doing the fllowing, which causes a jump to 0xbf000024, where we have nothing mapped (internal ROM related, or thinks it's loaded code there? This is the area Hyperscan uses as 'BIOS' not Internal ROM so could be RAM here)
+// ends up doing the following, which causes a jump to 0xbf000024, where we have nothing mapped (internal ROM related, or thinks it's loaded code there? This is the area Hyperscan uses as 'BIOS' not Internal ROM so could be RAM here)
// 000011D4: ldis r8, 0xbf00
// 000011D8: ori r8, 0x0024
// 000011DC: br r8
COMP( 201?, zone3d, 0, 0, spg29x, hyperscan, spg29x_zone3d_game_state, init_zone3d,"Zone", "Zone 3D", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP( 201?, zonefamf, 0, 0, spg29x, hyperscan, spg29x_zonefamf_game_state, nand_zonefamf,"Zone", "Zone Family Fit", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+
+// see also spg29x_lexibook_jg7425.cpp which may or may not belong here
diff --git a/src/mame/tvgames/spg2xx.cpp b/src/mame/tvgames/spg2xx.cpp
index e942271496b..fd94b34e454 100644
--- a/src/mame/tvgames/spg2xx.cpp
+++ b/src/mame/tvgames/spg2xx.cpp
@@ -1968,6 +1968,11 @@ ROM_START( lxspidaj )
ROM_LOAD16_WORD_SWAP( "mx29lv320ct.u2", 0x000000, 0x400000, CRC(e7e03c62) SHA1(ab13452f0436efb767f01dff54dd48a528538e3f) )
ROM_END
+ROM_START( lxairjet )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "w321tg.u5", 0x000000, 0x400000, CRC(105b226f) SHA1(2622678a8586ee6edae17715657037a5419e3321) )
+ROM_END
+
ROM_START( fordrace )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
@@ -2206,6 +2211,8 @@ CONS( 2006, ablkickb, 0, 0, ablkickb, ablkickb, spg2xx_game_albkickb_
CONS( 2007, lxspidaj, 0, 0, spg2xx_pal,lxspidaj, spg2xx_game_albkickb_state, init_ablkickb, "Lexibook", "Spider-Man Super TV Air Jet (Lexibook Junior, JG6000SP)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+CONS( 2007, lxairjet, 0, 0, spg2xx_pal,lxspidaj, spg2xx_game_albkickb_state, init_ablkickb, "Lexibook", "Super TV Air Jet 6-in-1 (Lexibook Junior)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+
CONS( 2006, totspies, 0, 0, spg2xx_pal,totspies, spg2xx_game_state, empty_init, "Senario / Marathon - Mystery Animation Inc.", "Totally Spies! (France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2006, fordrace, 0, 0, fordrace, fordrace, spg2xx_game_fordrace_state, empty_init, "Excalibur Electronics", "Ford Racing", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/tvgames/trkfldch.cpp b/src/mame/tvgames/trkfldch.cpp
index f205f3f9e7e..00eb59bff29 100644
--- a/src/mame/tvgames/trkfldch.cpp
+++ b/src/mame/tvgames/trkfldch.cpp
@@ -2,6 +2,13 @@
// copyright-holders:David Haywood
/*
+The lexitvsprt contains "W55V9x" strings, which appear to identify the tech used here as the following
+Nuvoton product
+http://e-tech.com.hk/pd_nuvo_at_game.html
+
+
+---
+
Track & Field Challenge TV Game
https://www.youtube.com/watch?v=wjn1lLylqog
@@ -67,6 +74,9 @@ protected:
virtual void machine_reset() override;
virtual void video_start() override;
+ virtual uint8_t unkregs_r(offs_t offset);
+ virtual void unkregs_w(offs_t offset, uint8_t data);
+
private:
required_device m_maincpu;
@@ -122,9 +132,6 @@ private:
uint8_t m_unkregs[0x90]{};
- uint8_t unkregs_r(offs_t offset);
- void unkregs_w(offs_t offset, uint8_t data);
-
uint8_t m_tmapscroll_window[2][0x12]{};
uint8_t m_unkdata[0x100000]{};
@@ -132,6 +139,30 @@ private:
};
+class trkfldch_lexi_state : public trkfldch_state
+{
+public:
+ trkfldch_lexi_state(const machine_config &mconfig, device_type type, const char *tag) :
+ trkfldch_state(mconfig, type, tag),
+ m_extra(*this, "EXTRA")
+ { }
+
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ uint8_t unkregs_r(offs_t offset) override;
+ void unkregs_w(offs_t offset, uint8_t data) override;
+
+private:
+ required_ioport m_extra;
+ uint8_t m_input_bit;
+ uint8_t m_iopos;
+};
+
+
+
void trkfldch_state::video_start()
{
}
@@ -600,11 +631,6 @@ void trkfldch_state::dmaregs_w(offs_t offset, uint8_t data)
int readoffset = 0;
int readdo = m_dmaregs[0x09];
- if ((m_dmaregs[0x08] != 0x00) || (m_dmaregs[0x0c] != 0x00))
- {
- fatalerror("unhandled dma params\n");
- }
-
for (uint32_t j = 0; j < dmalength; j++)
{
uint8_t byte = mem.read_byte(dmasource + readoffset);
@@ -612,7 +638,7 @@ void trkfldch_state::dmaregs_w(offs_t offset, uint8_t data)
if (readdo < 0)
{
readdo = m_dmaregs[0x09];
- readoffset += m_dmaregs[0x07];
+ readoffset += m_dmaregs[0x07] | (m_dmaregs[0x08] << 8);
}
else
{
@@ -624,7 +650,7 @@ void trkfldch_state::dmaregs_w(offs_t offset, uint8_t data)
if (writedo < 0)
{
writedo = m_dmaregs[0x0d];
- writeoffset += m_dmaregs[0xb];
+ writeoffset += m_dmaregs[0xb] | (m_dmaregs[0x0c] << 8);
}
else
{
@@ -1017,6 +1043,30 @@ static INPUT_PORTS_START( shtscore )
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
+static INPUT_PORTS_START( lexi )
+ PORT_START("IN0")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("IN1")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("IN2")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("IN3")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("EXTRA")
+ PORT_BIT( 0x00008, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x00020, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x00080, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x00200, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x00800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x02000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x08000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x20000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+INPUT_PORTS_END
+
static const gfx_layout tiles8x8x8_layout =
{
8,8,
@@ -1362,6 +1412,63 @@ void trkfldch_state::unkregs_w(offs_t offset, uint8_t data)
}
+
+void trkfldch_lexi_state::machine_start()
+{
+ trkfldch_state::machine_start();
+ save_item(NAME(m_input_bit));
+ save_item(NAME(m_iopos));
+}
+
+void trkfldch_lexi_state::machine_reset()
+{
+ trkfldch_state::machine_reset();
+ m_input_bit = 0;
+ m_iopos = 0;
+}
+
+uint8_t trkfldch_lexi_state::unkregs_r(offs_t offset)
+{
+ switch (offset)
+ {
+
+ case 0x00:
+ {
+ uint8_t ret = m_input_bit;
+ logerror("%s: unkregs_r %04x (returning %02x) (Player 1 inputs)\n", machine().describe_context(), offset, ret);
+ return ret;
+ }
+
+ default:
+ return trkfldch_state::unkregs_r(offset);
+ }
+}
+
+
+void trkfldch_lexi_state::unkregs_w(offs_t offset, uint8_t data)
+{
+ switch (offset)
+ {
+ case 0x03:
+ logerror("%s: unkregs_w %04x %02x (io strobe?)\n", machine().describe_context(), offset, data);
+ if (data == 0x03)
+ {
+ m_iopos = 0;
+ }
+ else
+ {
+ m_iopos++;
+ }
+
+ m_input_bit = (m_extra->read() >> m_iopos) & 1;
+ break;
+
+ default:
+ trkfldch_state::unkregs_w(offset, data);
+ break;
+ }
+}
+
void trkfldch_state::machine_start()
{
save_item(NAME(m_unkdata_addr));
@@ -1469,10 +1576,17 @@ ROM_START( shtscore )
ROM_LOAD( "shootnscore.bin", 0x000000, 0x400000, CRC(37aa16bd) SHA1(609d0191301480c51ec1188c67101a4e88a5170f) )
ROM_END
+ROM_START( lexitvsprt )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "29l3211.u2a", 0x000000, 0x400000, CRC(65e5223c) SHA1(13eae6e34100fb9761335e87a3cf728bb31e860f) )
+ROM_END
+
+
} // anonymous namespace
-CONS( 2007, trkfldch, 0, 0, trkfldch, trkfldch,trkfldch_state, empty_init, "Konami", "Track & Field Challenge", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-CONS( 2006, my1stddr, 0, 0, trkfldch, my1stddr,trkfldch_state, empty_init, "Konami", "My First Dance Dance Revolution (US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // Japan version has different songs
-CONS( 200?, abl4play, 0, 0, trkfldch, abl4play,trkfldch_state, empty_init, "Advance Bright Ltd", "4 Player System - 10 in 1", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+CONS( 2007, trkfldch, 0, 0, trkfldch, trkfldch,trkfldch_state, empty_init, "Konami", "Track & Field Challenge", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+CONS( 2006, my1stddr, 0, 0, trkfldch, my1stddr,trkfldch_state, empty_init, "Konami", "My First Dance Dance Revolution (US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // Japan version has different songs
+CONS( 200?, abl4play, 0, 0, trkfldch, abl4play,trkfldch_state, empty_init, "Advance Bright Ltd", "4 Player System - 10 in 1", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
CONS( 200?, shtscore, 0, 0, trkfldch, shtscore,trkfldch_state, empty_init, "Halsall / time4toys.com / Electronic Games", "Shoot n' Score", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+CONS( 200?, lexitvsprt,0, 0, trkfldch, lexi, trkfldch_lexi_state, empty_init, "Lexibook", "TV Sports Plug & Play 5-in-1 (JG7000)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
--
cgit v1.2.3