diff --git a/hash/super_tv_pc_cart.xml b/hash/super_tv_pc_cart.xml index 0f4f59d3788a4..1c3d31e1802f4 100644 --- a/hash/super_tv_pc_cart.xml +++ b/hash/super_tv_pc_cart.xml @@ -40,8 +40,7 @@ license:CC0-1.0 - - + diff --git a/src/devices/cpu/m6502/oxavix.lst b/src/devices/cpu/m6502/oxavix.lst index 9d3c0dcfe955d..84caf0a2277b2 100644 --- a/src/devices/cpu/m6502/oxavix.lst +++ b/src/devices/cpu/m6502/oxavix.lst @@ -4,7 +4,7 @@ callf_xa3 read_stack(SP); - write_special_stack(get_codebank()); + write_special_stack(SP, get_codebank()); dec_special_stack(); TMP2 = read_pc(); PC++; @@ -40,7 +40,7 @@ retf_imp inc_SP(); PC = set_h(PC, read_stack(SP)); inc_special_stack(); - TMP2 = read_special_stack(); + TMP2 = read_special_stack(SP); set_codebank(TMP2); read_pc(); PC++; @@ -55,7 +55,7 @@ brk_xav_imp read_pc(); PC++; } - write_special_stack(get_codebank()); + write_special_stack(SP, get_codebank()); set_codebank(0x00); // epo_efdx, rad_ping and rad_mtrk strongly suggest that interrupts must force bank 0 as code jumps to a ROM pointer stored earlier / a fixed pointer to a rom address in bank 0 dec_special_stack(); write_stack(SP, PC >> 8); @@ -123,7 +123,7 @@ rti_xav_imp inc_SP(); PC = set_h(PC, read_stack(SP)); inc_special_stack(); - TMP2 = read_special_stack(); + TMP2 = read_special_stack(SP); set_codebank(TMP2); prefetch(); diff --git a/src/devices/cpu/m6502/xavix.cpp b/src/devices/cpu/m6502/xavix.cpp index b97bd9999a07b..bf5eb25b92522 100644 --- a/src/devices/cpu/m6502/xavix.cpp +++ b/src/devices/cpu/m6502/xavix.cpp @@ -106,24 +106,52 @@ xavix_device::mi_xavix::mi_xavix(xavix_device *_base) base = _base; } -void xavix_device::write_special_stack(uint8_t data) +void xavix_device::write_special_stack(uint32_t addr, uint8_t data) { - m_special_stack[m_special_stackpos&0xff] = data; + if (m_use_private_stack_for_extra_callf_byte) + { + m_special_stack[m_special_stackpos & 0xff] = data; + } + else + { + write_stack(addr, data); + } } void xavix_device::dec_special_stack() { - m_special_stackpos--; + if (m_use_private_stack_for_extra_callf_byte) + { + m_special_stackpos--; + } + else + { + dec_SP(); + } } void xavix_device::inc_special_stack() { - m_special_stackpos++; + if (m_use_private_stack_for_extra_callf_byte) + { + m_special_stackpos++; + } + else + { + inc_SP(); + } } -uint8_t xavix_device::read_special_stack() +uint8_t xavix_device::read_special_stack(uint32_t addr) { - return m_special_stack[m_special_stackpos&0xff]; + if (m_use_private_stack_for_extra_callf_byte) + { + return m_special_stack[m_special_stackpos & 0xff]; + } + else + { + return read_stack(addr); + } } diff --git a/src/devices/cpu/m6502/xavix.h b/src/devices/cpu/m6502/xavix.h index 1afa58d365cbe..5363bb77d3660 100644 --- a/src/devices/cpu/m6502/xavix.h +++ b/src/devices/cpu/m6502/xavix.h @@ -192,10 +192,10 @@ class xavix_device : public m6502_device { void set_databank(uint8_t bank); uint8_t get_databank(); - void write_special_stack(uint8_t data); + void write_special_stack(uint32_t addr, uint8_t data); void dec_special_stack(); void inc_special_stack(); - uint8_t read_special_stack(); + uint8_t read_special_stack(uint32_t addr); /* we store the additional 'codebank' used for far calls in a different, private stack this seems to be neccessary for 'rad_hnt2' not to crash when bringing up the calibration / score table screens @@ -211,6 +211,16 @@ class xavix_device : public m6502_device { uint8_t read_zeropage(uint32_t addr); void write_zeropage(uint32_t addr, uint8_t val); + // Some original XaviX games seemed to suggest that the extra byte of the far calls went to a different + // stack, but dblmouse on suprtvpc does direct stack manipulation which challenges this assumption. + // It could be a SuperXaviX vs XaviX differences however, so currently leaving this as a toggle for testing. + // + // pausing in rad_hnt2 (press shift when on the map) is broken without this logic as the stack becomes too + // big with the extra bytes + // + // we currently use the private stack for regular XaviX but not for the later CPUs, however the root cause + // of needing it for regular XaviX could be somewhere else + bool m_use_private_stack_for_extra_callf_byte = true; }; enum { diff --git a/src/devices/cpu/m6502/xavix2000.cpp b/src/devices/cpu/m6502/xavix2000.cpp index a33218423e4ee..328a357e23e80 100644 --- a/src/devices/cpu/m6502/xavix2000.cpp +++ b/src/devices/cpu/m6502/xavix2000.cpp @@ -38,6 +38,7 @@ DEFINE_DEVICE_TYPE(XAVIX2002, xavix2002_device, "xavix2002", "XaviX (SSD 2002) ( xavix2000_device::xavix2000_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : xavix_device(mconfig, type, tag, owner, clock) { + m_use_private_stack_for_extra_callf_byte = false; } xavix2000_device::xavix2000_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : diff --git a/src/devices/machine/generalplus_gpl16250soc_video.cpp b/src/devices/machine/generalplus_gpl16250soc_video.cpp index 1b878ca8e41f4..5c05f545bf22d 100644 --- a/src/devices/machine/generalplus_gpl16250soc_video.cpp +++ b/src/devices/machine/generalplus_gpl16250soc_video.cpp @@ -779,6 +779,11 @@ void gcm394_base_video_device::video_dma_size_trigger_w(address_space &space, ui LOGMASKED(LOG_GCM394_VIDEO_DMA, "%s: doing sprite / video DMA source %04x dest %04x size %04x value of 707e (bank) %04x value of 707f %04x\n", machine().describe_context(), m_videodma_source, m_videodma_dest, m_videodma_size, m_707e_spritebank, m_707f ); + // jak_spmm sets dest to 0 when it wants to write to spriteram, looks intentional? + // does something else force writes to go to spriteram or does 0 always just mean there? + if (m_videodma_dest == 0) + m_videodma_dest = 0x7400; + for (int i = 0; i <= m_videodma_size; i++) { uint16_t dat = space.read_word(m_videodma_source+i); diff --git a/src/devices/machine/spg_renderer.cpp b/src/devices/machine/spg_renderer.cpp index 0bb116ef784eb..7e02154d7982e 100644 --- a/src/devices/machine/spg_renderer.cpp +++ b/src/devices/machine/spg_renderer.cpp @@ -255,7 +255,8 @@ void spg_renderer_device::draw_linemap(bool has_extended_tilemaps, const rectang uint32_t tilemap = tilemapregs[2]; uint32_t palette_map = tilemapregs[3]; - //popmessage("draw draw_linemap bases %04x %04x\n", tilemap, palette_map); + //if (scanline == 128) + // popmessage("draw draw_linemap reg0 %04x reg1 %04x bases %04x %04x\n", tilemapregs[0], tilemapregs[1], tilemap, palette_map); //uint32_t xscroll = scrollregs[0]; uint32_t yscroll = scrollregs[1]; @@ -294,26 +295,36 @@ void spg_renderer_device::draw_linemap(bool has_extended_tilemaps, const rectang } else { - for (int i = 0; i < 320 / 2; i++) - { - uint8_t palette_entry; - uint16_t color; - const uint16_t data = spc.read_word(sourcebase + i); + const uint32_t attr = tilemapregs[0]; + const uint8_t bpp = attr & 0x0003; + const uint32_t nc_bpp = ((bpp)+1) << 1; + uint32_t palette_offset = (attr & 0x0f00) >> 4; + palette_offset >>= nc_bpp; + palette_offset <<= nc_bpp; - palette_entry = (data & 0x00ff); - color = paletteram[palette_entry]; + uint32_t bits = 0; + uint32_t nbits = 0; - if (!(color & 0x8000)) - { - m_linebuf[(i * 2) + 0] = color & 0x7fff; + for (int i = 0; i < 320; i++) + { + bits <<= nc_bpp; + if (nbits < nc_bpp) + { + uint16_t b = spc.read_word(sourcebase++ & 0x3fffff); + b = (b << 8) | (b >> 8); + bits |= b << (nc_bpp - nbits); + nbits += 16; } + nbits -= nc_bpp; + + uint32_t pal = palette_offset + (bits >> 16); + bits &= 0xffff; - palette_entry = (data & 0xff00) >> 8; - color = paletteram[palette_entry]; + uint16_t rgb = paletteram[pal]; - if (!(color & 0x8000)) + if (!(rgb & 0x8000)) { - m_linebuf[(i * 2) + 1] = color & 0x7fff; + m_linebuf[i] = rgb; } } } diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 4b0829646471e..787947c17a43e 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -42710,6 +42710,9 @@ dbzscout @source:skeleton/kron.cpp kron180 // 1995 Kron Ltd, Ukraine +@source:skeleton/leadsinger2.cpp +leadsng2 + @source:skeleton/lee1214.cpp lee1214d // @@ -45874,6 +45877,7 @@ batvgc rad_gtg rad_rsg rad_rsgp +rad_rsgpa rad_foot rad_bb3 rad_bb3p @@ -45917,6 +45921,7 @@ gameu50 gameu108 gormiti imgame +jak_spmm myac220 smartfp // Smart Fit Park smartfpf @@ -46021,10 +46026,12 @@ zone3d ablkickb abltenni // anpantv +ban_krkk comil // ddr33v decathln decathlna +dmbtjunc doraglob // (c) 2007 VTech doraglobf doraglobg @@ -46067,6 +46074,7 @@ virtbb virtten vtechtvsgr // (c) 2006 VTech vtechtvssp // (c) 2006 VTech +wfart wfcentro @source:tvgames/spg2xx_digimake.cpp @@ -46347,6 +46355,7 @@ tak_gin // tak_geig // tak_hamr // tak_town // +tak_wdg // tak_zuba // tcarnavi // tom_tvho // @@ -46364,6 +46373,7 @@ ltv_naru // domfitad // dombikec // epo_dabj +epo_dtcj @source:tvgames/xavix_2000.cpp ban_omt // @@ -46388,9 +46398,12 @@ ttv_swj // @source:tvgames/xavix_2002.cpp anpanmdx apmj2009 +ban_bkgj ban_dn1j ban_kksj +ban_utmj epo_ntpj +epo_rgfj ban_ordj domdance // domfitch // diff --git a/src/mame/skeleton/leadsinger2.cpp b/src/mame/skeleton/leadsinger2.cpp new file mode 100644 index 0000000000000..a3574148cfc18 --- /dev/null +++ b/src/mame/skeleton/leadsinger2.cpp @@ -0,0 +1,108 @@ +// license:BSD-3-Clause +// copyright-holders:David Haywood +/****************************************************************************** + +-------- Label on product -------- + +Enter Tech +Music Video Karaoke +MODEL: LS-K2 + +-------- Boot Screen -------- + +MVK +Music Video / MP3 Karaoke +Leadsinger II +www.leadsinger.com + +-------- Main SoC -------- + +SUNPLUS +SPHE8104AW +0729-H +0001697 + +-------- ROM -------- + +EXCELSEMI +ES29LV800EB-70TG +0720 + +-------- RAM -------- + +SAMSUNG 710 +K4S641632K-U75 + +-------- Other -------- + +27Mhz Xtal +Card Slot + +*******************************************************************************/ + +#include "emu.h" + +#include "screen.h" +#include "speaker.h" + +namespace { + +class leadsng2_state : public driver_device +{ +public: + leadsng2_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_screen(*this, "screen") + { } + + void leadsng2(machine_config &config) ATTR_COLD; + +protected: + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD; + +private: + required_device m_screen; + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); +}; + +uint32_t leadsng2_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +void leadsng2_state::machine_start() +{ + +} + +void leadsng2_state::machine_reset() +{ +} + +static INPUT_PORTS_START( leadsng2 ) +INPUT_PORTS_END + +void leadsng2_state::leadsng2(machine_config &config) +{ + // unknown CPU core + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(320, 262); + m_screen->set_visarea(0, 320-1, 0, 240-1); + m_screen->set_screen_update(FUNC(leadsng2_state::screen_update)); + + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); +} + +ROM_START( leadsng2 ) + ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "ls-k2_es29lv800eb_004a225b.bin", 0x000000, 0x100000, CRC(e70f1e1f) SHA1(5aa3187adffcba5bd4a9e3e89a1c210d7f1a978e) ) +ROM_END + +} // anonymous namespace + +CONS( 200?, leadsng2, 0, 0, leadsng2, leadsng2, leadsng2_state, empty_init, "Enter Tech", "Leadsinger II (LS-K2)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) diff --git a/src/mame/tvgames/elan_eu3a14.cpp b/src/mame/tvgames/elan_eu3a14.cpp index a5ebe0685877a..cb95a0f9a2168 100644 --- a/src/mame/tvgames/elan_eu3a14.cpp +++ b/src/mame/tvgames/elan_eu3a14.cpp @@ -855,6 +855,10 @@ ROM_START( rad_rsgp ) ROM_LOAD( "realswinggolf.bin", 0x000000, 0x400000, CRC(89e5b6a6) SHA1(0b14aa84d7e7ae7190cd64e3eb125de2104342bc) ) ROM_END +ROM_START( rad_rsgpa ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "realswinggolf_multilanguage.bin", 0x000000, 0x400000, CRC(c03752a6) SHA1(7e9cc804edf0c23a8dedfa0c0a51d1bc811ea5c1) ) +ROM_END ROM_START( rad_foot ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) @@ -977,8 +981,8 @@ ROM_END CONS( 2006, rad_gtg, 0, 0, radica_eu3a14_altrambase_adc, rad_gtg, elan_eu3a14_state, empty_init, "Radica / FarSight Studios (licensed from Incredible Technologies)", "Golden Tee Golf: Home Edition", MACHINE_NOT_WORKING ) CONS( 2005, rad_rsg, 0, 0, radica_eu3a14_altrambase, rad_rsg, elan_eu3a14_state, empty_init, "Radica / FarSight Studios", "Play TV Real Swing Golf", MACHINE_NOT_WORKING ) -// some Connectv branded Real Swing Golf units have a language selection (checksum in test mode confirmed as different on said units) -CONS( 2005, rad_rsgp, rad_rsg, 0, radica_eu3a14p_altrambase, rad_rsg, elan_eu3a14_state, empty_init, "Radica / FarSight Studios", "Connectv Real Swing Golf", MACHINE_NOT_WORKING ) +CONS( 2005, rad_rsgp, rad_rsg, 0, radica_eu3a14p_altrambase, rad_rsg, elan_eu3a14_state, empty_init, "Radica / FarSight Studios", "Connectv Real Swing Golf (set 1)", MACHINE_NOT_WORKING ) // English only +CONS( 2005, rad_rsgpa,rad_rsg, 0, radica_eu3a14p_altrambase, rad_rsg, elan_eu3a14_state, empty_init, "Radica / FarSight Studios", "Connectv Real Swing Golf (set 2)", MACHINE_NOT_WORKING ) // English, German, French, Spanish, Italian // also has a Connectv Real Soccer logo in the roms, apparently unused, maybe that was to be the US title (without the logo being changed to Play TV) but Play TV Soccer ended up being a different game licensed from Epoch instead. CONS( 2006, rad_foot, 0, 0, radica_eu3a14p, radica_foot, elan_eu3a14_state, empty_init, "Radica / Medialink", "Connectv Football", MACHINE_NOT_WORKING ) diff --git a/src/mame/tvgames/generalplus_gpl16250_rom.cpp b/src/mame/tvgames/generalplus_gpl16250_rom.cpp index 6408640753529..ef44329c50439 100644 --- a/src/mame/tvgames/generalplus_gpl16250_rom.cpp +++ b/src/mame/tvgames/generalplus_gpl16250_rom.cpp @@ -16,33 +16,10 @@ #include "generalplus_gpl16250.h" -static INPUT_PORTS_START( smartfp ) - PORT_START("IN0") - // entirely non-standard mat based controller (0-11 are where your feet are placed normally, row of selection places to step above those) - // no sensible default mapping unless forced - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_Q) PORT_NAME("0") - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_CODE(KEYCODE_W) PORT_NAME("1") - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_CODE(KEYCODE_E) PORT_NAME("2") - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_CODE(KEYCODE_R) PORT_NAME("3") - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_CODE(KEYCODE_T) PORT_NAME("4") - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_CODE(KEYCODE_Y) PORT_NAME("5") - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_CODE(KEYCODE_U) PORT_NAME("6") - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_CODE(KEYCODE_I) PORT_NAME("7") - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON13 ) PORT_CODE(KEYCODE_O) PORT_NAME("8") - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON14 ) PORT_CODE(KEYCODE_P) PORT_NAME("9") - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON15 ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("10") - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON16 ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("11") - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_A) PORT_NAME("Circle / Red") - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_S) PORT_NAME("Square / Orange") - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_D) PORT_NAME("Triangle / Yellow") - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_F) PORT_NAME("Star / Blue") - - PORT_START("IN1") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("IN2") - PORT_DIPNAME( 0x0001, 0x0001, "IN2" ) +static INPUT_PORTS_START( base ) + PORT_START("IN0") + PORT_DIPNAME( 0x0001, 0x0001, "IN0" ) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) @@ -66,49 +43,15 @@ static INPUT_PORTS_START( smartfp ) PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("HOME") - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) -INPUT_PORTS_END - -static INPUT_PORTS_START( gormiti ) // DOWN with A+B+C for test mode? - PORT_START("IN0") - 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_BUTTON1 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START1 ) // causes long delay in test mode? + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) @@ -226,124 +169,85 @@ static INPUT_PORTS_START( gormiti ) // DOWN with A+B+C for test mode? PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) INPUT_PORTS_END +static INPUT_PORTS_START( jak_spmm ) + PORT_INCLUDE( base ) + + // are these inputs meant to be split across 3 ports, or is that a unSP2.0 / GPL16250 emulation bug? + PORT_MODIFY("IN0") + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Pause/Menu") + + PORT_MODIFY("IN1") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON2 ) + + PORT_MODIFY("IN2") + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) +INPUT_PORTS_END + +static INPUT_PORTS_START( smartfp ) + PORT_INCLUDE( base ) + + PORT_MODIFY("IN0") + // entirely non-standard mat based controller (0-11 are where your feet are placed normally, row of selection places to step above those) + // no sensible default mapping unless forced + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_Q) PORT_NAME("0") + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_CODE(KEYCODE_W) PORT_NAME("1") + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_CODE(KEYCODE_E) PORT_NAME("2") + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_CODE(KEYCODE_R) PORT_NAME("3") + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_CODE(KEYCODE_T) PORT_NAME("4") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_CODE(KEYCODE_Y) PORT_NAME("5") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_CODE(KEYCODE_U) PORT_NAME("6") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_CODE(KEYCODE_I) PORT_NAME("7") + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON13 ) PORT_CODE(KEYCODE_O) PORT_NAME("8") + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON14 ) PORT_CODE(KEYCODE_P) PORT_NAME("9") + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON15 ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("10") + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON16 ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("11") + + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_A) PORT_NAME("Circle / Red") + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_S) PORT_NAME("Square / Orange") + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_D) PORT_NAME("Triangle / Yellow") + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_F) PORT_NAME("Star / Blue") + + PORT_MODIFY("IN1") + PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("IN2") + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("HOME") +INPUT_PORTS_END + +static INPUT_PORTS_START( gormiti ) // DOWN with A+B+C for test mode? + PORT_INCLUDE( base ) + + PORT_MODIFY("IN0") + 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_BUTTON1 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START1 ) // causes long delay in test mode? +INPUT_PORTS_END static INPUT_PORTS_START( tkmag220 ) - PORT_START("IN0") - PORT_DIPNAME( 0x0001, 0x0001, "IN0" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_INCLUDE( base ) - PORT_START("IN1") - PORT_DIPNAME( 0x0001, 0x0001, "IN1" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_MODIFY("IN1") PORT_DIPNAME( 0x0040, 0x0000, "Important" ) // gets stuck in inf loop if this is wrong PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_START("IN2") + PORT_MODIFY("IN2") PORT_DIPNAME( 0x0001, 0x0001, "IN2" ) // set 0x0001 and 0x0002 on to get a test mode (some of the ROM banks fail their test, but dumps were repeatable, should be verified on another unit) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) @@ -351,21 +255,8 @@ static INPUT_PORTS_START( tkmag220 ) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Menu") - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) INPUT_PORTS_END - static INPUT_PORTS_START( gameu ) PORT_START("IN0") PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -404,7 +295,6 @@ static INPUT_PORTS_START( beijuehh ) PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // this one must be kept in this state or the machine will freeze after a few seconds? PORT_BIT( 0xe000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN3") // is there a 4th button? PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) @@ -413,70 +303,51 @@ static INPUT_PORTS_START( beijuehh ) PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END +ROM_START( jak_spmm ) + ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00) + ROM_LOAD16_WORD_SWAP("amazingspiderman.bin", 0x000000, 0x400000, CRC(00d2a62c) SHA1(6a08760dc6dabc2aea32e6eb8b1f98e7edf60791) ) + // has a HT24LC04 to store settings +ROM_END ROM_START( smartfp ) - //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) - //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) - ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00) ROM_LOAD16_WORD_SWAP("smartfitparkuk.bin", 0x000000, 0x800000, CRC(2072d7d0) SHA1(eaa4f254d6dee3a7eac64ae2204dd6291e4d27cc) ) ROM_END ROM_START( smartfps ) - //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) - //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) - ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00) ROM_LOAD16_WORD_SWAP("smartfitpark.bin", 0x000000, 0x800000, CRC(ada84507) SHA1(a3a80bf71fae62ebcbf939166a51d29c24504428) ) ROM_END ROM_START( smartfpf ) - //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) - //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) - ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00) ROM_LOAD16_WORD_SWAP("smartfitpark_fr.bin", 0x000000, 0x800000, CRC(e6d3ba29) SHA1(14e4632997318329be3291f2c4e62f088181f3c8) ) ROM_END ROM_START( gormiti ) - //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) - //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) - ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00) ROM_LOAD16_WORD_SWAP("gormiti.bin", 0x000000, 0x800000, CRC(71b82d41) SHA1(169b35dc7bdd05b7b32176ddf901ace27736cb86) ) ROM_END ROM_START( tkmag220 ) - //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) - //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) - ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "taikee220.bin", 0x0000000, 0x8000000, CRC(02881534) SHA1(a0e0c9cfa3a6b1c6107f06abd3268b82bd663d06) ) ROM_END ROM_START( imgame ) - //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) - //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) - ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 ) // the 2nd half of this ROM required multiple attempts to get a matching dump, so could be suspect, might also be unused as this only has 120 games ROM_LOAD16_WORD_SWAP( "imgame.bin", 0x0000000, 0x8000000, CRC(6fba9021) SHA1(852f4c0aaed682aa8ff5b8cd52313ea2d3d920a1)) ROM_END ROM_START( myac220 ) - //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) - //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) - ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "myarcadegogamerportable.bin", 0x0000000, 0x8000000, BAD_DUMP CRC(c929a2fa) SHA1(e99007ccc45a268267b4ea0efaf22e3117f5a6bd) ) // several sections seemed to be erased, was repaired with data from tkmag220, likely good but should be verified ROM_END ROM_START( beijuehh ) - //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different) - //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) - ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "beijeu.bin", 0x0000000, 0x8000000, CRC(e7b968af) SHA1(a39a3a70e6e0827e4395e09e55983eb9e9348e4a) ) // some address lines might be swapped ROM_END @@ -493,7 +364,6 @@ ROM_START( bornkidh ) ROM_CONTINUE(0x3800000, 0x0800000) ROM_END - ROM_START( gameu50 ) ROM_REGION( 0x2000000, "maincpu", ROMREGION_ERASEFF ) ROM_LOAD16_WORD_SWAP( "gameu.bin", 0x000000, 0x2000000, CRC(13c42bce) SHA1(f769ceabb8ab4e60c0d663dffd5cca91c6aec206) ) @@ -784,6 +654,8 @@ void gameu_handheld_game_state::init_gameu108() } // the JAKKS ones of these seem to be known as 'Generalplus GPAC500' hardware? +CONS(2008, jak_spmm, 0, 0, base, jak_spmm, gormiti_game_state, empty_init, "JAKKS Pacific Inc / Santa Cruz Games", "The Amazing Spider-Man and The Masked Menace (JAKKS Pacific TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) + CONS(2009, smartfp, 0, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (UK)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) 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' diff --git a/src/mame/tvgames/spg2xx.cpp b/src/mame/tvgames/spg2xx.cpp index 57ef4f7c64e2f..fdcd96040ab8a 100644 --- a/src/mame/tvgames/spg2xx.cpp +++ b/src/mame/tvgames/spg2xx.cpp @@ -485,6 +485,39 @@ static INPUT_PORTS_START( spg2xx ) // base structure for easy debugging / figuri PORT_DIPSETTING( 0x8000, "8000" ) INPUT_PORTS_END +static INPUT_PORTS_START( dmbtjunc ) + PORT_INCLUDE( spg2xx ) + + PORT_MODIFY("P1") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Red") + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Green") + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Blue") + // there's a 2nd set of buttons for P2, where do they map? + // battery state is likely in here too +INPUT_PORTS_END + +static INPUT_PORTS_START( ban_krkk ) + // inputs shown in hidden text mode, although it refers to the physical placement of the each button on the mat rather than the colours / symbols + PORT_INCLUDE( spg2xx ) + + PORT_MODIFY("P1") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Blue/Top-Left") + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Yellow/Top-Right") + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Red/Bottom-Left") + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("P1 Green/Bottom-Right") + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("P1 Select") + + PORT_MODIFY("P3") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Blue/Top-Left") + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Yellow/Top-Right") + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Red/Bottom-Left") + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("P2 Green/Bottom-Right") + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_NAME("P2 Select") + + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_CUSTOM ) // Battery State +INPUT_PORTS_END + + static INPUT_PORTS_START( drumsups ) PORT_INCLUDE( spg2xx ) @@ -495,7 +528,6 @@ static INPUT_PORTS_START( drumsups ) PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Drum pad 3: Purple") PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Drum pad 4: Red") PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Drum pad 5: Green") - INPUT_PORTS_END static INPUT_PORTS_START( lexiart ) @@ -2333,6 +2365,11 @@ ROM_START( wfcentro ) ROM_LOAD16_WORD_SWAP( "winfuncentro.bin", 0x000000, 0x800000, CRC(fd6ad052) SHA1(78af844729bf4843dc70531349e38a8c25caf748) ) ROM_END +ROM_START( wfart ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "artstudio.bin", 0x000000, 0x800000, CRC(f5fd657e) SHA1(0005826a5b22a17cafffaf7328092c8d84217398) ) +ROM_END + ROM_START( lexiart ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "lexibookartstudio.u3", 0x000000, 0x800000, CRC(fc417abb) SHA1(c0a18a2cf11c47086722f0ec88410614fed7c6f7) ) @@ -2381,6 +2418,16 @@ ROM_START( anpantv ) ROM_LOAD16_WORD_SWAP( "anpanman_tv.bin", 0x000000, 0x800000, CRC(5e32dc1a) SHA1(bae260ffc56f5315cdafd5bc40966ec6d31e267f) ) ROM_END +ROM_START( dmbtjunc ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "battlejunction.u3", 0x000000, 0x800000, CRC(31471c53) SHA1(94fdd8c4c67914054e304a55042c10710af2e596) ) +ROM_END + +ROM_START( ban_krkk ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD16_WORD_SWAP( "quiz.bin", 0x000000, 0x400000, CRC(6f51180a) SHA1(38017ecaae4eead38482aeb04c90b5a5eeebd6ca) ) +ROM_END + ROM_START( prail ) ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "traingame.u1", 0x000000, 0x8000000, CRC(5c96d526) SHA1(cda0280b320762bda7a7358ec7ce29690aa815fb) ) @@ -2549,7 +2596,8 @@ CONS( 2006, hotwhl2p, 0, 0, hotwheels, hotwheels, spg2xx_game_hotwheels CONS( 2007, ordentv, 0, 0, ordentv, ordentv, spg2xx_game_ordentv_state, init_ordentv, "Taikee / V-Tac", "Ordenador-TV (Spain)", MACHINE_NOT_WORKING ) CONS( 2007, jeuint, ordentv, 0, ordentv, ordentv, spg2xx_game_ordentv_state, init_jeuint, "Taikee / V-Tac", u8"Jeu Intéractif TV (France)", MACHINE_NOT_WORKING) -CONS( 200?, wfcentro, 0, 0, wfcentro, spg2xx, spg2xx_game_wfcentro_state, empty_init, "WinFun", "Centro TV de Diseno Artistico (Spain)", MACHINE_NOT_WORKING ) +CONS( 200?, wfart, 0, 0, wfcentro, spg2xx, spg2xx_game_wfcentro_state, empty_init, "WinFun", "TV Art Design Center", MACHINE_NOT_WORKING ) +CONS( 200?, wfcentro, wfart, 0, wfcentro, spg2xx, spg2xx_game_wfcentro_state, empty_init, "WinFun", "Centro TV de Diseno Artistico (Spain)", MACHINE_NOT_WORKING ) CONS( 200?, lexiart, 0, 0, lexiart, lexiart, spg2xx_game_lexiart_state, empty_init, "Lexibook", "Lexibook Junior My 1st Drawing Studio", MACHINE_NOT_WORKING ) @@ -2568,6 +2616,19 @@ CONS( 2008, ddr33v, 0, 0, spg2xx, ddr33v, spg2xx_game_ddr33v_st // PCB has 'Anpanman TV 2006 Ver 1.4' printed on it, ROM has SPG260 header. Uses custom built-in keyboard, no display built into the unit. CONS( 2006, anpantv, 0, 0, spg2xx, spg2xx, spg2xx_game_state, empty_init, "Bandai", "Anpanman TV (Japan)", MACHINE_NOT_WORKING ) +// Has an AT24C08, not currently hooked up (probably for storing database unlocks) +// +// There is also a card reader/scanner which can read barcodes from Digimon cards +// and IR connectivity which allowed for data exchange with various services using +// an external device, including transfering characters to/from an arcade game. +// Neither is currently emulated +// +// Will report 'ERROR' sometimes, maybe as a result of these not being hooked up. +CONS( 2006, dmbtjunc, 0, 0, spg2xx, dmbtjunc, spg2xx_game_state, empty_init, "Bandai", "Let's! TV Play Digital Monster Battle Junction (Japan)", MACHINE_NOT_WORKING ) + +// 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 ) + // 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/xavix.cpp b/src/mame/tvgames/xavix.cpp index 6f5a5d19ad0b6..ff2cc6a2a02db 100644 --- a/src/mame/tvgames/xavix.cpp +++ b/src/mame/tvgames/xavix.cpp @@ -35,11 +35,8 @@ year name PCB ID ROM width TSOP pads ROM size SEEPROM die markings extra components / notes 2006 Hello Kitty カードでおままごと あいうおえ図鑑 / エポック社 / 日本 Hello Kitty Play House with Cards Aiuoe Illustrated Book / Epochsha / Japan - ドラえもん 体感タケコプター! 空とぶ大冒険 / エポック社 / 日本 Doraemon Experience Takecopter! Great Flying Adventure / Epoch Publishing / Japan スーパーテレビパソコンLink / エポック社 / 日本 Super TV PC Link / Epoch / Japan Let's!TVプレイ ふしぎ星のふたご姫Gyu! ドレスチェンジでキュートにダンス / バンダイ / 日本 Let's!TV Play Gyu, the Twin Princess of the Mysterious Planet! Dance cutely with a dress change / Bandai / Japan - Let's!TVプレイ 体感キャストオフ 仮面ライダーカブト クロックアップ&ライダーキック / バンダイ / 日本 Let's!TV Play Experience Cast Off Kamen Rider Kabuto Clock Up & Rider Kick / Bandai / Japan - Let's!TVプレイ なりきり体感 ボウケンジャー 走れ!撃て!ミッションスタート!! / バンダイ / 日本 Let's! TV Play Narikiri Experience Boukenger Run! Shoot! Mission starts! ! / Bandai / Japan Let's!TVプレイ なりきりファイト ウルトラマン 撃て!必殺光線!! / タカラトミー / 日本 Let's!TV Play Narikiri Fight Ultraman Shoot! Deadly ray! ! / Takara Tomy / Japan Jala Jaland /atlus/Japan (arcade version) - - - - - - - 2004 Printer for TV computer /EPOCH/Japan - - - - - - - @@ -56,7 +53,6 @@ not dumped: no TSOP pads 2003 Beyblade Arcade Challenge 5-in-1 /Hasbro/USA - - - - - - have - 2001 Webdiver Gradion /TAKARA/Japan - - - - - - - not dumped: xavix2.cpp @@ -66,7 +62,10 @@ 2005 Let's!TVプレイ ドラゴンボ-ルZ バトル体感かめはめ波~ おめぇとフュージョン / バンダイ / 日本 Let's!TV Play Dragon Ball Z Battle Experience Kamehameha ~ Ometo Fusion / Bandai / Japan dumped: either here, xavix_2000.cpp, or xavix_2002.cpp - Let's!TVプレイ 魔法戦隊マジレンジャー マジマットでダンス&バトル / バンダイ / 日本 Let's!TV Play Mahou Sentai Magiranger Dance & Battle at Magimat / Bandai / Japan + Let's!TVプレイ 体感キャストオフ 仮面ライダーカブト クロックアップ&ライダーキック / バンダイ / 日本 Let's!TV Play Experience Cast Off Kamen Rider Kabuto Clock Up & Rider Kick / Bandai / Japan + Let's!TVプレイ なりきり体感 ボウケンジャー 走れ!撃て!ミッションスタート!! / バンダイ / 日本 Let's! TV Play Narikiri Experience Boukenger Run! Shoot! Mission starts! ! / Bandai / Japan + Webdiver Gradion /TAKARA/Japan - - - - - - - + Let's!TVプレイ 魔法戦隊マジレンジャー マジマットでダンス&バトル / バンダイ / 日本 Let's!TV Play Mahou Sentai Magiranger Dance & Battle at Magimat / Bandai / Japan anpan-man pyon-pyon ikunou mat /JoyPalette/Japan - - - - - - - どこでもドラえもん 日本旅行ゲームDX体感!どこドラグランプリ! / エポック社 / 日本 Doraemon anywhere - Japan travel game DX experience! Where is the Dragon Grand Prix! / Epoch / Japan Let's!TVプレイ ふたりはプリキュアMaxHeart マットでダンス MaxHeartにおどっちゃおう / バンダイ / 日本 Let's!TV Play Futari wa PreCure MaxHeart Dance on the mat Let's go to MaxHeart / Bandai / Japan @@ -200,6 +199,7 @@ 2006 Let's!TVプレイ NARUTO-ナルト- 忍者体感~だってばよ~ / バンダイ / 日本 Let's!TV Play NARUTO Ninja Experience ~Dattebayo~ / Bandai / Japan 2006 テレビであそぼう!まなぼう!超能力あいうえお図鑑 / エポック社 / 日本 Let's play on TV! Learn! Superpower Aiueo Illustrated Book / Epochsha / Japan 2006 Let's!TVプレイ ドラゴンボールZ バトル体感かめはめ波2~オッスおめぇ悟空 天下一武道会~ / バンダイ / 日本 Let's!TV Play Dragon Ball Z Battle Experience Kamehameha 2 ~Ossu Ome Goku Tenkaichi Budokai~ / Bandai / Japan + 2006 ドラえもん 体感タケコプター! 空とぶ大冒険 / エポック社 / 日本 Doraemon Experience Takecopter! Great Flying Adventure / Epoch Publishing / Japan @@ -460,7 +460,7 @@ void superxavix_state::superxavix_lowbus_map(address_map &map) map(0x6c00, 0x6cff).ram().w(FUNC(superxavix_state::bmp_palram_sh_w)).share("bmp_palram_sh"); map(0x6d00, 0x6dff).ram().w(FUNC(superxavix_state::bmp_palram_l_w)).share("bmp_palram_l"); - // map(0x6a40, 0x6a7f).ram().share("ext_segment_regs"); // 16x32 extended segment regs + map(0x6a40, 0x6a7f).ram().w(FUNC(superxavix_state::ext_segment_regs_w)).share("ext_segment_regs"); // 16x32 extended segment regs // bitmap plotter(!) (with auto-inc?) - used by super pc tv units map(0x6f60, 0x6f60).w(FUNC(superxavix_state::superxavix_plt_flush_w)); // writes here to flush plotter FIFO @@ -1254,6 +1254,42 @@ static INPUT_PORTS_START( tak_geig ) INPUT_PORTS_END +static INPUT_PORTS_START( tak_wdg ) + PORT_INCLUDE(xavix) + + // there is unemulated IR connectivity with other devices that isn't emulated, might rely on some of the unused bits here + // could also just be that the other robots change the state of another port somewhere in order to be detected + + // test mode code suggesting IR is at 0eb771 (part of it requires opposing directions to be held as this is not a joystick) + + // To access test mode (do this on a fresh boot, not after an F3 reset or it will hang after the red screen): + // first it checks bits 0x01 in port IN1 and expects them to be 0 (this doesn't seem to be connected to anything normally?) + // then reads port IN0, masks with 0xf7 and expects only LEFT & RIGHT to he held together + + PORT_MODIFY("IN0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) // shoot (robot form) / whistle (train form) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) // charge shot (robot form) maybe should be a toggle if it represents an arm position? + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Combine") PORT_TOGGLE // if you toggle it in the robot game it pauses, no effect in train game + // 0x08 not used? + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_16WAY // robot form only? + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_16WAY // robot form only? + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_16WAY + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_16WAY + + PORT_MODIFY("IN1") + // these must all be flipped to one state or the other to transform (not sure the best way to handle this) + // pre-rendered animations will play for each transform, and any running game mode will exit when you start this process + + // 0x01 doesn't trigger any animation, is not used by game, and isn't listed in test mode, but it must be 'off' (returning 0) to access the test mode in the first place (debug pin maybe) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Transformation Head State") PORT_TOGGLE + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Transformation Body State") PORT_TOGGLE + // 0x08 doesn't trigger any animation, not used? + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Transformation Arm 1 State") PORT_TOGGLE + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Transformation Arm 2 State") PORT_TOGGLE + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POWER_OFF ) + // 0x80 not used? +INPUT_PORTS_END + static INPUT_PORTS_START( tak_comt ) PORT_INCLUDE(xavix) @@ -2469,6 +2505,11 @@ ROM_START( tak_geig ) ROM_LOAD("geigeki.bin", 0x000000, 0x400000, CRC(bd0c3576) SHA1(06f614dbec0225ce4ed866b98450912986d72faf) ) ROM_END +ROM_START( tak_wdg ) + ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00) + ROM_LOAD("wdgrobot.bin", 0x000000, 0x200000, CRC(7ffc6386) SHA1(e33de5f8e6686e4160d1b90d59167418e87f5a47) ) +ROM_END + ROM_START( tom_tvho ) // ET105 REV 0.0 ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00) ROM_LOAD("tvhockey.u4", 0x000000, 0x200000, CRC(9cd72ae2) SHA1(0530851123b607ddb85f9513405ce97c493f5fd6) ) @@ -2865,6 +2906,9 @@ CONS( 2005, has_wamg, 0, 0, xavix_4mb, has_wamg, xavix_state, // GEIGEKI ゴーゴーシューティング CONS( 2002, tak_geig, 0, 0, xavix_4mb_nv, tak_geig, xavix_state, init_xavix, "Takara / SSD Company LTD", "Geigeki Go Go Shooting (Japan)", MACHINE_IMPERFECT_SOUND ) +// some unemulated connectivity features to add other robots into the game +CONS( 2001, tak_wdg, 0, 0, xavix_2mb_nv, tak_wdg, xavix_state, init_xavix, "Takara / SSD Company LTD", "Webdiver DX W-05 Gladion (Japan)", MACHINE_IMPERFECT_SOUND ) + // TVホッケー // playable but could do with better deadzome handling on the controls at least // the trackball functionality works well in the menus, but not the games diff --git a/src/mame/tvgames/xavix.h b/src/mame/tvgames/xavix.h index bb0a74bd40213..5077c667ecad6 100644 --- a/src/mame/tvgames/xavix.h +++ b/src/mame/tvgames/xavix.h @@ -104,6 +104,7 @@ class xavix_state : public driver_device m_posirq_x(*this, "posirq_x"), m_posirq_y(*this, "posirq_y"), m_segment_regs(*this, "segment_regs"), + m_ext_segment_regs(*this, "ext_segment_regs"), m_palette(*this, "palette"), m_region(*this, "REGION"), m_gfxdecode(*this, "gfxdecode"), @@ -464,12 +465,12 @@ class xavix_state : public driver_device else if (offset < 0x300) { offset &= 0xff; - return ((~offset >> 4) | (offset << 4)); + return (((~offset >> 4) & 0x0f) | (offset << 4)); } else if (offset < 0x400) { offset &= 0xff; - return ((~offset >> 4) | (~offset << 4)); + return (((~offset >> 4) & 0x0f) | (~offset << 4)); } else if (offset < 0x800) { @@ -557,6 +558,7 @@ class xavix_state : public driver_device required_shared_ptr m_posirq_y; required_shared_ptr m_segment_regs; + optional_shared_ptr m_ext_segment_regs; required_device m_palette; @@ -611,6 +613,7 @@ class xavix_state : public driver_device bool m_disable_memory_bypass = false; bool m_disable_sprite_yflip = false; + bool m_disable_tile_regs_flip = false; int m_video_hres_multiplier; }; @@ -649,6 +652,8 @@ class superxavix_state : public xavix_state void xavix2002(machine_config &config); void xavix2002_4mb(machine_config &config); + void init_epo_doka(); + protected: virtual void machine_start() override ATTR_COLD; virtual void machine_reset() override ATTR_COLD; @@ -662,6 +667,7 @@ class superxavix_state : public xavix_state virtual void get_tile_pixel_dat(uint8_t &dat, int bpp) override; private: + void ext_segment_regs_w(offs_t offset, uint8_t data); void superxavix_plt_flush_w(uint8_t data); uint8_t superxavix_plt_dat_r(); void superxavix_plt_dat_w(uint8_t data); @@ -706,6 +712,14 @@ class superxavix_state : public xavix_state void extended_extbus_reg1_w(uint8_t data); void extended_extbus_reg2_w(uint8_t data); + uint8_t superxavix_read_extended_io0(offs_t offset, uint8_t mem_mask) { logerror("%s: superxavix_read_extended_io0 (mask %02x)\n", machine().describe_context(), mem_mask); return 0x00; } + uint8_t superxavix_read_extended_io1(offs_t offset, uint8_t mem_mask) { logerror("%s: superxavix_read_extended_io1 (mask %02x)\n", machine().describe_context(), mem_mask); return 0x00; } + uint8_t superxavix_read_extended_io2(offs_t offset, uint8_t mem_mask) { logerror("%s: superxavix_read_extended_io2 (mask %02x)\n", machine().describe_context(), mem_mask); return 0x00; } + + void superxavix_write_extended_io0(offs_t offset, uint8_t data, uint8_t mem_mask) { logerror("%s: superxavix_write_extended_io0 %02x (mask %02x)\n", machine().describe_context(), data, mem_mask); } + void superxavix_write_extended_io1(offs_t offset, uint8_t data, uint8_t mem_mask) { logerror("%s: superxavix_write_extended_io1 %02x (mask %02x)\n", machine().describe_context(), data, mem_mask); } + void superxavix_write_extended_io2(offs_t offset, uint8_t data, uint8_t mem_mask) { logerror("%s: superxavix_write_extended_io2 %02x (mask %02x)\n", machine().describe_context(), data, mem_mask); } + void draw_bitmap_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint8_t get_next_bit_sx(); diff --git a/src/mame/tvgames/xavix2.cpp b/src/mame/tvgames/xavix2.cpp index bf43fe20f525f..da3571e58bd4c 100644 --- a/src/mame/tvgames/xavix2.cpp +++ b/src/mame/tvgames/xavix2.cpp @@ -767,6 +767,13 @@ ROM_START( epo_dabj ) ROM_LOAD( "dabj.u3", 0x000000, 0x800000, CRC(9ebc1384) SHA1(38abaebd05bc9ab300ee5fbf37bd88ce9cbd20e1) ) ROM_END +ROM_START( epo_dtcj ) + ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "dtcj.u2", 0x000000, 0x800000, CRC(64c2aabb) SHA1(14f02eb01f1c6e76202f7a70818c300ba23fd879) ) + + // SEEPROM is a AT24C04 at u4 +ROM_END + ROM_START( domfitad ) ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "xpfitnessadventure.bin", 0x000000, 0x1000000, CRC(a7917081) SHA1(95ae5dc6e64a78ae060cb0e61d8b0af34a93c4ce) ) @@ -788,6 +795,10 @@ CONS( 2006, ban_db2j, 0, 0, config, naruto, naruto_state, empty_init, "Bandai / // テレビであそぼう!まなぼう! 超脳力あいうえお図鑑 CONS( 2006, epo_dabj, 0, 0, config, dabj, xavix2_state, empty_init, "Epoch / SSD Company LTD", "TV de Asobou! Manabou! Chou Nouryoku AIUEO Zukan (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +// ドラえもん 体感タケコプター! 空とぶ大冒険 +CONS( 2006, epo_dtcj, 0, 0, config, dabj, xavix2_state, empty_init, "Epoch / SSD Company LTD", "Doraemon Taikan Take-copter! Sora Tobu Daibouken (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) + + // These are for the 'Domyos Interactive System' other Domyos Interactive System games can be found in xavix.cpp (the SoC is inside the cartridge, base acts as a 'TV adapter' only) // Has SEEPROM and an RTC. Adventure has the string DOMYSSDCOLTD a couple of times. diff --git a/src/mame/tvgames/xavix_2002.cpp b/src/mame/tvgames/xavix_2002.cpp index 3fb8642373df3..696339f3234cc 100644 --- a/src/mame/tvgames/xavix_2002.cpp +++ b/src/mame/tvgames/xavix_2002.cpp @@ -296,7 +296,7 @@ static INPUT_PORTS_START( suprtvpc ) PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_PLAYER(1) INPUT_PORTS_END -/* SuperXavix IO port handliner (per game) */ +/* SuperXavix IO port handlers (per game) */ uint8_t superxavix_i2c_jmat_state::read_extended_io0(offs_t offset, uint8_t mem_mask) { @@ -375,6 +375,13 @@ void superxavix_state::xavix2002(machine_config &config) m_screen->set_visarea(0*8, 64*8-1, 2*8, 30*8-1); XAVIX2002IO(config, m_xavix2002io, 0); + + m_xavix2002io->read_0_callback().set(FUNC(superxavix_state::superxavix_read_extended_io0)); + m_xavix2002io->write_0_callback().set(FUNC(superxavix_state::superxavix_write_extended_io0)); + m_xavix2002io->read_1_callback().set(FUNC(superxavix_state::superxavix_read_extended_io1)); + m_xavix2002io->write_1_callback().set(FUNC(superxavix_state::superxavix_write_extended_io1)); + m_xavix2002io->read_2_callback().set(FUNC(superxavix_state::superxavix_read_extended_io2)); + m_xavix2002io->write_2_callback().set(FUNC(superxavix_state::superxavix_write_extended_io2)); } void superxavix_state::xavix2002_4mb(machine_config &config) @@ -708,7 +715,25 @@ ROM_START( epo_doka ) ROM_LOAD("doka.u1", 0x000000, 0x400000, CRC(853266d2) SHA1(d4121b89ee464088951898282404e5a2b788dd69) ) ROM_END +ROM_START( ban_utmj ) + ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00) + ROM_LOAD("utmj.u7", 0x000000, 0x800000, CRC(0ac2bcd9) SHA1(ca7c82e2015c86bb37bd66016c33343d174e9965) ) + + // SEEPROM is HT24LC02 at u3 +ROM_END + +ROM_START( ban_bkgj ) + ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00) + ROM_LOAD("bkgj.u2", 0x000000, 0x400000, CRC(a59ce23c) SHA1(d2a6be9e46f3cfc3cf798bf1f76732eee909c93b) ) + + // SEEPROM is a S-24CS04A at u4 +ROM_END +ROM_START( epo_rgfj ) + ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00) + // gave consistent reads 5 times, then started not, should be good, but there is the potential for the ROM to have already been failing + ROM_LOAD("rgfj.u1", 0x000000, 0x800000, CRC(96c9563a) SHA1(36b9dd3e5dcc8099787b25d28143997f61273234) ) +ROM_END ROM_START( udance ) ROM_REGION(0x800000, "bios", ROMREGION_ERASE00) @@ -779,6 +804,11 @@ void superxavix_piano_pc_state::init_piano_pc() m_disable_memory_bypass = true; } +void superxavix_state::init_epo_doka() +{ + init_xavix(); + m_disable_tile_regs_flip = true; +} void superxavix_doradraw_state::init_doradraw() { @@ -825,11 +855,20 @@ CONS( 2005, mrangbat, 0, 0, superxavix_i2c_mrangbat, mrangbat, superxavix_i2c_ // エキサイトスポーツ テニス×フィットネス CONS( 2004, epo_tfit, 0, 0, superxavix_i2c_24c04_4mb, epo_tfit, superxavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Excite Sports Tennis x Fitness (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +石川遼 エキサイトゴルフ +CONS( 2010, epo_rgfj, 0, 0, superxavix_i2c_24c08, xavix_i2c, superxavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Ishikawa Ryou Excite Golf (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) + // Let's!TVプレイ ふたりはプリキュアMaxHeart マットでダンス MaxHeartにおどっちゃおう CONS( 2004, maxheart, 0, 0, superxavix_i2c_24c04_4mb, xavix_i2c, superxavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Futari wa PreCure MaxHeart Dance on the mat Let's go to MaxHeart (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // どこでもドラえもん 日本旅行ゲームDX体感!どこドラグランプリ! -CONS( 2004, epo_doka, 0, 0, xavix2002_4mb, xavix, superxavix_state, init_xavix, "Epoch / SSD Company LTD", "Doraemon anywhere - Japan travel game DX experience! Where is the Dragon Grand Prix! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +CONS( 2004, epo_doka, 0, 0, xavix2002_4mb, xavix, superxavix_state, init_epo_doka, "Epoch / SSD Company LTD", "Doko Demo Doraemon Nihon Ryokou Game DX Taikan! Doko Dora Grand Prix! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) + +// Let's!TVプレイ なりきり体感 ボウケンジャー 走れ!撃て!ミッションスタート!! +CONS( 2006, ban_bkgj, 0, 0, superxavix_i2c_24c04_4mb,xavix_i2c, superxavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Narikiri Taikan Boukenger Hashire! Ute! Mission Start!! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) + +// Let's!TV プレイ 体感キャストオフ 仮面ライダーカブト クロックアップ&ライダーキック +CONS( 2006, ban_utmj, 0, 0, superxavix_i2c_24c02, xavix_i2c, superxavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Let's! TV Play Taikan Cast Off - Kamen Rider Kabuto Clock Up & Rider Kick!! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // それいけトーマス ソドー島のなかまたち CONS( 2005, tmy_thom, 0, 0, superxavix_i2c_24c04, xavix_i2c, superxavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Soreike Thomas - Sodor Tou no Nakamatachi / Thomas & Friends on the Island of Sodor (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/tvgames/xavix_v.cpp b/src/mame/tvgames/xavix_v.cpp index a8f3e0bed4273..aba96081e7111 100644 --- a/src/mame/tvgames/xavix_v.cpp +++ b/src/mame/tvgames/xavix_v.cpp @@ -167,6 +167,12 @@ uint8_t superxavix_state::superxavix_crtc_2_r(offs_t offset) return m_sx_crtc_2[offset]; } +void superxavix_state::ext_segment_regs_w(offs_t offset, uint8_t data) +{ + logerror("%s ext_segment_regs_w %02x %02x\n", machine().describe_context(), offset, data); + m_ext_segment_regs[offset] = data; +} + void superxavix_state::superxavix_plt_flush_w(uint8_t data) { // flush current write buffer (as we might not have filled a byte when plotting) @@ -731,7 +737,7 @@ void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_rgb32 &bitmap, if (!(tileregs[0x7] & 0x80)) return; - int alt_tileaddressing = 0; + int use_inline_header = 0; int alt_tileaddressing2 = 0; int ydimension = 0; @@ -776,9 +782,9 @@ void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_rgb32 &bitmap, } if (tileregs[0x7] & 0x10) - alt_tileaddressing = 1; + use_inline_header = 1; else - alt_tileaddressing = 0; + use_inline_header = 0; if (tileregs[0x7] & 0x02) alt_tileaddressing2 = 1; @@ -786,6 +792,10 @@ void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_rgb32 &bitmap, if ((tileregs[0x7] & 0x7f) == 0x04) alt_tileaddressing2 = 2; + // SuperXaviX only? + if ((tileregs[0x7] & 0x7f) == 0x0d) + alt_tileaddressing2 = 3; + //LOG("draw tilemap %d, regs base0 %02x base1 %02x base2 %02x tilesize,bpp %02x scrollx %02x scrolly %02x pal %02x mode %02x\n", which, tileregs[0x0], tileregs[0x1], tileregs[0x2], tileregs[0x3], tileregs[0x4], tileregs[0x5], tileregs[0x6], tileregs[0x7]); // there's a tilemap register to specify base in main ram, although in the monster truck test mode it points to an unmapped region @@ -847,6 +857,16 @@ void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_rgb32 &bitmap, int basereg; int flipx = (tileregs[0x03]&0x40)>>6; int flipy = (tileregs[0x03]&0x80)>>7; + + // epo_doka explicitly sets these registers on the XaviX logo + // but expects no flipping. Is code being executed out of order or + // is this further evidence that they don't work as expected on SuperXaviX + // hardware (see other hack for xavmusic needing sprite flip disabled) + if (m_disable_tile_regs_flip) + { + flipx = flipy = 0; + } + int gfxbase; // tile 0 is always skipped, doesn't even point to valid data packets in alt mode @@ -863,7 +883,7 @@ void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_rgb32 &bitmap, int test = 0; - if (!alt_tileaddressing) + if (!use_inline_header) { if (alt_tileaddressing2 == 0) { @@ -896,6 +916,27 @@ void xavix_state::draw_tilemap_line(screen_device &screen, bitmap_rgb32 &bitmap, tile += gfxbase; } } + else if (alt_tileaddressing2 == 3) + { + // SuperXaviX only? + if (m_ext_segment_regs) + { + // Tile Based Addressing takes into account Tile Sizes and bpp + const int offset_multiplier = (ytilesize * xtilesize) / 8; + const int basereg = 0; + gfxbase = (m_ext_segment_regs[(basereg * 4) + 3] << 24) | + (m_ext_segment_regs[(basereg * 4) + 2] << 16) | + (m_ext_segment_regs[(basereg * 4) + 1] << 8) | + (m_ext_segment_regs[(basereg * 4) + 0] << 0); + + tile = tile * (offset_multiplier * bpp); + tile += gfxbase; + } + else + { + tile = 0; + } + } // Tilemap specific mode extension with an 8-bit per tile attribute, works in all modes except 24-bit (no room for attribute) and header (not needed?) if (tileregs[0x7] & 0x08) @@ -1038,7 +1079,7 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap, int zval = (attr1 & 0xf0) >> 4; int flipx = (attr1 & 0x01); - int flipy = (attr1 & 0x02); + int flipy = (attr1 & 0x02); // many elements, including the XaviX logo on xavmusic have yflip set, but don't want it, why? if (m_disable_sprite_yflip) @@ -1154,6 +1195,20 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap, int gfxbase = (m_segment_regs[1] << 16) | (m_segment_regs[0] << 8); // always use segment 0 tile += gfxbase; + // ban_bkgj is in sprite mode 0x01 but seems to expect the extended SuperXaviX registers to apply too? + // + // Is the register being set correctly? I'd expect it to be a different value to enable this. It does + // briefly set mode 4 and 5 on the startup logos, where it *doesn't* need this logic + if (m_ext_segment_regs) + { + int gfxbase = (m_ext_segment_regs[3] << 24) | + (m_ext_segment_regs[2] << 16) | + (m_ext_segment_regs[1] << 8) | + (m_ext_segment_regs[0] << 0); + tile += gfxbase; + } + + } else if (alt_addressing == 2) { @@ -1384,7 +1439,7 @@ void superxavix_state::draw_bitmap_layer(screen_device &screen, bitmap_rgb32 &bi // anpanmdx title screen ends up with a seemingly incorrect value for start // when it does the scroller. There is presumably an opcode or math bug causing this. //if (start >= 0x7700) - /// start -= 0x3c00; + /// start -= 0x3c00; int base = start * 0x800; int base2 = topadr * 0x8; @@ -1602,6 +1657,8 @@ void xavix_state::tmap1_regs_w(offs_t offset, uint8_t data, uint8_t mem_mask) ---0 1010 (0a) 16-bit+8 addressing (8-byte alignment Addressing Mode + 8-bit Attribute) (boxing, Snowboard) ---0 1011 (0b) 16-bit+8 addressing (Addressing Mode 2 + 8-bit Attribute) + ---0 1100 (0d) ban_bkgj - seems to be a SuperXaviX only mode using the extended 32-bit segment regs + ---1 0011 (13) 16-bit addressing (Addressing Mode 2 + Inline Header) (monster truck) ---1 0100 (14) 24-bit addressing (Addressing Mode 2 + Inline Header)