new NOT WORKING machines (#7049)

* new NOT WORKING machines
-----
PCP 8728 - 788 in 1 [David Shah]
unknown unSP based handheld [unknown]

* new NOT WORKING machines
------
Virtual Ping Pong (Protocol) [Sean Riddle, David Haywood]
My Arcade Gamer Mini 160-in-1 (DGUN-2953) [Sean Riddle, David Haywood]
This commit is contained in:
David Haywood 2020-08-12 13:17:18 +01:00 committed by GitHub
parent 1e1e12523d
commit bcb1d091c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 259 additions and 86 deletions

View File

@ -4004,6 +4004,7 @@ files {
MAME_DIR .. "src/mame/machine/generalplus_gpl16250.cpp",
MAME_DIR .. "src/mame/machine/generalplus_gpl16250.h",
MAME_DIR .. "src/mame/drivers/generalplus_gpl32612.cpp",
MAME_DIR .. "src/mame/drivers/generalplus_gpl_unknown.cpp",
MAME_DIR .. "src/mame/drivers/xavix.cpp",
MAME_DIR .. "src/mame/includes/xavix.h",
MAME_DIR .. "src/mame/drivers/xavix_2000.cpp",
@ -4029,8 +4030,7 @@ files {
MAME_DIR .. "src/mame/machine/xavix2002_io.h",
MAME_DIR .. "src/mame/drivers/xavix2.cpp",
MAME_DIR .. "src/mame/drivers/titan_soc.cpp",
MAME_DIR .. "src/mame/drivers/unkmandd.cpp",
MAME_DIR .. "src/mame/drivers/bbl380.cpp",
MAME_DIR .. "src/mame/drivers/unk6502_st2xxx.cpp",
MAME_DIR .. "src/mame/drivers/actions_atj2279b.cpp",
MAME_DIR .. "src/mame/drivers/pubint_storyreader.cpp",
MAME_DIR .. "src/mame/drivers/magiceyes_pollux_vr3520f.cpp",

View File

@ -0,0 +1,192 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
// pcp8718 contains unsp code, but no obvious startup code / vectors, so it's probably booting from another device / bootstrapped
// these contain the same game selection as the games in unk6502_st2xxx.cpp but on updated hardware
// These use SPI ROMs and unSP2.0 instructions, so will be GeneralPlus branded parts, not SunPlus
// possibly the framebuffer based video ones rather than the ones with tile layers
/*
for pcp8728 long jumps are done indirect via a call to RAM
990c 20ec r4 = 20ec
d9dd [1d] = r4
990c 0007 r4 = 0007
d9de [1e] = r4
fe80 28f7 goto 0028f7
this suggests the ROM gets copied to RAM at 0x20000, as all offsets need to be adjusted by that (or the device can see SPI directly at 0x20000)
this is logical for unSP2.0 based devices as the CS area typically starts at 0x20000 with everything below that being internal space for internal RAM/ROM/peripherals
*/
#include "emu.h"
#include "screen.h"
#include "emupal.h"
#include "speaker.h"
#include "cpu/unsp/unsp.h"
class pcp8718_state : public driver_device
{
public:
pcp8718_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_mainram(*this, "mainram"),
m_palette(*this, "palette"),
m_screen(*this, "screen")
{ }
void pcp8718(machine_config &config);
private:
virtual void machine_start() override;
virtual void machine_reset() override;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<unsp_20_device> m_maincpu;
required_shared_ptr<uint16_t> m_mainram;
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
void map(address_map &map);
uint16_t simulate_28f7_r();
};
uint32_t pcp8718_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
return 0;
}
void pcp8718_state::machine_start()
{
}
static INPUT_PORTS_START( pcp8718 )
INPUT_PORTS_END
void pcp8718_state::map(address_map &map)
{
// there are calls to 01xxx and 02xxx regions
// (RAM populated by internal ROM?, TODO: check to make sure code copied there isn't from SPI ROM like the GPL16250 bootstrap
// does from NAND, it doesn't seem to have a header in the same format at least)
map(0x000000, 0x006fff).ram().share("mainram");
// registers at 7xxx are similar to GPL16250, but not identical? (different video system?)
// there are calls to 0x0f000 (internal ROM?)
map(0x008000, 0x00ffff).rom().region("maincpu", 0x00000);
// seems to have same memory config registers etc. as GPL16250 so CS Space starts at 0x020000 and the 'bank' is likely at 0x200000 too
map(0x020000, 0x3fffff).rom().region("spi", 0x00000);
}
uint16_t pcp8718_state::simulate_28f7_r()
{
// jumps to 28f7 act as a long jump to the address stored in 1d/1e
// (or possibly a data copy + execute??)
if (!machine().side_effects_disabled())
{
uint16_t pc = m_maincpu->state_int(UNSP_PC);
uint16_t sr = m_maincpu->state_int(UNSP_SR);
int realpc = (pc | (sr << 16)) & 0x003fffff;
if (realpc == 0x28f7)
{
address_space& mem = m_maincpu->space(AS_PROGRAM);
int newpc = mem.read_word(0x001d);
int newds = mem.read_word(0x001e);
sr &= 0xfff0;
sr |= (newds & 0x003f);
m_maincpu->set_state_int(UNSP_PC, newpc);
m_maincpu->set_state_int(UNSP_SR, sr);
}
}
return m_mainram[0x28f7];
}
void pcp8718_state::machine_reset()
{
// this looks like it might actually be part of the IRQ handler (increase counter at 00 at the very start) rather than where we should end up after startup
// it also looks like (from the pc = 2xxx opcodes) that maybe this code should be being executed in RAM as those don't give correct offsets in the data segment.
m_maincpu->set_state_int(UNSP_PC, 0x0042);
m_maincpu->set_state_int(UNSP_SR, 0x0002);
uint16_t* ROM = (uint16_t*)memregion("maincpu")->base();
ROM[0x7000] = 0x9a90; // retf from internal ROM call to 0xf000 (unknown purpose)
// there doesn't appear to be any code to set the SP, so it must be done by the internal ROM
m_maincpu->set_state_int(UNSP_SP, 0x5fff);
address_space& mem = m_maincpu->space(AS_PROGRAM);
mem.write_word(0x2a46, 0x9a90); // retf from RAM call (unknown purpose)
mem.write_word(0x28f7, 0xf165); // goto to RAM, for long jump / call (simulated), could also be 'copy code at this address into RAM to execute'
m_maincpu->space(AS_PROGRAM).install_read_handler(0x28f7, 0x28f7, read16smo_delegate(*this, FUNC(pcp8718_state::simulate_28f7_r)));
}
void pcp8718_state::pcp8718(machine_config &config)
{
UNSP_20(config, m_maincpu, 20000000); // unknown CPU, unsp20 based
m_maincpu->set_addrmap(AS_PROGRAM, &pcp8718_state::map);
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
m_screen->set_size(64*8, 32*8);
m_screen->set_visarea(0*8, 40*8-1, 0*8, 30*8-1);
m_screen->set_screen_update(FUNC(pcp8718_state::screen_update));
m_screen->set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x200);
}
ROM_START( pcp8718 )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x000000, 0x10000, NO_DUMP ) // exact size unknown
ROM_REGION16_BE( 0x800000, "spi", ROMREGION_ERASEFF )
ROM_LOAD16_WORD_SWAP( "8718_en25f32.bin", 0x000000, 0x400000, CRC(cc138db4) SHA1(379af3d94ae840f52c06416d6cf32e25923af5ae) ) // dump needs verifying, dumper mentioned it was possibly bad (unit failed in process)
ROM_END
ROM_START( pcp8728 )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x000000, 0x10000, NO_DUMP ) // exact size unknown
ROM_REGION16_BE( 0x800000, "spi", ROMREGION_ERASEFF )
ROM_LOAD16_WORD_SWAP( "pcp 8728 788 in 1.bin", 0x000000, 0x400000, CRC(60115f21) SHA1(e15c39f11e442a76fae3823b6d510178f6166926) )
ROM_END
ROM_START( unkunsp )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x000000, 0x10000, NO_DUMP ) // exact size unknown
ROM_REGION16_BE( 0x800000, "spi", ROMREGION_ERASEFF )
ROM_LOAD16_WORD_SWAP( "fm25q16a.bin", 0x000000, 0x200000, CRC(aeb472ac) SHA1(500c24b725f6d3308ef8cbdf4259f5be556c7c92) )
ROM_END
CONS( 200?, pcp8718, 0, 0, pcp8718, pcp8718, pcp8718_state, empty_init, "PCP", "PCP 8718 - 788 in 1", MACHINE_IS_SKELETON ) // "HD 360 degrees rocker palm eyecare console"
CONS( 200?, pcp8728, 0, 0, pcp8718, pcp8718, pcp8718_state, empty_init, "PCP", "PCP 8728 - 788 in 1", MACHINE_IS_SKELETON )
CONS( 200?, unkunsp, 0, 0, pcp8718, pcp8718, pcp8718_state, empty_init, "<unknown>", "unknown unSP based handheld", MACHINE_IS_SKELETON )

View File

@ -120,6 +120,8 @@ public:
void vt_external_space_map_1mbyte(address_map& map);
void vt_external_space_map_512kbyte(address_map& map);
void init_protpp();
protected:
required_device<nes_vt_soc_device> m_soc;
@ -135,6 +137,7 @@ public:
{ }
void nes_vt_vh2009(machine_config& config);
void nes_vt_vh2009_1mb(machine_config& config);
void nes_vt_vh2009_4mb(machine_config& config);
void nes_vt_vh2009_8mb(machine_config& config);
@ -1298,6 +1301,12 @@ void nes_vt_swap_op_d5_d6_state::nes_vt_vh2009(machine_config &config)
//m_soc->set_default_palette_mode(PAL_MODE_NEW_VG); // gives better title screens, but worse ingame, must be able to switch
}
void nes_vt_swap_op_d5_d6_state::nes_vt_vh2009_1mb(machine_config& config)
{
nes_vt_vh2009(config);
m_soc->set_addrmap(AS_PROGRAM, &nes_vt_swap_op_d5_d6_state::vt_external_space_map_1mbyte);
}
void nes_vt_swap_op_d5_d6_state::nes_vt_vh2009_4mb(machine_config& config)
{
nes_vt_vh2009(config);
@ -1835,6 +1844,7 @@ ROM_END
ROM_START( dgun2573 ) // this one lacked a DreamGear logo but was otherwise physically identical, is it a clone product or did DreamGear drop the logo in favor of just using the 'My Arcade' brand?
ROM_REGION( 0x2000000, "mainrom", 0 )
ROM_LOAD( "myarcadegamerportable_s29gl256p10tfi01_0001227e.bin", 0x00000, 0x2000000, CRC(8f8c8da7) SHA1(76a18458922e39abe1982f05f184babb5e65acf2) )
@ -1905,6 +1915,12 @@ ROM_START( techni4 )
ROM_LOAD( "technigame.bin", 0x00000, 0x200000, CRC(3c96b1b1) SHA1(1acc81b26e740327bd6d9faa5a96ab027a48dd77) )
ROM_END
ROM_START( protpp )
ROM_REGION( 0x100000, "mainrom", 0 )
ROM_LOAD( "vpingpong_s29al008d70tfi02_0001225b.bin", 0x00000, 0x100000, CRC(8cf46272) SHA1(298a6341d26712ec1f282e7514e995a7af5ac012) )
ROM_END
ROM_START( unkra200 ) // "Winbond 25Q64FVSIG 1324" SPI ROM
ROM_REGION( 0x800000, "mainrom", 0 )
ROM_LOAD( "retro_machine_rom", 0x00000, 0x800000, CRC(0e824aa7) SHA1(957e98868559ecc22b3fa42c76692417b76bf132) )
@ -1972,6 +1988,26 @@ void nes_vt_cy_lexibook_state::init_lxcmcypp()
}
}
void nes_vt_state::init_protpp()
{
// this gets the tiles correct
u8 *src = memregion("mainrom")->base();
int len = memregion("mainrom")->bytes();
std::vector<u8> buffer(len);
{
for (int i = 0; i < len; i++)
{
buffer[i] = bitswap<8>(src[i],3,1,2,0,7,5,6,4);
}
std::copy(buffer.begin(), buffer.end(), &src[0]);
}
}
// earlier version of vdogdemo
CONS( 200?, vdogdeme, 0, 0, nes_vt_1mb, nes_vt, nes_vt_state, empty_init, "VRT", "V-Dog (prototype, earlier)", MACHINE_NOT_WORKING )
@ -2104,6 +2140,8 @@ CONS( 200?, silv35, 0, 0, nes_vt_vh2009_4mb, nes_vt, nes_vt_swap_op_
// 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 )
// seems to use PCM for all sound, some garbage at bottom of screen, needs correct inputs (seems to respond to start, and any direction input for 'hit' - check if they're power related)
CONS( 200?, protpp, 0, 0, nes_vt_vh2009_1mb, nes_vt, nes_vt_swap_op_d5_d6_state, init_protpp, "Protocol", "Virtual Ping Pong (Protocol)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
// same encryption as above, but seems like newer hardware (or the above aren't using most of the features)
CONS( 200?, lpgm240, 0, 0, nes_vt_vh2009_8mb, nes_vt, nes_vt_swap_op_d5_d6_state, empty_init, "<unknown>", "Let's Play! Game Machine 240 in 1", MACHINE_NOT_WORKING ) // mini 'retro-arcade' style cabinet

View File

@ -1655,7 +1655,6 @@ ROM_END
ROM_START( ablkickb )
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "ablkickboxing.bin", 0x000000, 0x800000, CRC(61394c45) SHA1(291d28a39edcb32a8f5d776a5e5c05e6fd0abece) )
ROM_LOAD16_WORD_SWAP( "fm25q16a.bin", 0x800000, 0x200000, CRC(aeb472ac) SHA1(500c24b725f6d3308ef8cbdf4259f5be556c7c92) )
ROM_END
ROM_START( lxspidaj )

View File

@ -1,9 +1,13 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
// unknown 6502 based handhelds, possibly ST2205U architecture
// the BBL 380 - 180 in 1 features similar menus / presentation / games to the 'ORB Gaming Retro Arcade Pocket Handheld Games Console with 153 Games' (eg has Matchstick Man, Gang Tie III etc.)
// https://www.youtube.com/watch?v=NacY2WHd-CY
// these games were ported to unSP hardware at some point, see generaplus_gpl_unknown.cpp
// BIOS calls are made very frequently to the undumped firmware.
// The most common call ($6058 in bbl380, $6062 in ragc153 & dphh8630) seems to involve downloading a snippet of code from Flash and executing it from RAM.
// A variant of this call ($60d2 in bbl380, $60e3 in ragc153 & dphh8630) is invoked with jsr.
@ -127,6 +131,12 @@ ROM_START( dphh8630 )
ROM_LOAD( "bg25q16.bin", 0x000000, 0x200000, CRC(277850d5) SHA1(740087842e1e63bf99b4ca9c1b2053361f267269) )
ROM_END
ROM_START( dgun2953 )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "dgun2953_st2205u.bin", 0x000000, 0x004000, NO_DUMP ) // internal OTPROM BIOS
ROM_LOAD( "dg160_25x32v_ef3016.bin", 0x000000, 0x400000, CRC(2e993bac) SHA1(4b310e326a47df1980aeef38aa9a59018d7fe76f) )
ROM_END
void bbl380_state::init_ragc153()
@ -142,4 +152,6 @@ void bbl380_state::init_ragc153()
CONS( 200?, bbl380, 0, 0, bbl380, bbl380, bbl380_state, empty_init, "BaoBaoLong", "BBL380 - 180 in 1", MACHINE_IS_SKELETON )
CONS( 200?, ragc153, 0, 0, bbl380, bbl380, bbl380_state, init_ragc153, "Orb", "Retro Arcade Game Controller 153-in-1", MACHINE_IS_SKELETON )
CONS( 200?, dphh8630, 0, 0, bbl380, bbl380, bbl380_state, init_ragc153, "<unknown>", "Digital Pocket Hand Held System Model: 8630 - 230-in-1", MACHINE_IS_SKELETON )
CONS( 200?, dphh8630, 0, 0, bbl380, bbl380, bbl380_state, init_ragc153, "PCP", "PCP 8630 - 230-in-1 - Digital Pocket Hand Held System", MACHINE_IS_SKELETON ) // PCP isn't mentioned on packaging
CONS( 200?, dgun2953, 0, 0, bbl380, bbl380, bbl380_state, init_ragc153, "dreamGEAR", "My Arcade Gamer Mini 160-in-1 (DGUN-2953)", MACHINE_IS_SKELETON )

View File

@ -1,72 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
// unkmandd contains unsp code, but no obvious startup code / vectors, so it's probably booting from another device / bootstrapped
#include "emu.h"
#include "screen.h"
#include "emupal.h"
#include "speaker.h"
class unkmandd_state : public driver_device
{
public:
unkmandd_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_palette(*this, "palette"),
m_screen(*this, "screen")
{ }
void unkmandd(machine_config &config);
private:
virtual void machine_start() override;
virtual void machine_reset() override;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
};
uint32_t unkmandd_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
return 0;
}
void unkmandd_state::machine_start()
{
}
void unkmandd_state::machine_reset()
{
}
static INPUT_PORTS_START( unkmandd )
INPUT_PORTS_END
void unkmandd_state::unkmandd(machine_config &config)
{
// unknown CPU, unsp based
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
m_screen->set_size(64*8, 32*8);
m_screen->set_visarea(0*8, 40*8-1, 0*8, 30*8-1);
m_screen->set_screen_update(FUNC(unkmandd_state::screen_update));
m_screen->set_palette(m_palette);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x200);
}
ROM_START( unkmandd )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "8718_en25f32.bin", 0x000000, 0x400000, CRC(cc138db4) SHA1(379af3d94ae840f52c06416d6cf32e25923af5ae) )
ROM_END
CONS( 200?, unkmandd, 0, 0, unkmandd, unkmandd, unkmandd_state, empty_init, "M&D", "unknown M&D handheld", MACHINE_IS_SKELETON )

View File

@ -3302,11 +3302,6 @@ mechattj // A8002 'MA' (c) 1989
mechattu // A8002 'MA' (c) 1989
mechattu1 // A8002 'MA' (c) 1989
@source:bbl380.cpp
bbl380
ragc153
dphh8630
@source:bcs3.cpp
bcs3 //
bcs3a //
@ -14777,6 +14772,11 @@ suprpokr // (c) 1986 Grayhound Electronics
suprpokra // (c) 1986 Grayhound Electronics
suprpokrb // (c) 1986 Grayhound Electronics
@source:generalplus_gpl_unknown.cpp
pcp8718
pcp8728
unkunsp
@source:generalplus_gpl16250_mobigo.cpp
mobigo
mobigos
@ -32149,6 +32149,7 @@ majgnc
sudopptv
zudugo
ablping
protpp
vgpocket
vgpmini
sy889
@ -40773,12 +40774,15 @@ uts20 //
@source:unixpc.cpp
3b1 // 3B1 "Unix PC"
@source:unk6502_st2xxx.cpp
bbl380
ragc153
dphh8630
dgun2953
@source:unkhorse.cpp
unkhorse //
@source:unkmandd.cpp
unkmandd
@source:unkpoker.cpp
unkpoker //

View File

@ -107,7 +107,6 @@ basic52.cpp
basssta.cpp
bbc.cpp
bbcbc.cpp
bbl380.cpp
bcs3.cpp
bebox.cpp
bert.cpp
@ -330,6 +329,7 @@ gamemachine.cpp
gamepock.cpp
gb.cpp
gba.cpp
generalplus_gpl_unknown.cpp
generalplus_gpl16250.cpp
generalplus_gpl16250_mobigo.cpp
generalplus_gpl16250_nand.cpp
@ -1037,7 +1037,7 @@ unior.cpp
unistar.cpp
univac.cpp
unixpc.cpp
unkmandd.cpp
unk6502_st2xxx.cpp
ut88.cpp
uzebox.cpp
v100.cpp