diff --git a/hash/mobigo_cart.xml b/hash/mobigo_cart.xml index ca1ab5d33d0..3a390b0d2bb 100644 --- a/hash/mobigo_cart.xml +++ b/hash/mobigo_cart.xml @@ -147,6 +147,39 @@ + + + Toy Story 3 + 201? + VTech + + + + + + + + + Mickey Mouse + 201? + VTech + + + + + + + + + Tangled + 201? + VTech + + + + + + diff --git a/hash/pi_storyreader_cart.xml b/hash/pi_storyreader_cart.xml index dfa32f9bf37..8e4ee985a86 100644 --- a/hash/pi_storyreader_cart.xml +++ b/hash/pi_storyreader_cart.xml @@ -2,13 +2,16 @@ + + Disney's Bambi / Lady and the Tramp / Peter Pan 200? Publications International Ltd. / Disney - + + @@ -20,7 +23,8 @@ - + + @@ -44,7 +48,8 @@ - + + @@ -68,7 +73,8 @@ - + + @@ -126,7 +132,8 @@ - + + @@ -137,7 +144,8 @@ Publications International Ltd. / Disney - + + @@ -173,7 +181,8 @@ - + + @@ -184,7 +193,8 @@ Publications International Ltd. / Disney - + + @@ -208,7 +218,8 @@ - + + @@ -232,7 +243,8 @@ - + + @@ -244,7 +256,8 @@ - + + @@ -260,4 +273,16 @@ + + Scooby Doo - Miniature Golf Mystery / Museum Mystery / Haunted Theater + 200? + Publications International Ltd. + + + + + + + + diff --git a/src/devices/machine/spg2xx.cpp b/src/devices/machine/spg2xx.cpp index 2a6aafdfaea..034854cd68a 100644 --- a/src/devices/machine/spg2xx.cpp +++ b/src/devices/machine/spg2xx.cpp @@ -14,8 +14,9 @@ #include "emu.h" #include "spg2xx.h" -DEFINE_DEVICE_TYPE(SPG24X, spg24x_device, "spg24x", "SPG240-series System-on-a-Chip") -DEFINE_DEVICE_TYPE(SPG28X, spg28x_device, "spg28x", "SPG280-series System-on-a-Chip") +DEFINE_DEVICE_TYPE(SPG24X, spg24x_device, "spg24x", "SPG240-series System-on-a-Chip") // 256 sprites +DEFINE_DEVICE_TYPE(SPG2XX_128, spg2xx_128_device, "spg2xx_128", "SPG2xx-series System-on-a-Chip (128 sprites)") // exact SPG part number unknown +DEFINE_DEVICE_TYPE(SPG28X, spg28x_device, "spg28x", "SPG280-series System-on-a-Chip") // 64 sprites spg2xx_device::spg2xx_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint16_t sprite_limit, address_map_constructor internal) : @@ -26,7 +27,6 @@ spg2xx_device::spg2xx_device(const machine_config &mconfig, device_type type, co m_spg_sysdma(*this, "spgsysdma"), m_spg_video(*this, "spgvideo"), m_sprite_limit(sprite_limit), - m_rowscrolloffset(15), m_porta_out(*this), m_portb_out(*this), m_portc_out(*this), @@ -50,8 +50,19 @@ spg24x_device::spg24x_device(const machine_config &mconfig, const char *tag, dev { } +spg24x_device::spg24x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint16_t sprite_limit, address_map_constructor internal) : + spg2xx_device(mconfig, type, tag, owner, clock, sprite_limit, internal) +{ +} + + +spg2xx_128_device::spg2xx_128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + spg24x_device(mconfig, SPG2XX_128, tag, owner, clock, 128, address_map_constructor(FUNC(spg2xx_128_device::internal_map), this)) +{ +} + spg28x_device::spg28x_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - spg2xx_device(mconfig, SPG28X, tag, owner, clock, 64, address_map_constructor(FUNC(spg28x_device::internal_map), this)) + spg24x_device(mconfig, SPG28X, tag, owner, clock, 64, address_map_constructor(FUNC(spg28x_device::internal_map), this)) { } @@ -77,6 +88,7 @@ void spg2xx_device::device_start() m_porta_out.resolve_safe(); m_portb_out.resolve_safe(); m_portc_out.resolve_safe(); + m_portc_out.resolve_safe(); m_porta_in.resolve_safe(0); m_portb_in.resolve_safe(0); m_portc_in.resolve_safe(0); @@ -203,31 +215,7 @@ void spg24x_device::device_add_mconfig(machine_config &config) SPG24X_VIDEO(config, m_spg_video, DERIVED_CLOCK(1, 1), DEVICE_SELF, m_screen); m_spg_video->sprlimit_read_callback().set(FUNC(spg24x_device::get_sprlimit)); - m_spg_video->rowscrolloffset_read_callback().set(FUNC(spg24x_device::get_rowscrolloffset)); m_spg_video->write_video_irq_callback().set(FUNC(spg24x_device::videoirq_w)); - configure_spg_io(m_spg_io); - -} - -void spg28x_device::device_add_mconfig(machine_config &config) -{ - SPG2XX_AUDIO(config, m_spg_audio, DERIVED_CLOCK(1, 1)); - m_spg_audio->write_irq_callback().set(FUNC(spg28x_device::audioirq_w)); - m_spg_audio->channel_irq_callback().set(FUNC(spg28x_device::audiochirq_w)); - m_spg_audio->space_read_callback().set(FUNC(spg28x_device::space_r)); - - m_spg_audio->add_route(0, *this, 1.0, AUTO_ALLOC_INPUT, 0); - m_spg_audio->add_route(1, *this, 1.0, AUTO_ALLOC_INPUT, 1); - - SPG28X_IO(config, m_spg_io, DERIVED_CLOCK(1, 1), DEVICE_SELF, m_screen); - - SPG2XX_SYSDMA(config, m_spg_sysdma, DERIVED_CLOCK(1, 1), DEVICE_SELF); - - SPG24X_VIDEO(config, m_spg_video, DERIVED_CLOCK(1, 1), DEVICE_SELF, m_screen); - m_spg_video->sprlimit_read_callback().set(FUNC(spg28x_device::get_sprlimit)); - m_spg_video->rowscrolloffset_read_callback().set(FUNC(spg28x_device::get_rowscrolloffset)); - m_spg_video->write_video_irq_callback().set(FUNC(spg28x_device::videoirq_w)); - configure_spg_io(m_spg_io); } diff --git a/src/devices/machine/spg2xx.h b/src/devices/machine/spg2xx.h index e67636eaa8d..9f1c47f68ee 100644 --- a/src/devices/machine/spg2xx.h +++ b/src/devices/machine/spg2xx.h @@ -44,7 +44,6 @@ class spg2xx_device : public unsp_device, public device_mixer_interface { public: void set_pal(bool pal) { m_pal_flag = pal ? 1 : 0; } - void set_rowscroll_offset(int offset) { m_rowscrolloffset = offset; } auto porta_out() { return m_porta_out.bind(); } auto portb_out() { return m_portb_out.bind(); } @@ -100,10 +99,8 @@ protected: // TODO: these are fixed values, put them in relevant devices? uint16_t m_sprite_limit; - uint16_t m_rowscrolloffset; // auto racing in 'zone60' minigames needs this to be 15, the JAKKS games (Star Wars Revenge of the sith - Gunship Battle, Wheel of Fortune, Namco Ms. Pac-Man 5-in-1 Pole Position) need it to be 0, where does it come from? uint16_t m_pal_flag; DECLARE_READ16_MEMBER(get_sprlimit) { return m_sprite_limit; } - DECLARE_READ16_MEMBER(get_rowscrolloffset) { return m_rowscrolloffset; } DECLARE_READ16_MEMBER(get_pal_ntsc) { return m_pal_flag; } devcb_write16 m_porta_out; @@ -162,13 +159,28 @@ public: m_screen.set_tag(std::forward(screen_tag)); } + spg24x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint16_t sprite_limit, address_map_constructor internal); + spg24x_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual void device_add_mconfig(machine_config &config) override; }; -class spg28x_device : public spg2xx_device +class spg2xx_128_device : public spg24x_device +{ +public: + template + spg2xx_128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&screen_tag) + : spg2xx_128_device(mconfig, tag, owner, clock) + { + m_screen.set_tag(std::forward(screen_tag)); + } + + spg2xx_128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class spg28x_device : public spg24x_device { public: template @@ -180,10 +192,9 @@ public: spg28x_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual void device_add_mconfig(machine_config &config) override; - }; +DECLARE_DEVICE_TYPE(SPG2XX_128, spg2xx_128_device) DECLARE_DEVICE_TYPE(SPG24X, spg24x_device) DECLARE_DEVICE_TYPE(SPG28X, spg28x_device) diff --git a/src/devices/machine/spg2xx_video.cpp b/src/devices/machine/spg2xx_video.cpp index b9f6b3633c1..f5766a749bf 100644 --- a/src/devices/machine/spg2xx_video.cpp +++ b/src/devices/machine/spg2xx_video.cpp @@ -33,7 +33,6 @@ spg2xx_video_device::spg2xx_video_device(const machine_config &mconfig, device_t m_guny_in(*this), m_gunx_in(*this), m_sprlimit_read_cb(*this), - m_rowscrolloffset_read_cb(*this), m_cpu(*this, finder_base::DUMMY_TAG), m_screen(*this, finder_base::DUMMY_TAG), m_scrollram(*this, "scrollram"), @@ -78,7 +77,6 @@ void spg2xx_video_device::device_start() save_item(NAME(m_video_regs)); m_sprlimit_read_cb.resolve_safe(0); - m_rowscrolloffset_read_cb.resolve_safe(0); m_video_irq_cb.resolve(); } @@ -113,7 +111,7 @@ inline uint8_t spg2xx_video_device::mix_channel(uint8_t bottom, uint8_t top) } template -void spg2xx_video_device::draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t bitmap_addr, uint16_t tile, int32_t h, int32_t w, uint8_t bpp, uint32_t yflipmask, uint32_t palette_offset) +void spg2xx_video_device::draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t bitmap_addr, uint16_t tile, int32_t h, int32_t w, uint8_t bpp, uint32_t yflipmask, uint32_t palette_offset, int yscroll) { address_space &space = m_cpu->space(AS_PROGRAM); @@ -174,7 +172,9 @@ void spg2xx_video_device::draw(const rectangle &cliprect, uint32_t line, uint32_ bits &= 0xffff; if (RowScroll) - xx -= (int16_t)m_scrollram[(yy + m_rowscrolloffset_read_cb()) & 0x1ff]; + { + xx -= (int16_t)m_scrollram[(yy + yscroll) & 0xff]; + } xx &= 0x01ff; if (xx >= 0x01c0) @@ -355,16 +355,16 @@ void spg2xx_video_device::draw_page(const rectangle &cliprect, uint32_t scanline if (row_scroll) { if (flip_x) - draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset, yscroll); else - draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset, yscroll); } else { if (flip_x) - draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset, yscroll); else - draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset, yscroll); } } else @@ -372,16 +372,16 @@ void spg2xx_video_device::draw_page(const rectangle &cliprect, uint32_t scanline if (row_scroll) { if (flip_x) - draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset, yscroll); else - draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset, yscroll); } else { if (flip_x) - draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset, yscroll); else - draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_scanline, xx, yy, bitmap_addr, tile, tile_h, tile_w, bpp, yflipmask, palette_offset, yscroll); } } } @@ -441,32 +441,32 @@ void spg2xx_video_device::draw_sprite(const rectangle &cliprect, uint32_t scanli if (blend) { if (flip_x) - draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset, 0); else - draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset, 0); } else { if (flip_x) - draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset, 0); else - draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset, 0); } m_debug_blit = false; #else if (blend) { if (flip_x) - draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset, 0); else - draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset, 0); } else { if (flip_x) - draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset, 0); else - draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset); + draw(cliprect, tile_line, x, y, bitmap_addr, tile, h, w, bpp, yflipmask, palette_offset, 0); } #endif } diff --git a/src/devices/machine/spg2xx_video.h b/src/devices/machine/spg2xx_video.h index 699f20e6d38..6debca5de2c 100644 --- a/src/devices/machine/spg2xx_video.h +++ b/src/devices/machine/spg2xx_video.h @@ -30,7 +30,6 @@ public: DECLARE_WRITE16_MEMBER(video_w); auto sprlimit_read_callback() { return m_sprlimit_read_cb.bind(); }; - auto rowscrolloffset_read_callback() { return m_rowscrolloffset_read_cb.bind(); }; auto write_video_irq_callback() { return m_video_irq_cb.bind(); }; @@ -90,7 +89,7 @@ protected: void apply_fade(const rectangle &cliprect); template - void draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t bitmap_addr, uint16_t tile, int32_t h, int32_t w, uint8_t bpp, uint32_t yflipmask, uint32_t palette_offset); + void draw(const rectangle &cliprect, uint32_t line, uint32_t xoff, uint32_t yoff, uint32_t bitmap_addr, uint16_t tile, int32_t h, int32_t w, uint8_t bpp, uint32_t yflipmask, uint32_t palette_offset, int yscroll); void draw_bitmap(const rectangle& cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t* regs); void draw_page(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t bitmap_addr, uint16_t *regs); void draw_sprite(const rectangle &cliprect, uint32_t scanline, int priority, uint32_t base_addr); @@ -113,7 +112,6 @@ protected: uint16_t m_video_regs[0x100]; devcb_read16 m_sprlimit_read_cb; - devcb_read16 m_rowscrolloffset_read_cb; emu_timer *m_screenpos_timer; diff --git a/src/mame/drivers/spg2xx.cpp b/src/mame/drivers/spg2xx.cpp index 6a1ff1a993c..bf882bb2952 100644 --- a/src/mame/drivers/spg2xx.cpp +++ b/src/mame/drivers/spg2xx.cpp @@ -788,6 +788,33 @@ static INPUT_PORTS_START( pballpup ) PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END +static INPUT_PORTS_START( swclone ) // TODO + PORT_START("GUNY") + PORT_BIT(0x0ff, 0x80, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 256.0f / 240.0f, 0.0, 0) PORT_MINMAX(0x000, 0x0ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_START("GUNX") + PORT_BIT(0x1ff, 0x100, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 512.0f / 320.0f, -0.03f, 0) PORT_MINMAX(0x000, 0x1ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_START("P1") + PORT_BIT( 0x003f, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0xfc00, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("P2") + PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("P3") + PORT_BIT( 0x000f, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON4 ) // pause + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // trigger + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON2 ) // hide + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 ) // reload + PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED ) +INPUT_PORTS_END + static INPUT_PORTS_START( tmntmutm ) PORT_START("GUNY") PORT_BIT(0x0ff, 0x80, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 256.0f / 240.0f, 0.0, 0) PORT_MINMAX(0x000, 0x0ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) @@ -1034,8 +1061,6 @@ void spg2xx_game_state::abltenni(machine_config &config) m_maincpu->porta_in().set_ioport("P1"); m_maincpu->portb_in().set_ioport("P2"); m_maincpu->portc_in().set_ioport("P3"); - - m_maincpu->set_rowscroll_offset(8); } void spg2xx_game_state::guitarfv(machine_config &config) @@ -1123,6 +1148,28 @@ void spg2xx_game_pballpup_state::pballpup(machine_config &config) EEPROM_93C66_16BIT(config, m_eeprom); // type? } +void spg2xx_game_swclone_state::swclone(machine_config &config) +{ + SPG2XX_128(config, m_maincpu, XTAL(27'000'000), m_screen); + m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_swclone_state::mem_map_4m); + + spg2xx_base(config); + + m_maincpu->porta_in().set(FUNC(spg2xx_game_swclone_state::base_porta_r)); + m_maincpu->portb_in().set(FUNC(spg2xx_game_swclone_state::base_portb_r)); + m_maincpu->portc_in().set(FUNC(spg2xx_game_swclone_state::base_portc_r)); + + m_maincpu->porta_out().set(FUNC(spg2xx_game_swclone_state::porta_w)); + m_maincpu->portb_out().set(FUNC(spg2xx_game_swclone_state::portb_w)); + m_maincpu->portc_out().set(FUNC(spg2xx_game_swclone_state::portc_w)); + + m_maincpu->guny_in().set(FUNC(spg2xx_game_swclone_state::base_guny_r)); + m_maincpu->gunx_in().set(FUNC(spg2xx_game_swclone_state::base_gunx_r)); + + I2C_24C08(config, "i2cmem", 0); +} + + READ16_MEMBER(spg2xx_game_dreamlss_state::porta_r) { @@ -1180,7 +1227,7 @@ void spg2xx_game_dreamlss_state::dreamlss(machine_config &config) m_maincpu->portb_out().set(FUNC(spg2xx_game_dreamlss_state::portb_w)); m_maincpu->portc_out().set(FUNC(spg2xx_game_dreamlss_state::portc_w)); - I2C_24C08(config, "i2cmem", 0); // 24LC08 + I2C_24C08(config, "i2cmem", 0); } @@ -1302,6 +1349,9 @@ ROM_END ROM_START( pballpup ) ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "paintballpoweredup.bin", 0x000000, 0x1000000, CRC(57dbdfd1) SHA1(d98cb7321cc7af092f6f4f83e85fabbdbc1bbd95) ) + + ROM_REGION16_BE( 0x200, "eeprom", ROMREGION_ERASE00 ) + // ensure eeprom defaults to 00 or there are unwanted invalid entries already saved ROM_END ROM_START( dreamlss ) @@ -1309,8 +1359,6 @@ ROM_START( dreamlss ) ROM_LOAD16_WORD_SWAP( "dreamlifesuperstar.bin", 0x000000, 0x1000000, CRC(aefad2c3) SHA1(cf962082f09e27d7d24cfc722ae978d9aa735a57) ) ROM_END - - ROM_START( swclone ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD16_WORD_SWAP( "swclone.bin", 0x000000, 0x800000, CRC(2c983509) SHA1(6138f21fe0b82a7121c4639b6833d4014d5aeb74) ) @@ -1355,11 +1403,10 @@ void spg2xx_game_state::init_tvsprt10() if (rom[0x179911] == 0x9240) rom[0x179911] ^= 0x0001; // decathln } -void spg2xx_game_state::init_dreamlss() +void spg2xx_game_swclone_state::init_swclone() { - // temp hack! skip I2CMEM loading / test! - //uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); - //rom[0x4bb37] = 0x9640; + uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); + rom[0x2649d1] = 0x0000; // don't write 0x1234 to the start of the RAM that is copied to spriteram on startup (this is an explicit write, probably actually a failure condition for something?) } @@ -1376,8 +1423,8 @@ CONS( 2007, rad_fb2, 0, 0, rad_skat, rad_fb2, spg2xx_game_state, ini CONS( 2006, abltenni, 0, 0, abltenni, abltenni, spg2xx_game_state, empty_init, "Advance Bright Ltd / V-Tac Technology Co Ltd.", "Wireless Tennis (WT2000, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // same as Excalibur Decathlon? not the same as the ABL game -CONS( 2006, tvsprt10, 0, 0, tvsprt10, tvsprt10, spg2xx_game_state, init_tvsprt10, "Simba / V-Tac Technology Co Ltd.", "TV Sports 10-in-1 / Decathlon Atlhetic Sport Games", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) -CONS( 200?, decathln, 0, 0, tvsprt10, decathln, spg2xx_game_state, init_tvsprt10, "Advance Bright Ltd / V-Tac Technology Co Ltd.", "Decathlon", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // unit found in Spain +CONS( 2006, tvsprt10, 0, 0, tvsprt10, tvsprt10, spg2xx_game_state, init_tvsprt10, "Simba / V-Tac Technology Co Ltd.", "TV Sports 10-in-1 / Decathlon Atlhetic Sport Games", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 200?, decathln, 0, 0, tvsprt10, decathln, spg2xx_game_state, init_tvsprt10, "Advance Bright Ltd / V-Tac Technology Co Ltd.", "Decathlon", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // unit found in Spain CONS( 2007, guitarfv, 0, 0, guitarfv, guitarfv, spg2xx_game_state, empty_init, "Advance Bright Ltd", "Guitar Fever (2007.07.03 Ver 2.7)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) @@ -1390,11 +1437,11 @@ CONS( 2005, tmntmutm, 0, 0, tmntmutm, tmntmutm, spg2xx_gam CONS( 2006, pballpup, 0, 0, pballpup, pballpup, spg2xx_game_pballpup_state, empty_init, "Hasbro / Tiger Electronics", "Mission: Paintball Powered Up", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) -CONS( 2007, dreamlss, 0, 0, dreamlss, dreamlss, spg2xx_game_dreamlss_state, init_dreamlss, "Hasbro / Tiger Electronics", "Dream Life Superstar (Version 0.3, Mar 16 2007)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 2007, dreamlss, 0, 0, dreamlss, dreamlss, spg2xx_game_dreamlss_state, empty_init, "Hasbro / Tiger Electronics", "Dream Life Superstar (Version 0.3, Mar 16 2007)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) -// some garbage sprites (not meant to be displayed at all) seeprom hookup (24LC08), gun fine-tuning etc. -CONS( 2008, swclone, 0, 0, pballpup, pballpup, spg2xx_game_pballpup_state, empty_init, "Hasbro / Tiger Electronics", "Star Wars - The Clone Wars", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +// meeds a hack to not show garbage sprite on startup, seeprom hookup (24LC08), gun fine-tuning etc. +CONS( 2008, swclone, 0, 0, swclone, swclone, spg2xx_game_swclone_state, init_swclone, "Hasbro / Tiger Electronics", "Star Wars - The Clone Wars", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // Mattel games CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, empty_init, "Mattel", "Mattel Classic Sports", MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/drivers/spg2xx_jakks_gkr.cpp b/src/mame/drivers/spg2xx_jakks_gkr.cpp index 535728f0476..11c2389801c 100644 --- a/src/mame/drivers/spg2xx_jakks_gkr.cpp +++ b/src/mame/drivers/spg2xx_jakks_gkr.cpp @@ -440,7 +440,6 @@ void jakks_gkr_state::jakks_gkr(machine_config &config) m_maincpu->portb_out().set(FUNC(jakks_gkr_state::jakks_portb_w)); m_maincpu->portc_in().set_ioport("P3"); m_maincpu->portc_out().set(FUNC(jakks_gkr_state::gkr_portc_w)); - m_maincpu->set_rowscroll_offset(0); JAKKS_GAMEKEY_SLOT(config, m_cart, 0, jakks_gamekey, nullptr); } diff --git a/src/mame/drivers/spg2xx_mysprtch.cpp b/src/mame/drivers/spg2xx_mysprtch.cpp index 6505e99363f..73fbc0c56aa 100644 --- a/src/mame/drivers/spg2xx_mysprtch.cpp +++ b/src/mame/drivers/spg2xx_mysprtch.cpp @@ -317,8 +317,6 @@ void spg2xx_game_mysprtch_state::mysprtch(machine_config& config) m_maincpu->portc_in().set(FUNC(spg2xx_game_mysprtch_state::base_portc_r)); m_maincpu->porta_out().set(FUNC(spg2xx_game_mysprtch_state::porta_w)); - - m_maincpu->set_rowscroll_offset(8); // for Tennis } void spg2xx_game_mysprtch_state::mgt20in1(machine_config& config) diff --git a/src/mame/includes/spg2xx.h b/src/mame/includes/spg2xx.h index 219ce30dce0..ba3b6d6e584 100644 --- a/src/mame/includes/spg2xx.h +++ b/src/mame/includes/spg2xx.h @@ -48,7 +48,6 @@ public: void init_crc(); void init_wiwi18(); void init_tvsprt10(); - void init_dreamlss(); protected: virtual void machine_start() override; @@ -106,6 +105,22 @@ private: required_device m_eeprom; }; +class spg2xx_game_swclone_state : public spg2xx_game_state +{ +public: + spg2xx_game_swclone_state(const machine_config &mconfig, device_type type, const char *tag) : + spg2xx_game_state(mconfig, type, tag), + m_i2cmem(*this, "i2cmem") + { } + + void swclone(machine_config &config); + void init_swclone(); + +private: + required_device m_i2cmem; +}; + + class spg2xx_game_dreamlss_state : public spg2xx_game_state { public: