diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 07662720128..33ced0d6c69 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3059,6 +3059,7 @@ files { MAME_DIR .. "src/mame/machine/vt1682_alu.cpp", MAME_DIR .. "src/mame/machine/vt1682_timer.h", MAME_DIR .. "src/mame/machine/vt1682_timer.cpp", + MAME_DIR .. "src/mame/drivers/vt_unknown.cpp", MAME_DIR .. "src/mame/drivers/compmahj.cpp", } diff --git a/src/mame/drivers/spg2xx_wiwi.cpp b/src/mame/drivers/spg2xx_wiwi.cpp index d1a6b3fe927..9e1b900f377 100644 --- a/src/mame/drivers/spg2xx_wiwi.cpp +++ b/src/mame/drivers/spg2xx_wiwi.cpp @@ -1,10 +1,18 @@ // license:BSD-3-Clause // copyright-holders:Ryan Holtz, David Haywood -// These all have some kind of startup check -// the Virtual Interactive 'Vi' probably also fits here -// -// The WiWi could also run NES games; SunPlus hardware was in the cartridge, it was a 'fake' system. +/* These all have some kind of startup check + the Virtual Interactive 'Vi' probably also fits here + + The WiWi could also run NES games; SunPlus hardware was in the cartridge, it was a 'fake' system. + + --- + + some of these are just checking a external timer on a port, I think this is one of the SPG features + so might need making more generic. +*/ + + #include "emu.h" #include "includes/spg2xx.h" @@ -71,6 +79,23 @@ protected: virtual void portb_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; }; +class spg2xx_game_ddmsup_state : public spg2xx_game_marc101_state +{ +public: + spg2xx_game_ddmsup_state(const machine_config &mconfig, device_type type, const char *tag) : + spg2xx_game_marc101_state(mconfig, type, tag) + { } + + void ddmsup(machine_config &config); + +protected: + +// virtual uint16_t portb_r(); + virtual void porta_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; +// virtual void portb_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; +}; + + class spg2xx_game_marc250_state : public spg2xx_game_marc101_state { public: @@ -183,6 +208,17 @@ void spg2xx_game_guitrbus_state::guitrbus(machine_config &config) m_maincpu->portb_out().set(FUNC(spg2xx_game_guitrbus_state::portb_w)); } +void spg2xx_game_ddmsup_state::ddmsup(machine_config &config) +{ + spg2xx(config); + +// m_maincpu->portb_in().set(FUNC(spg2xx_game_ddmsup_state::portb_r)); + m_maincpu->porta_in().set(FUNC(spg2xx_game_ddmsup_state::porta_r)); + m_maincpu->porta_out().set(FUNC(spg2xx_game_ddmsup_state::porta_w)); +// m_maincpu->portb_out().set(FUNC(spg2xx_game_ddmsup_state::portb_w)); +} + + // are these Port A behaviors related to IO A Special mode on the SoC? // the bits being tested do seem to be 'ExtClk2 / ExtClk1' @@ -364,6 +400,34 @@ void spg2xx_game_marc250_state::porta_w(offs_t offset, uint16_t data, uint16_t m m_prev_porta = data; } +void spg2xx_game_ddmsup_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + logerror("%s: porta_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask, + (mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x', + (mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x', + (mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x', + (mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x', + (mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x', + (mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x', + (mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x', + (mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x', + (mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x', + (mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x', + (mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x', + (mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x', + (mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x', + (mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x', + (mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x', + (mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x'); + + if (data & 0x4000) + { + m_pulse_timer->adjust(attotime::from_hz(6), 0, attotime::from_hz(6)); + } + + m_prev_porta = data; +} + static INPUT_PORTS_START( wiwi18 ) PORT_START("P1") @@ -614,6 +678,40 @@ static INPUT_PORTS_START( guitrbus ) INPUT_PORTS_END + + +static INPUT_PORTS_START( ddmsup ) + PORT_START("P1") + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("P1 Pad Up") PORT_16WAY // NOT A JOYSTICK!! + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("P1 Pad Left") PORT_16WAY + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("P1 Pad Right") PORT_16WAY + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("P1 Pad Down") PORT_16WAY + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Back") + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select") + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Pad Up-Left") + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Pad Up-Right") + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P1 Pad Down-Left") + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P1 Pad Down-Right") + PORT_BIT( 0x1c00, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_UNUSED ) // must toggle at rate measured by code for ddmsup + PORT_BIT( 0xc000, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("P2") + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("P2 Pad Up") PORT_PLAYER(2) PORT_16WAY // NOT A JOYSTICK!! + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("P2 Pad Left") PORT_PLAYER(2) PORT_16WAY + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("P2 Pad Right") PORT_PLAYER(2) PORT_16WAY + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("P2 Pad Down") PORT_PLAYER(2) PORT_16WAY + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P2 Pad Up-Left") PORT_PLAYER(2) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P2 Pad Up-Right") PORT_PLAYER(2) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P2 Pad Down-Left") PORT_PLAYER(2) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P2 Pad Down-Right") PORT_PLAYER(2) + PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("P3") + PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + + void spg2xx_game_wiwi18_state::init_wiwi18() { // workaround for security checks on startup @@ -893,6 +991,17 @@ ROM_START( guitrbus ) ROM_LOAD16_WORD_SWAP( "winfunguitar.bin", 0x000000, 0x400000, CRC(17419a27) SHA1(19377fcd18b08d3ae8e20de0244b3aaef1b5a66a) ) ROM_END +ROM_START( ddmsup ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "dancemaniasupreme.bin", 0x000000, 0x800000, CRC(4066a36b) SHA1(1fc8553b03b81bc02c3fcbcdafa2e54d1f2c2306) ) +ROM_END + +ROM_START( ddmmeg12 ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "doubledancemania.bin", 0x000000, 0x800000, CRC(fcffb21e) SHA1(802a3c2d6bcbd729b9a483d42d912ca8b9abdccd) ) +ROM_END + + // box marked 'Wireless game console' 'Drahtlose Spielekonsole' 87 Sports games included : 18 hyper sports games, 69 arcade games. // Unit marked 'Hamy System' 'WiWi' // actually a cartridge, but all hardware is in the cart, overriding any internal hardware entirely. see nes_vt.cp 'mc_sp69' for the '69 arcade game' part @@ -906,6 +1015,10 @@ CONS( 200?, foxsport, 0, 0, rad_skat, wiwi18, spg2xx_game_wiwi18_state, CONS( 2014, marc101, 0, 0, marc101, m489, spg2xx_game_marc101_state, empty_init, "Millennium 2000 GmbH", "Millennium Arcade 101 (M489) (Game Station 2 101-in-1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 200?, ddmsup, 0, 0, ddmsup, ddmsup, spg2xx_game_ddmsup_state, empty_init, "Senario", "Double Dance Mania: Supreme / Dance Supreme", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // titlescreen is just 'Dance Supreme' + +CONS( 200?, ddmmeg12, 0, 0, ddmsup, ddmsup, spg2xx_game_ddmsup_state, empty_init, "Senario", "Double Dance Mania: Mega 12", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) + CONS( 2015, marc250, 0, 0, marc101, m489, spg2xx_game_marc250_state, init_m527, "Millennium 2000 GmbH", "Millennium Arcade 250 (M527)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // has the following strings at the start of the ROM diff --git a/src/mame/drivers/vt_unknown.cpp b/src/mame/drivers/vt_unknown.cpp new file mode 100644 index 00000000000..63c45fa8fb0 --- /dev/null +++ b/src/mame/drivers/vt_unknown.cpp @@ -0,0 +1,103 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood + +// unknown platform capable of running high resolution NES games (VT268?) + +// is the dump good? can't locate any code, some 0x80000 blocks have what might be vectors at the end, but non-standard? + +#include "emu.h" + +#include "cpu/m6502/m6502.h" +#include "screen.h" +#include "emupal.h" +#include "speaker.h" + +class vt_unknown_state : public driver_device +{ +public: + vt_unknown_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_palette(*this, "palette"), + m_screen(*this, "screen"), + m_gfxdecode(*this, "gfxdecode") + { } + + void vt_unknown(machine_config &config); + +private: + virtual void machine_start() override; + virtual void machine_reset() override; + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void vt_unknown_map(address_map &map); + + required_device m_maincpu; + required_device m_palette; + required_device m_screen; + required_device m_gfxdecode; +}; + +uint32_t vt_unknown_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +void vt_unknown_state::machine_start() +{ +} + +void vt_unknown_state::machine_reset() +{ +} + +void vt_unknown_state::vt_unknown_map(address_map &map) +{ + map(0x000000, 0xffff).rom().region("maincpu", 0); +} + +static INPUT_PORTS_START( vt_unknown ) +INPUT_PORTS_END + + +static const gfx_layout test_layout = +{ + 8,8, + RGN_FRAC(1,1), + 8, + { 0 }, + { STEP8(0,1) }, + { STEP8(0,8*1) }, + 8 * 1 * 8 +}; + +static GFXDECODE_START( gfx_test ) + GFXDECODE_ENTRY( "maincpu", 0, test_layout, 0x0, 1 ) +GFXDECODE_END + + +void vt_unknown_state::vt_unknown(machine_config &config) +{ + M6502(config, m_maincpu, 8000000); // unknown, assumed to be a 6502 based CPU as it has NES games, but could be emulating them (like the S+Core units, assuming this isn't one) + m_maincpu->set_addrmap(AS_PROGRAM, &vt_unknown_state::vt_unknown_map); + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); + m_screen->set_refresh_hz(60); + m_screen->set_size(300, 262); + m_screen->set_visarea(0, 256-1, 0, 240-1); + m_screen->set_screen_update(FUNC(vt_unknown_state::screen_update)); + + PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x200); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_test); +} + +ROM_START( dgun2572 ) + ROM_REGION( 0x2000000, "maincpu", 0 ) // extra pins on subboard not marked, is this a good dump? + ROM_LOAD( "dreamgearwgun.bin", 0x00000, 0x2000000, CRC(92b55c75) SHA1(c7b2319e304a4bf480b5dcd4f24af2e6ba834d0d) ) +ROM_END + + +CONS( 201?, dgun2572, 0, 0, vt_unknown, vt_unknown, vt_unknown_state, empty_init, "dreamGEAR", "My Arcade Wireless Video Game Station 200-in-1 (DGUN-2572)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index d6521bd5e5b..94e21cd8a07 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -32207,25 +32207,6 @@ ablmini senwld zonefusn -@source:vt1682.cpp -ii8in1 -ii32in1 -zone7in1 -zone7in1p -dance555 -miwi2_16 -miwi2_7 -intact89 -intg5410 -exsprt48 -itvg48 -xing48 -wowwg -110dance -lxts3 -unk1682 -njp60in1 - @source:newbrain.cpp newbrain // newbraina // @@ -38188,6 +38169,8 @@ lexifit marc101 marc250 guitrbus +ddmsup +ddmmeg12 @source:spg2xx_zone.cpp wirels60 // Wireless 60 @@ -41327,6 +41310,28 @@ vstennisb // (c) 1984 Nintendo Co., Ltd. / Nintendo of Ame vstetris // (c) 1988 Atari wrecking // (c) 1984 Nintendo +@source:vt_unknown.cpp +dgun2572 + +@source:vt1682.cpp +ii8in1 +ii32in1 +zone7in1 +zone7in1p +dance555 +miwi2_16 +miwi2_7 +intact89 +intg5410 +exsprt48 +itvg48 +xing48 +wowwg +110dance +lxts3 +unk1682 +njp60in1 + @source:vt52.cpp vt52 // 1975 Digital Equipment Corporation diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 3af43bc3cab..c8adf795ce3 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -1069,6 +1069,7 @@ vp60.cpp vsmile.cpp vsmileb.cpp vsmilepro.cpp +vt_unknown.cpp vt100.cpp vt1682.cpp vt220.cpp