From 806951950ebc0c98c4e0f57036122c7ed42c9d61 Mon Sep 17 00:00:00 2001 From: mamehaze <140764005+mamehaze@users.noreply.github.com> Date: Thu, 23 Jan 2025 18:46:04 +0000 Subject: [PATCH] tvgames: Added seventeen tvgames (4 working). (#13241) tvgames/elan_eu3a14vid.cpp: Improved emulation of 2*1 pages and 1*1 pages video modes. New working systems -------------------- Epoch Minna no Tetris (Japan) [TeamEurope, David Haywood] Techno Source Interactive Coloring Book: Disney / Pixar Toy Story [Sean Riddle, David Haywood] Techno Source Interactive Coloring Book: Disney / Pixar Cars [TeamEurope, David Haywood] Techno Source Interactive Coloring Book: Disney Princess [Sean Riddle, David Haywood] New systems marked not working --------------------------------- AtGames 40 Bonus Games in 1 (AtGames) [TeamEurope, Patryk Stefanski] Bandai / Koto Digimon X Arena (Japan) [TeamEurope, David Haywood] BornKid 32 Bit Preloaded 139-in-1 Handheld Game Console [TeamEurope, David Haywood] Fisher-Price 3-in-1 Smart Sports! (US) [Sean Riddle, David Haywood] Fizz Creations Pac-Man Arcade in a Tin [TeamEurope] Fizz Creations Tetris Arcade in a Tin [TeamEurope] Lexibook Arcade Center (JL1800_01) [TeamEurope, David Haywood] Radica / Sega Menacer (Radica Plug & Play) Senario The Amazing Spider-Man (Senario, floor [TeamEurope, David Haywood]mat) [Sean Riddle, David Haywood] Thinkway Toys Interactive M.A.G. Motion Activated Gear: Teen Titans Arena Showdown [Sean Riddle, David Haywood] unknown VT369 based 128-in-1 (GC31-369-20210702-V2) [TeamEurope, David Haywood] Vibes Retro Pocket Gamer 240-in-1 [TeamEurope, David Haywood] YSN Play Portable Color GameU+ (90-in-1) (Japan) [TeamEurope, David Haywood] --- src/mame/mame.lst | 17 +++ src/mame/nintendo/nes_vt369_vtunknown.cpp | 45 ++++++- src/mame/nintendo/vt1682.cpp | 35 +++++- src/mame/sega/megadriv_rad.cpp | 25 ++++ src/mame/skeleton/epoch_tv_globe.cpp | 13 +- src/mame/skeleton/koto_zevio.cpp | 2 +- src/mame/tvgames/elan_eu3a05_a.cpp | 3 +- src/mame/tvgames/elan_eu3a05commonsys.cpp | 4 +- src/mame/tvgames/elan_eu3a14.cpp | 53 +++++++- src/mame/tvgames/elan_eu3a14vid.cpp | 45 ++++--- src/mame/tvgames/elan_eu3a14vid.h | 4 + src/mame/tvgames/generalplus_gpl16250.h | 1 + src/mame/tvgames/generalplus_gpl16250_rom.cpp | 25 +++- src/mame/tvgames/generalplus_gpl16250_spi.cpp | 19 +++ src/mame/tvgames/spg2xx.cpp | 116 ++++++++++++++++++ src/mame/tvgames/spg2xx.h | 36 +++--- src/mame/tvgames/trkfldch.cpp | 9 ++ 17 files changed, 406 insertions(+), 46 deletions(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 992bcd40cf453..ea48e658c97b5 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -35036,6 +35036,7 @@ gtct885 hhgc319 hkb502 hkb502a +lexi30 lpgm240 lxcap lxccatv @@ -35057,6 +35058,7 @@ mog_m320 myarccn nubsupmf otrail +pactin q5_500in1 rd5_240 red5mam @@ -35066,10 +35068,13 @@ rtvgc300fz sealvt sy888b sy889 +tetrtin tup240 +unk128vt unk2019hh unk2020hh unkra200 +vibes240 zonefusn @source:nintendo/nss.cpp @@ -35286,6 +35291,9 @@ cmpmx11 dance555 exsprt48 gm235upc +icb_car +icb_dp +icb_ts ii8in1 ii32in1 intact89 @@ -39746,6 +39754,7 @@ ssf2mdb twinktmb @source:sega/megadriv_rad.cpp +atgame40 dgunl3227 dgunl3227a mdtvp1j @@ -39758,6 +39767,7 @@ rad_gen2 // (c)2004 Radica rad_md1 rad_md1uk rad_md2uk +rad_mncr rad_orun rad_sf2 // (c)2004 Radica rad_sf2uk // (c)2004 Radica @@ -42574,6 +42584,7 @@ elzet80p // epic14e // @source:skeleton/epoch_tv_globe.cpp +digixar eptvglob @source:skeleton/esprit.cpp @@ -45905,6 +45916,7 @@ rad_hnt3p rad_bask rad_baskp spidtt +teentit tsbuzz @source:tvgames/generalplus_gpl16250_mobigo.cpp @@ -45936,7 +45948,9 @@ beambox @source:tvgames/generalplus_gpl16250_rom.cpp beijuehh bornkidh +fpsport gameu50 +gameu90 gameu108 gormiti imgame @@ -45961,6 +45975,7 @@ wrlshunt // Wireless: Hunting Video Game System @source:tvgames/generalplus_gpl16250_spi.cpp anpanbd +bk139in1 bkrankp prailpls @@ -46060,6 +46075,7 @@ doraphonf doyousud dreamlss drumsups +epo_tetr fordrace gssytts guitarfv @@ -46280,6 +46296,7 @@ megadri4a abl4play lexitvsprt my1stddr // (c) 2006 Konami +senspid shtscore teleshi teleship diff --git a/src/mame/nintendo/nes_vt369_vtunknown.cpp b/src/mame/nintendo/nes_vt369_vtunknown.cpp index d41d5c5103b5b..d416bf43f4b06 100644 --- a/src/mame/nintendo/nes_vt369_vtunknown.cpp +++ b/src/mame/nintendo/nes_vt369_vtunknown.cpp @@ -170,6 +170,7 @@ class nes_vt369_vtunknown_unk_state : public nes_vt369_vtunknown_state void nes_vt369_vtunknown_unk(machine_config& config); void nes_vt369_vtunknown_unk_1mb(machine_config& config); + void nes_vt369_vtunknown_unk_4mb(machine_config& config); void nes_vt369_vtunknown_unk_16mb(machine_config& config); void nes_vt369_vtunknown_fp(machine_config& config); @@ -448,7 +449,11 @@ void nes_vt369_vtunknown_unk_state::nes_vt369_vtunknown_unk_1mb(machine_config& m_soc->set_addrmap(AS_PROGRAM, &nes_vt369_vtunknown_unk_state::vt_external_space_map_1mbyte); } - +void nes_vt369_vtunknown_unk_state::nes_vt369_vtunknown_unk_4mb(machine_config& config) +{ + nes_vt369_vtunknown_unk(config); + m_soc->set_addrmap(AS_PROGRAM, &nes_vt369_vtunknown_unk_state::vt_external_space_map_4mbyte); +} @@ -881,14 +886,41 @@ ROM_START( otrail ) ROM_LOAD( "t24c04a.bin", 0x000, 0x200, CRC(ce1fad6f) SHA1(82878996765739edba42042b6336460d5c8f8096) ) ROM_END +ROM_START( pactin ) + ROM_REGION( 0x100000, "mainrom", 0 ) + ROM_LOAD( "25q80a.u3", 0x00000, 0x100000, CRC(92935759) SHA1(2333e7dcab51fa34c8d875374371854121fff27a) ) +ROM_END +ROM_START( tetrtin ) + ROM_REGION( 0x100000, "mainrom", 0 ) + ROM_LOAD( "25q80.u3", 0x00000, 0x100000, CRC(017a99b9) SHA1(e7f891762bbc3b80ae0f177654d8d066b7524bcd) ) +ROM_END +// GC31-369-20210702-V2 on PCB +ROM_START( unk128vt ) + ROM_REGION( 0x400000, "mainrom", 0 ) + ROM_LOAD( "w25q32.bin", 0x00000, 0x400000, CRC(35ccadf6) SHA1(80b25e374a097d1b9380b7e64013d7ac0d5aa2ca) ) +ROM_END + ROM_START( hhgc319 ) ROM_REGION( 0x1000000, "mainrom", 0 ) ROM_LOAD( "s29gl128n10tfi01.u3", 0x000000, 0x1000000, CRC(4b51125f) SHA1(bab3981ae1652cf6620c7c6769a6729a1e4d588f) ) ROM_END +ROM_START( vibes240 ) + ROM_REGION( 0x1000000, "mainrom", 0 ) + // wouldn't read consistently + ROM_LOAD( "s29gl128p11tfi01.bin", 0x000000, 0x1000000, BAD_DUMP CRC(7244d6e9) SHA1(951052f6cd8c873f85f79be9d64498a43e92fd10) ) + ROM_IGNORE(0x100) +ROM_END + +ROM_START( lexi30 ) + ROM_REGION( 0x800000, "mainrom", 0 ) + ROM_LOAD( "lexi30.u3", 0x00000, 0x800000, CRC(0d4307ea) SHA1(0d7cf492f796b0bb871deebaca38a3ff3b2ed1e6) ) +ROM_END + + void nes_vt369_vtunknown_state::init_lxcmcypp() { int size = memregion("mainrom")->bytes()/2; @@ -930,6 +962,8 @@ CONS( 2017, fapocket, 0, 0, nes_vt369_vtunknown_fa_4x16mb, nes_vt369_v ****************************************************************************************************************/ +CONS( 2012, lexi30, 0,0, nes_vt369_vtunknown_hh_8mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "Lexibook", "Arcade Center (JL1800_01)", MACHINE_NOT_WORKING ) + // don't even get to menu. very enhanced chipset, VT368/9? CONS( 2012, dgun2561, 0, 0, nes_vt369_vtunknown_cy_bigger, nes_vt369_vtunknown, nes_vt369_vtunknown_cy_state, empty_init, "dreamGEAR", "My Arcade Portable Gaming System with 140 Games (DGUN-2561)", MACHINE_NOT_WORKING ) // 64Mbyte ROM, must be externally banked, or different addressing scheme @@ -1010,6 +1044,9 @@ CONS( 2020, nubsupmf, 0, 0, nes_vt369_vtunknown_hh_4mb, nes_vt369_vtunkn // unknown tech level, might be scrambled as default codebank/boot vectors don't seem valid CONS( 201?, hhgc319, 0, 0, nes_vt369_vtunknown_hh_16mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "", "Handheld Game Console 319-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) +// unknown tech, probably from 2021, probably VT369, ROM wouldn't read consistently +CONS( 202?, vibes240, 0, 0, nes_vt369_vtunknown_unk_16mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "", "Vibes Retro Pocket Gamer 240-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) + /***************************************************************************** * below are VT369 games that use BGA on sub *****************************************************************************/ @@ -1065,4 +1102,10 @@ CONS( 201?, egame150, denv150, 0, nes_vt369_vtunknown_cy_bigger, nes_vt369_vt // uncertain, uses SPI ROM so probably VT369 CONS( 2017, otrail, 0, 0, nes_vt369_vtunknown_unk_1mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "Basic Fun", "The Oregon Trail", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) +// seems to be running the NES version of Pac-Man with some extra splash screens +CONS( 2021, pactin, 0, 0, nes_vt369_vtunknown_unk_1mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "Fizz Creations", "Pac-Man Arcade in a Tin", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) + +CONS( 2021, tetrtin, 0, 0, nes_vt369_vtunknown_unk_1mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "Fizz Creations", "Tetris Arcade in a Tin", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) +// boots, has a lower resolution screen. menu is natively in low resolution, other games should be scaled down +CONS( 2021, unk128vt, 0, 0, nes_vt369_vtunknown_unk_4mb, nes_vt369_vtunknown, nes_vt369_vtunknown_unk_state, empty_init, "", "unknown VT369 based 128-in-1 (GC31-369-20210702-V2)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/nintendo/vt1682.cpp b/src/mame/nintendo/vt1682.cpp index 9c4752f210fb3..676ff96b79585 100644 --- a/src/mame/nintendo/vt1682.cpp +++ b/src/mame/nintendo/vt1682.cpp @@ -5957,6 +5957,19 @@ static INPUT_PORTS_START( lxts3 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) INPUT_PORTS_END +static INPUT_PORTS_START( icb ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) +INPUT_PORTS_END + + static INPUT_PORTS_START( njp60in1 ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) @@ -6524,6 +6537,21 @@ ROM_START( lxts3 ) ROM_END +ROM_START( icb_ts ) + ROM_REGION( 0x2000000, "mainrom", ROMREGION_ERASE00 ) + ROM_LOAD( "toystory.bin", 0x00000, 0x400000, CRC(396f8aff) SHA1(b149470306cd77558666b7ab90fa3fe4e95b6c60) ) +ROM_END + +ROM_START( icb_car ) + ROM_REGION( 0x2000000, "mainrom", ROMREGION_ERASE00 ) + ROM_LOAD( "kh26lv320.u2", 0x00000, 0x400000, CRC(88132171) SHA1(55a9ac8c1f49dfc116565ac11149cbd4eef90938) ) +ROM_END + +ROM_START( icb_dp ) + ROM_REGION( 0x2000000, "mainrom", ROMREGION_ERASE00 ) + ROM_LOAD( "princesscoloringbook.bin", 0x00000, 0x400000, CRC(253a0245) SHA1(1b902f179eed469cf749aaa9169fede290ce1031) ) +ROM_END + ROM_START( gm235upc ) ROM_REGION( 0x2000000, "mainrom", ROMREGION_ERASE00 ) ROM_LOAD( "39vf3201.u3", 0x00000, 0x400000, CRC(182f8a2c) SHA1(7be56e1063cc8dbb78c419f5adc05b8cd65c8e2f)) @@ -6617,6 +6645,10 @@ CONS( 200?, unk1682, 0, 0, vt1682_unk1682, lxts3, vt1682_lxts3_state, unk168 CONS( 2010, lxts3, 0, 0, vt1682_lxts3, lxts3, vt1682_lxts3_state, regular_init, "Lexibook", "Toy Story 3 (Lexibook)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +CONS( 200?, icb_ts, 0, 0, vt1682_lxts3, icb, vt1682_lxts3_state, regular_init, "Techno Source", "Interactive Coloring Book: Disney / Pixar Toy Story", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +CONS( 200?, icb_car, 0, 0, vt1682_lxts3, icb, vt1682_lxts3_state, regular_init, "Techno Source", "Interactive Coloring Book: Disney / Pixar Cars", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +CONS( 200?, icb_dp, 0, 0, vt1682_lxts3, icb, vt1682_lxts3_state, regular_init, "Techno Source", "Interactive Coloring Book: Disney Princess", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) + // there are products on SunPlus type hardware with nearly identical shells 'Mi DiGi World' / 'Mi Digi Diary' // needs IO ports on sound CPU side, needs write access to space for RAM (inputs are 'mini-keyboard' style) CONS( 200?, gm235upc, 0, 0, gm235upc, gm235upc, vt1682_dance_state, regular_init, "TimeTop", "Ultimate Pocket Console GM-235", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) @@ -6641,5 +6673,4 @@ CONS( 2007, cmpmx11, 0, 0, mx10, mx10, vt1682_mx10_state, mx10_init, // this unit has a vertical screen, and the games are designed for that aspect // only Jungle Soft is shown on box for manufacturer details, 30-in-1 versions also exist // see https://bootleggames.fandom.com/wiki/Classic_Max_Pocket for other units with these games -// how do you specify ROT270 with CONS? using GAME macro for now -GAME( 2007, cmpmx10, 0, mx10, mx10, vt1682_mx10_state, mx10_init, ROT270, "Jungle Soft", "Classic Max Pocket Mx-10 - 12 in 1 (vertical)", MACHINE_IMPERFECT_GRAPHICS ) +CONS( 2007, cmpmx10, 0, 0, mx10, mx10, vt1682_mx10_state, mx10_init, "Jungle Soft", "Classic Max Pocket Mx-10 - 12 in 1 (vertical)", ROT270 | MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/sega/megadriv_rad.cpp b/src/mame/sega/megadriv_rad.cpp index 3222c985cb9a0..05d405d4a380d 100644 --- a/src/mame/sega/megadriv_rad.cpp +++ b/src/mame/sega/megadriv_rad.cpp @@ -586,6 +586,12 @@ ROM_START( rad_orun ) ROM_LOAD16_WORD_SWAP( "outrun.bin", 0x000000, 0x100000, CRC(4fd6d653) SHA1(57f0e4550ff883e4bb7857caef2c893c21f80b42) ) ROM_END +ROM_START( rad_mncr ) + ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF ) + // radica_menacer_byteswapped.bin = mpr-15075-f.u1 megadriv:menacer Menacer 6-Game Cartridge (Europe, USA) + ROM_LOAD16_WORD_SWAP( "radica_menacer.bin", 0x000000, 0x100000, CRC(5f9ef4a4) SHA1(f28350e7325cb7469d760d97ee452a9d846eb3d4) ) +ROM_END + ROM_START( msi_sf2 ) ROM_REGION( 0x400000, "maincpu", 0 ) // The first part of the ROM seems to be a boot ROM for the enhanced MD clone menus, even if it does nothing here @@ -611,6 +617,13 @@ ROM_START( dgunl3227a ) ROM_LOAD16_WORD_SWAP( "myarcadepacman_s99jl032hbt1_9991227e_as_s29jl032h55tai01.bin", 0x000000, 0x400000, CRC(ecead966) SHA1(971e8da6eb720f670f4148c7e07922e4f24eb609) ) ROM_END +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_END ROM_START( ra145 ) @@ -755,6 +768,10 @@ CONS( 2004, rad_ssoc, 0, 0, megadriv_radica_3button_pal, radica_3button // not region locked, no Radica logos, uncertain if other regions would differ CONS( 2004, rad_orun, 0, 0, megadriv_radica_3button_pal, radica_3button_1player, megadriv_radica_state, init_megadrie, "Radica / Sega", "Out Run 2019 (Radica Plug & Play, UK)", 0) +// this has been verified as identical to the 6-in-1 cartridge that came with the Menacer gun for the MD +CONS( 2004, rad_mncr, 0, 0, megadriv_radica_3button_ntsc, radica_3button_1player, megadriv_radica_state, init_megadriv, "Radica / Sega", "Menacer (Radica Plug & Play)", MACHINE_NOT_WORKING ) + + // From a European unit but NTSC? - code is hacked from original USA Genesis game with region check still intact? (does the clone hardware always identify as such? or does the bypassed boot code skip the check?) // TODO: move out of here eventually once the enhanced MD part is emulated rather than bypassed (it's probably the same as the 145-in-1 multigame unit, but modified to only include this single game) CONS( 2018, msi_sf2, 0, 0, megadriv_radica_6button_ntsc, msi_6button, megadriv_radica_state, init_megadriv, "MSI / Capcom / Sega", "Street Fighter II: Special Champion Edition (MSI Plug & Play) (Europe)", 0) @@ -772,3 +789,11 @@ CONS( 2018, dgunl3227, 0, 0, megadriv_dgunl_ntsc, dgunl_1player, 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( 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 ) + +// 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) diff --git a/src/mame/skeleton/epoch_tv_globe.cpp b/src/mame/skeleton/epoch_tv_globe.cpp index 5a93535e00aee..e8dde4bf09d03 100644 --- a/src/mame/skeleton/epoch_tv_globe.cpp +++ b/src/mame/skeleton/epoch_tv_globe.cpp @@ -16,6 +16,9 @@ LCT REV1.9 Tiger-Main KTG-KZ003-08 +is this related to koto_zevio.cpp, Koto Laboratory is credited for the hardware +development of both, and both are 3D capable Plug and Play SoCs + *******************************************************************************/ #include "emu.h" @@ -71,7 +74,7 @@ INPUT_PORTS_END void epoch_tv_globe_state::arm_map(address_map &map) { - map(0x00000000, 0x0001ffff).rom().region("maincpu", 0); + map(0x00000000, 0x007fffff).rom().region("maincpu", 0); } @@ -100,6 +103,14 @@ ROM_START( eptvglob ) ROM_LOAD( "k9f1g08u0b.ic8", 0x000000, 0x8400000, CRC(f1880c56) SHA1(c50f01f799b3296cda56d05a02a59aa78e0c8422) ) ROM_END +ROM_START( digixar ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "mr27t640.ic6", 0x000000, 0x800000, CRC(f593ac1b) SHA1(58cafab21d690de23b4781800c272bebf6b2b46f) ) +ROM_END + + + } // anonymous namespace CONS( 201?, eptvglob, 0, 0, epoch_tv_globe, epoch_tv_globe, epoch_tv_globe_state, empty_init, "Epoch", "TV Globe (Japan)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +CONS( 201?, digixar, 0, 0, epoch_tv_globe, epoch_tv_globe, epoch_tv_globe_state, empty_init, "Bandai / Koto", "Digimon X Arena (Japan)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) diff --git a/src/mame/skeleton/koto_zevio.cpp b/src/mame/skeleton/koto_zevio.cpp index e19b0ea13cd97..2fdeecae0a1cd 100644 --- a/src/mame/skeleton/koto_zevio.cpp +++ b/src/mame/skeleton/koto_zevio.cpp @@ -2,7 +2,7 @@ // copyright-holders:David Haywood // The Zevio SoC was developed by Koto Laboratory, the same company behind the Wonderswan - +// is it related to Ponto-1 in epoch_tv_globe.cpp, as Koto is credited there too #include "emu.h" #include "cpu/arm7/arm7.h" diff --git a/src/mame/tvgames/elan_eu3a05_a.cpp b/src/mame/tvgames/elan_eu3a05_a.cpp index 93419fe940f9e..fcdaed8a00389 100644 --- a/src/mame/tvgames/elan_eu3a05_a.cpp +++ b/src/mame/tvgames/elan_eu3a05_a.cpp @@ -330,7 +330,8 @@ uint8_t elan_eu3a05_sound_device::elan_eu3a05_50a8_r() m_stream->update(); LOGMASKED( LOG_AUDIO, "%s: elan_eu3a05_50a8_r\n", machine().describe_context()); - return m_isstopped; + // batvgc checks bit 0x80 + return m_isstopped | 0xc0; } uint8_t elan_eu3a05_sound_device::elan_eu3a05_sound_volume_r(offs_t offset) diff --git a/src/mame/tvgames/elan_eu3a05commonsys.cpp b/src/mame/tvgames/elan_eu3a05commonsys.cpp index f785ad2fe7546..9cc729fadd584 100644 --- a/src/mame/tvgames/elan_eu3a05commonsys.cpp +++ b/src/mame/tvgames/elan_eu3a05commonsys.cpp @@ -323,7 +323,9 @@ uint8_t elan_eu3a05commonsys_device::nmi_vector_r(offs_t offset) if(machine().side_effects_disabled()) return 0x00; - fatalerror("NMI without custom vector!"); + logerror("NMI without custom vector!"); + + return 0x00; } } diff --git a/src/mame/tvgames/elan_eu3a14.cpp b/src/mame/tvgames/elan_eu3a14.cpp index cb95a0f9a2168..a2b8e800c7693 100644 --- a/src/mame/tvgames/elan_eu3a14.cpp +++ b/src/mame/tvgames/elan_eu3a14.cpp @@ -105,6 +105,11 @@ class elan_eu3a14_state : public driver_device void radica_eu3a14_altrambase_bb3(machine_config &config); void radica_eu3a14p_altrambase_bb3(machine_config &config); + void radica_eu3a14_altspritebase(machine_config& config); + void radica_eu3a14_altspritebase_bat(machine_config& config); + + int tsbuzz_inputs_r(); + private: // screen updates uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -210,7 +215,7 @@ void elan_eu3a14_state::portc_dat_w(uint8_t data) void elan_eu3a14_state::bank_map(address_map &map) { - map(0x000000, 0x3fffff).rom().region("maincpu", 0); + map(0x000000, 0x7fffff).rom().region("maincpu", 0); } void elan_eu3a14_state::radica_eu3a14_map(address_map& map) @@ -262,6 +267,25 @@ static INPUT_PORTS_START( eu3a14 ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END +int elan_eu3a14_state::tsbuzz_inputs_r() +{ + // Test mode shows 8 directions, 2 buttons and a trigger + // presumably the motion detection from the peripherals gets converted + // into basic input directions before reaching the SoC + + // TODO: figure out protocol + return machine().rand(); +} + +static INPUT_PORTS_START( tsbuzz ) + PORT_INCLUDE( eu3a14 ) + + PORT_MODIFY("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) // pause(?), hold this on startup for test mode + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) // cheat? skips levels + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(elan_eu3a14_state::tsbuzz_inputs_r)) // all other inputs read through here +INPUT_PORTS_END + static INPUT_PORTS_START( rad_gtg ) PORT_START("IN0") @@ -800,6 +824,20 @@ void elan_eu3a14_state::radica_eu3a14(machine_config &config) m_sound->sound_end_cb<5>().set(FUNC(elan_eu3a14_state::sound_end5)); } +void elan_eu3a14_state::radica_eu3a14_altspritebase(machine_config& config) +{ + radica_eu3a14(config); + m_vid->set_default_spriteramaddr(0x04); // at 0x800 +} + +void elan_eu3a14_state::radica_eu3a14_altspritebase_bat(machine_config& config) +{ + radica_eu3a14(config); + m_vid->set_default_spriteramaddr(0x0c); // at 0x1800 +} + + + void elan_eu3a14_state::radica_eu3a14_altrambase(machine_config& config) { radica_eu3a14(config); @@ -975,6 +1013,11 @@ ROM_START( spidtt ) ROM_LOAD( "mag_spidtt", 0x000000, 0x800000, CRC(05de01de) SHA1(f2891d6e743abdd7bb50d0bb84701b18225a0a7a) ) ROM_END +ROM_START( teentit ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "teentitansmag.bin", 0x000000, 0x800000, CRC(6087c7ca) SHA1(0bf639218c5f25449f4f98d5c3659a2311a28f72) ) +ROM_END + } // anonymous namespace @@ -996,11 +1039,11 @@ CONS( 2005, rad_hnt3p,rad_hnt3, 0, radica_eu3a14p, radica_hnt3, CONS( 2005, rad_bask, 0, 0, radica_eu3a14_altrambase, radica_bask, elan_eu3a14_state, empty_init, "Radica / FarSight Studios", "Play TV Basketball", MACHINE_NOT_WORKING ) CONS( 2005, rad_baskp,rad_bask, 0, radica_eu3a14p_altrambase, radica_bask, elan_eu3a14_state, empty_init, "Radica / FarSight Studios", "Connectv Basketball", MACHINE_NOT_WORKING ) -CONS( 200?, tsbuzz, 0, 0, radica_eu3a14, eu3a14, elan_eu3a14_state, empty_init, "Thinkway Toys", "Interactive M.A.G. Motion Activated Gear: Toy Story and Beyond! Buzz Lightyear Galactic Adventure", MACHINE_NOT_WORKING ) -CONS( 200?, batvgc, 0, 0, radica_eu3a14, eu3a14, elan_eu3a14_state, empty_init, "Thinkway Toys", "Interactive M.A.G. Motion Activated Gear: The Batman - Villains of Gotham City", MACHINE_NOT_WORKING ) -CONS( 200?, spidtt, 0, 0, radica_eu3a14, eu3a14, elan_eu3a14_state, empty_init, "Thinkway Toys", "Interactive M.A.G. Motion Activated Gear: Spider-Man - Triple Threat", MACHINE_NOT_WORKING ) +CONS( 200?, tsbuzz, 0, 0, radica_eu3a14_altspritebase, tsbuzz, elan_eu3a14_state, empty_init, "Thinkway Toys", "Interactive M.A.G. Motion Activated Gear: Toy Story and Beyond! Buzz Lightyear Galactic Adventure", MACHINE_NOT_WORKING ) +CONS( 200?, batvgc, 0, 0, radica_eu3a14_altspritebase_bat, tsbuzz, elan_eu3a14_state, empty_init, "Thinkway Toys", "Interactive M.A.G. Motion Activated Gear: The Batman - Villains of Gotham City", MACHINE_NOT_WORKING ) +CONS( 200?, spidtt, 0, 0, radica_eu3a14_altspritebase_bat, tsbuzz, elan_eu3a14_state, empty_init, "Thinkway Toys", "Interactive M.A.G. Motion Activated Gear: Spider-Man - Triple Threat", MACHINE_NOT_WORKING ) +CONS( 200?, teentit, 0, 0, radica_eu3a14_altspritebase_bat, tsbuzz, elan_eu3a14_state, empty_init, "Thinkway Toys", "Interactive M.A.G. Motion Activated Gear: Teen Titans Arena Showdown", MACHINE_NOT_WORKING ) // the following Thinkway Toys 'MAG' products likely also fit here -// MAG: Teen Titans Arena Showdown // MAG: Superman Fight for Metropolis // MAG: Disney Pixar Cars I Am Speed diff --git a/src/mame/tvgames/elan_eu3a14vid.cpp b/src/mame/tvgames/elan_eu3a14vid.cpp index 9f31ef164fcee..f4612f69182a8 100644 --- a/src/mame/tvgames/elan_eu3a14vid.cpp +++ b/src/mame/tvgames/elan_eu3a14vid.cpp @@ -140,7 +140,8 @@ void elan_eu3a14vid_device::device_reset() m_5108 = 0x00; m_5109 = 0x00; - m_spriteaddr = 0x14; // ?? rad_foot never writes, other games seem to use it to set sprite location + // TODO: rad_foot and tsbuzz never write, other games seem to use address 0x5153 to set spriteram address + m_spriteaddr = m_default_spriteramaddr; } uint8_t elan_eu3a14vid_device::read_vram(int offset) @@ -177,7 +178,7 @@ void elan_eu3a14vid_device::video_start() uint8_t elan_eu3a14vid_device::read_gfxdata(int offset, int x) { address_space& fullbankspace = m_bank->space(AS_PROGRAM); - return fullbankspace.read_byte((offset+x) & 0x3fffff); + return fullbankspace.read_byte((offset+x) & 0x7fffff); } uint8_t elan_eu3a14vid_device::readpix(int baseaddr, int count, int drawfromram) @@ -191,7 +192,7 @@ uint8_t elan_eu3a14vid_device::readpix(int baseaddr, int count, int drawfromram) else { address_space& fullbankspace = m_bank->space(AS_PROGRAM); - pix = fullbankspace.read_byte((baseaddr+count) & 0x3fffff); + pix = fullbankspace.read_byte((baseaddr+count) & 0x7fffff); } return pix; } @@ -581,7 +582,7 @@ void elan_eu3a14vid_device::draw_background(screen_device &screen, bitmap_ind16 pagesize <<= 1; // shift because we need twice as much ram for this mode } - if ((m_tilecfg[0] & 0x03) == 0x00) // tilemaps arranged as 2x2 pages? + if ((m_tilecfg[0] & 0x03) == 0x00) // 2 pages wide, 2 pages high { ramstart = m_tilerambase + pagesize * 0; ramend = m_tilerambase + pagesize * 1; @@ -615,25 +616,39 @@ void elan_eu3a14vid_device::draw_background(screen_device &screen, bitmap_ind16 draw_background_page(screen, bitmap, cliprect, ramstart,ramend, (size * pagewidth), (size * pageheight * 3) - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0);// wrap y draw_background_page(screen, bitmap, cliprect, ramstart,ramend, (size * pagewidth * 3), (size * pageheight * 3) - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // wrap x+y } - else if ((m_tilecfg[0] & 0x03) == 0x03) // individual tilemaps? multiple layers? + else if ((m_tilecfg[0] & 0x03) == 0x01) // 2 pages wide, 1 page high + { + ramstart = m_tilerambase + pagesize * 0; + ramend = m_tilerambase + pagesize * 1; + + draw_background_page(screen, bitmap, cliprect, ramstart,ramend, 0, 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // normal + draw_background_page(screen, bitmap, cliprect, ramstart,ramend, (size * pagewidth * 2), 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // wrap x + draw_background_page(screen, bitmap, cliprect, ramstart,ramend, 0, (size * pageheight) + 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // wrap y + draw_background_page(screen, bitmap, cliprect, ramstart,ramend, (size * pagewidth * 2), (size * pageheight) + 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // wrap x+y + + ramstart = m_tilerambase + pagesize * 1; + ramend = m_tilerambase + pagesize * 2; + + draw_background_page(screen, bitmap, cliprect, ramstart,ramend, (size * pagewidth), 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // normal + draw_background_page(screen, bitmap, cliprect, ramstart,ramend, (size * pagewidth * 3), 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // wrap x + draw_background_page(screen, bitmap, cliprect, ramstart,ramend, (size * pagewidth), (size * pageheight) + 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // wrap y + draw_background_page(screen, bitmap, cliprect, ramstart,ramend, (size * pagewidth * 3), (size * pageheight) + 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // wrap x+y + } + else if ((m_tilecfg[0] & 0x03) == 0x03) // 1 page wide, 1 page high { // popmessage("m_tilecfg[0] & 0x03 multiple layers config %04x", base); ramstart = m_tilerambase + pagesize * 0; ramend = m_tilerambase + pagesize * 1; - // normal - draw_background_page(screen, bitmap, cliprect, ramstart, ramend, 0, 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); - // wrap x - draw_background_page(screen, bitmap, cliprect, ramstart, ramend, (size * pagewidth), 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); - // wrap y - draw_background_page(screen, bitmap, cliprect, ramstart, ramend, 0, (size * pageheight) + 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); - // wrap x+y - draw_background_page(screen, bitmap, cliprect, ramstart, ramend, (size * pagewidth), (size * pageheight) + 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); + draw_background_page(screen, bitmap, cliprect, ramstart, ramend, 0, 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // normal + draw_background_page(screen, bitmap, cliprect, ramstart, ramend, (size * pagewidth), 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // wrap x + draw_background_page(screen, bitmap, cliprect, ramstart, ramend, 0, (size * pageheight) + 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // wrap y + draw_background_page(screen, bitmap, cliprect, ramstart, ramend, (size * pagewidth), (size * pageheight) + 0 - yscroll, size, bpp, base, pagewidth,pageheight, bytespertile, palettepri, 0); // wrap x+y - // RAM based tile layer + // RAM based tile layer (probably has it's own enable?) draw_background_ramlayer(screen, bitmap, cliprect); } - else + else // might be 1 page wide, 2 high, not seen yet { popmessage("m_tilecfg[0] & 0x03 unknown config"); } diff --git a/src/mame/tvgames/elan_eu3a14vid.h b/src/mame/tvgames/elan_eu3a14vid.h index 59fd728714c84..2ab1216434e02 100644 --- a/src/mame/tvgames/elan_eu3a14vid.h +++ b/src/mame/tvgames/elan_eu3a14vid.h @@ -20,6 +20,8 @@ class elan_eu3a14vid_device : public elan_eu3a05commonvid_device, public device_ void map(address_map &map) ATTR_COLD; + void set_default_spriteramaddr(uint8_t spriteramaddr) { m_default_spriteramaddr = spriteramaddr; } + void set_tilerambase(int tilerambase) { m_tilerambase = tilerambase; } void video_start(); @@ -95,6 +97,8 @@ class elan_eu3a14vid_device : public elan_eu3a05commonvid_device, public device_ int m_spriterambase = 0; bitmap_ind8 m_prioritybitmap; + + uint8_t m_default_spriteramaddr = 0x14; }; DECLARE_DEVICE_TYPE(ELAN_EU3A14_VID, elan_eu3a14vid_device) diff --git a/src/mame/tvgames/generalplus_gpl16250.h b/src/mame/tvgames/generalplus_gpl16250.h index 128755599e75a..a103d733301f5 100644 --- a/src/mame/tvgames/generalplus_gpl16250.h +++ b/src/mame/tvgames/generalplus_gpl16250.h @@ -155,6 +155,7 @@ class gameu_handheld_game_state : public gcm394_game_state void gameu(machine_config &config); void init_gameu(); + void init_gameu50(); void init_gameu108(); protected: diff --git a/src/mame/tvgames/generalplus_gpl16250_rom.cpp b/src/mame/tvgames/generalplus_gpl16250_rom.cpp index ef44329c50439..ba85fc0b48061 100644 --- a/src/mame/tvgames/generalplus_gpl16250_rom.cpp +++ b/src/mame/tvgames/generalplus_gpl16250_rom.cpp @@ -325,6 +325,12 @@ ROM_START( smartfpf ) ROM_LOAD16_WORD_SWAP("smartfitpark_fr.bin", 0x000000, 0x800000, CRC(e6d3ba29) SHA1(14e4632997318329be3291f2c4e62f088181f3c8) ) ROM_END +ROM_START( fpsport ) + ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00) + ROM_LOAD16_WORD_SWAP("fpsports.bin", 0x000000, 0x800000, CRC(d8c23ccc) SHA1(46cbe0aa180facbc06db771c09d3926b27336ac1) ) +ROM_END + + ROM_START( gormiti ) ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00) @@ -369,6 +375,11 @@ ROM_START( gameu50 ) ROM_LOAD16_WORD_SWAP( "gameu.bin", 0x000000, 0x2000000, CRC(13c42bce) SHA1(f769ceabb8ab4e60c0d663dffd5cca91c6aec206) ) ROM_END +ROM_START( gameu90 ) + ROM_REGION( 0x2000000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD16_WORD_SWAP( "s29gl256.bin", 0x000000, 0x2000000, CRC(4b9e0498) SHA1(7ee387deabdd8dd59e5fa7f4f39d472bd4462ba9) ) +ROM_END + ROM_START( gameu108 ) ROM_REGION( 0x2000000, "maincpu", ROMREGION_ERASEFF ) ROM_LOAD16_WORD_SWAP( "s29gl256.u5", 0x000000, 0x2000000, CRC(48e727a4) SHA1(7338f8e46f794ae148adb84146cd2eddf4eba98d) ) @@ -598,7 +609,7 @@ void gameu_handheld_game_state::machine_reset() m_upperbase = 0; } -void gameu_handheld_game_state::decrypt_gameu() +void gameu_handheld_game_state::init_gameu() { uint16_t *ROM = (uint16_t*)memregion("maincpu")->base(); int size = memregion("maincpu")->bytes(); @@ -617,9 +628,9 @@ void gameu_handheld_game_state::decrypt_gameu() } -void gameu_handheld_game_state::init_gameu() +void gameu_handheld_game_state::init_gameu50() { - decrypt_gameu(); + init_gameu(); // why do we need these? it will jump to 0 after the menu selection (prior to fadeout and bank select) otherwise, which can't be correct uint16_t *ROM = (uint16_t*)memregion("maincpu")->base(); @@ -639,7 +650,7 @@ void gameu_handheld_game_state::init_gameu() void gameu_handheld_game_state::init_gameu108() { - decrypt_gameu(); + init_gameu(); uint16_t *ROM = (uint16_t*)memregion("maincpu")->base(); @@ -660,6 +671,9 @@ CONS(2009, smartfp, 0, 0, base, smartfp, gcm394_game_state, empty_init, CONS(2009, smartfps, smartfp, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (Spain)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) CONS(2009, smartfpf, smartfp, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (France)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) // boxart simply has 'Smart Fit' +// skip the call at 6d47a to get it to show something +CONS(2008, fpsport, 0, 0, base, base, gcm394_game_state, empty_init, "Fisher-Price", "3-in-1 Smart Sports! (US)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) + // These are ports of the 'Family Sport' games to GPL16250 type hardware, but they don't seem to use many unSP 2.0 instructions. // The menu style is close to 'm505neo' but the game selection is closer to 'dnv200fs' (but without the Sports titles removed, and with a few other extras not found on that unit) CONS(201?, tkmag220, 0, 0, tkmag220, tkmag220, tkmag220_game_state, empty_init, "TaiKee / Senca", "Mini Arcade Games Console (Family Sport 220-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) @@ -683,5 +697,6 @@ CONS(2013, gormiti, 0, 0, base, gormiti, gormiti_game_state, empty_init, "Gio // unit looks a bit like a knock-off Wii-U tablet, but much smaller // was also available under other names, with different designs (PSP style) -CONS( 201?, gameu50, 0, 0, gameu, gameu, gameu_handheld_game_state, init_gameu, "YSN", "Play Portable Color GameU+ (50-in-1) (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +CONS( 201?, gameu50, 0, 0, gameu, gameu, gameu_handheld_game_state, init_gameu50, "YSN", "Play Portable Color GameU+ (50-in-1) (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +CONS( 201?, gameu90, 0, 0, gameu, gameu, gameu_handheld_game_state, init_gameu, "YSN", "Play Portable Color GameU+ (90-in-1) (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) CONS( 201?, gameu108, 0, 0, gameu, gameu, gameu_handheld_game_state, init_gameu108, "YSN", "Play Portable Color GameU+ (108-in-1) (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/tvgames/generalplus_gpl16250_spi.cpp b/src/mame/tvgames/generalplus_gpl16250_spi.cpp index 9c3785e794786..be00bdb60a868 100644 --- a/src/mame/tvgames/generalplus_gpl16250_spi.cpp +++ b/src/mame/tvgames/generalplus_gpl16250_spi.cpp @@ -148,6 +148,13 @@ ROM_START( anpanbd ) ROM_LOAD16_WORD_SWAP( "mx25l12835f.u2", 0x0000, 0x1000000, CRC(c4be09d7) SHA1(c9098d0c1c9db649a010f67469f500b69407372f) ) ROM_END +ROM_START( bk139in1 ) + ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) + //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only (if it exists at all) + + ROM_REGION(0x4000000, "maincpu", ROMREGION_ERASE00) + ROM_LOAD( "25q512.bin", 0x0000, 0x4000000, CRC(0cd111a4) SHA1(70553a44c3d946e5d23c09f04e0627a5dbaa3e4d) ) +ROM_END void generalplus_gpspispi_game_state::init_spi() { @@ -204,3 +211,15 @@ CONS(2015, prailpls, 0, 0, generalplus_gpspispi, gcm394, generalplus_gps CONS(2014, anpanbd, 0, 0, generalplus_gpspispi, gcm394, generalplus_gpspispi_game_state, init_spi, "JoyPalette", "Anpanman: Let's Go! Ikunou Drive (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) CONS(2015, bkrankp, 0, 0, generalplus_gpspispi_bkrankp, gcm394, generalplus_gpspispi_bkrankp_game_state, init_spi, "Bandai", "Karaoke Ranking Party (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) + +// This can be found listed as a ZHISHAN / Aojiao / Bornkid 32 Bit Preloaded 139-in-1 Handheld Game Console +// but these just seem to be brands, manufacturer is unknown. +// Various case styles are available, the unit here was styled after a Nintendo Switch +// +// Architecture is unknown, it contains many of the games in beijuehh / bornkidh (generalplus_gpl16250_rom.cpp) +// but is running from SPI flash and has 'Loading' screens between menus and after selecting a game. +// +// While those are GeneralPlus based platforms, it's possible the games were ported to something else, the SPI +// appears to contain a filesystem, but data looks to be compressed / encrypted with no obvious code. +// There is no GPspi header in the SPI ROM. +CONS(202?, bk139in1, 0, 0, generalplus_gpspispi, gcm394, generalplus_gpspispi_game_state, empty_init, "", "BornKid 32 Bit Preloaded 139-in-1 Handheld Game Console", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) diff --git a/src/mame/tvgames/spg2xx.cpp b/src/mame/tvgames/spg2xx.cpp index fdcd96040ab8a..5ef6fa3ef809b 100644 --- a/src/mame/tvgames/spg2xx.cpp +++ b/src/mame/tvgames/spg2xx.cpp @@ -485,6 +485,40 @@ static INPUT_PORTS_START( spg2xx ) // base structure for easy debugging / figuri PORT_DIPSETTING( 0x8000, "8000" ) INPUT_PORTS_END +static INPUT_PORTS_START( epo_tetr ) // all inputs verified against hidden test mode + PORT_INCLUDE( spg2xx ) + + PORT_MODIFY("P1") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 A") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 B") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 L") + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P1 R") + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0xfc00, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("P2") + PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("P3") + PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("EXTRA") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 L") + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("P2 R") + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 B") + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 A") + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + +INPUT_PORTS_END + static INPUT_PORTS_START( dmbtjunc ) PORT_INCLUDE( spg2xx ) @@ -2143,6 +2177,80 @@ void spg2xx_game_doraphone_state::doraphonep(machine_config &config) m_screen->set_refresh_hz(50); } + +void epo_tetr_game_state::machine_start() +{ + spg2xx_game_state::machine_start(); + + save_item(NAME(m_old_portb_data)); + save_item(NAME(m_old_portb_extra_latch)); +} + +void epo_tetr_game_state::machine_reset() +{ + spg2xx_game_state::machine_reset(); + + m_old_portb_data = 0; + m_old_portb_extra_latch = 0; +} + +uint16_t epo_tetr_game_state::epo_tetr_r(offs_t offset, uint16_t mem_mask) +{ + uint16_t data = 0; + + int eeprom = m_i2cmem->read_sda(); + data |= (eeprom << 1); + + int p2 = m_old_portb_extra_latch & 1; + data |= (p2 << 6); + + if (!machine().side_effects_disabled()) + logerror("%s: epo_tetr_r: %04x (%04x)\n", machine().describe_context(), data, mem_mask); + + return data; +} + +void epo_tetr_game_state::epo_tetr_portb_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + portb_w(offset, data, mem_mask); + + if (BIT(mem_mask, 0)) + m_i2cmem->write_scl(BIT(data, 0)); + if (BIT(mem_mask, 1)) + m_i2cmem->write_sda(BIT(data, 1)); + + if (BIT(mem_mask, 4)) + { + if ((BIT(data, 4)) && (!(BIT(m_old_portb_data, 4)))) + { + m_old_portb_extra_latch = m_ioextra->read(); + } + } + + if (BIT(mem_mask, 5)) + { + if ((BIT(data, 5)) && (!(BIT(m_old_portb_data, 5)))) + { + m_old_portb_extra_latch >>= 1; + } + } + + m_old_portb_data = data; +} + + +void epo_tetr_game_state::epo_tetr(machine_config& config) +{ + spg2xx(config); + + I2C_24C02(config, "i2cmem", 0); // S24CS02A + + m_maincpu->portb_in().set(FUNC(epo_tetr_game_state::epo_tetr_r)); + m_maincpu->portb_out().set(FUNC(epo_tetr_game_state::epo_tetr_portb_w)); +} + + + void spg2xx_game_ddr33v_state::init_ddr33v() { // what is this checking? timer? battery state? protection? it goes to a blank screen after the boot logo otherwise @@ -2428,6 +2536,12 @@ ROM_START( ban_krkk ) ROM_LOAD16_WORD_SWAP( "quiz.bin", 0x000000, 0x400000, CRC(6f51180a) SHA1(38017ecaae4eead38482aeb04c90b5a5eeebd6ca) ) ROM_END +ROM_START( epo_tetr ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "mx29lv320mb.bin", 0x000000, 0x400000, CRC(b4ad30e0) SHA1(83e30e199854c647f9a197562d1bf1f3bc847fff) ) +ROM_END + + ROM_START( prail ) ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "traingame.u1", 0x000000, 0x8000000, CRC(5c96d526) SHA1(cda0280b320762bda7a7358ec7ce29690aa815fb) ) @@ -2629,6 +2743,8 @@ CONS( 2006, dmbtjunc, 0, 0, spg2xx, dmbtjunc, spg2xx_game_state, // Let's!TVプレイ 脳と体を鍛える 体感頭脳ファミリーマットレ - Let's! TV Play branding appears on the box CONS( 2006, ban_krkk, 0, 0, spg2xx, ban_krkk, spg2xx_game_state, init_crc, "Bandai", "Let's! TV Play Nou to Karada o Kitaeru Taikan Zunou Family Mattore (Japan)", MACHINE_IMPERFECT_SOUND ) +CONS( 2007, epo_tetr, 0, 0, epo_tetr, epo_tetr, epo_tetr_game_state, empty_init, "Epoch", "Minna no Tetris (Japan)", MACHINE_IMPERFECT_SOUND ) + // Train Game V1.4 2012-08-15 on PCB. SPG243 headers in each chunk. // Last few bytes of SEEPROM have 'JUNGT' in them, is this developed by JungleSoft/JungleTac? CONS( 2012, prail, 0, 0, prail, prail, spg2xx_game_prail_state, empty_init, "Takara Tomy", "Boku wa Plarail Untenshi - Shinkansen de Ikou! (Japan)", MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/tvgames/spg2xx.h b/src/mame/tvgames/spg2xx.h index 4eceaca947be9..38a07adf142bc 100644 --- a/src/mame/tvgames/spg2xx.h +++ b/src/mame/tvgames/spg2xx.h @@ -237,11 +237,9 @@ class spg2xx_game_senwfit_state : public spg2xx_game_gssytts_state { } void init_senwfit(); -protected: +protected: virtual void portc_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; - -private: }; @@ -272,8 +270,6 @@ class spg2xx_game_fordrace_state : public spg2xx_game_state ioport_value wheel_r(); ioport_value wheel2_r(); - -private: }; @@ -308,10 +304,7 @@ class spg2xx_game_lexiart_state : public spg2xx_game_state void lexiart(machine_config &config); -protected: - private: - void mem_map_lexiart(address_map &map) ATTR_COLD; }; @@ -329,9 +322,7 @@ class spg2xx_game_ordentv_state : public spg2xx_game_state void init_jeuint(); protected: - uint16_t ordentv_portc_r(offs_t offset, uint16_t mem_mask = ~0); -private: }; class spg2xx_game_hotwheels_state : public spg2xx_game_state @@ -346,12 +337,10 @@ class spg2xx_game_hotwheels_state : public spg2xx_game_state void hotwheels(machine_config &config); protected: - uint16_t hotwheels_porta_r(offs_t offset, uint16_t mem_mask = ~0); virtual void porta_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; private: - uint16_t m_porta_dat_hot; required_ioport m_io_p1_extra; }; @@ -385,9 +374,30 @@ class spg2xx_game_ddr33v_state : public spg2xx_game_state { } void init_ddr33v(); +}; + +class epo_tetr_game_state : public spg2xx_game_state +{ +public: + epo_tetr_game_state(const machine_config &mconfig, device_type type, const char *tag) : + spg2xx_game_state(mconfig, type, tag), + m_ioextra(*this, "EXTRA") + { } + + void epo_tetr(machine_config &config); protected: + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD; + private: + uint16_t epo_tetr_r(offs_t offset, uint16_t mem_mask); + void epo_tetr_portb_w(offs_t offset, uint16_t data, uint16_t mem_mask); + + uint16_t m_old_portb_data; + uint16_t m_old_portb_extra_latch; + + required_ioport m_ioextra; }; class spg2xx_game_prail_state : public spg2xx_game_state @@ -407,6 +417,4 @@ class spg2xx_game_prail_state : public spg2xx_game_state required_device m_i2cmem; }; - - #endif // MAME_TVGAMES_SPG2XX_H diff --git a/src/mame/tvgames/trkfldch.cpp b/src/mame/tvgames/trkfldch.cpp index f10b202dce68c..054917627c208 100644 --- a/src/mame/tvgames/trkfldch.cpp +++ b/src/mame/tvgames/trkfldch.cpp @@ -1642,6 +1642,12 @@ ROM_START( lexitvsprt ) ROM_LOAD( "29l3211.u2a", 0x000000, 0x400000, CRC(65e5223c) SHA1(13eae6e34100fb9761335e87a3cf728bb31e860f) ) ROM_END +ROM_START( senspid ) + ROM_REGION( 0x1000000, "maincpu", 0 ) + ROM_LOAD( "spidermanmat.bin", 0x00000, 0x400000, CRC(11f5181c) SHA1(7f0d5d34f924b6a7182102451a2ac1cc41e575b0) ) +ROM_END + + /* Included with Orange model @@ -1735,6 +1741,9 @@ CONS( 2006, my1stddr, 0, 0, trkfldch, my1stddr,trkfldch_state, e 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 ) +// don't have a picture of the box, title screen doesn't give a more complete title, I/O seems closer lexitvsprt +CONS( 2007, senspid, 0, 0, trkfldch, trkfldch,trkfldch_state, empty_init, "Senario", "The Amazing Spider-Man (Senario, floor mat)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) + // additional online content could be downloaded onto these if they were connected to a PC via USB CONS( 2008, teleshi, 0, 0, trkfldch, konsb, trkfldch_state, empty_init, "Konami", "Teleshibai (Japan)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // テレしばい - this one is orange