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