mirror of
https://github.com/holub/mame
synced 2025-06-20 11:16:37 +03:00
was causing glitching in qix, merit and some others too, I guess they don't all fetch data during the scanline but rather at a fixed point, keep old behavior in MAME drivers for now.
I would be interested in seeing if supporting proper horizontal updates could fix some of the TMS34010 issues with flickering in megaphoenix / little robin tho..
This commit is contained in:
parent
56c43b95e3
commit
1a165ff7d3
@ -139,7 +139,8 @@ WRITE_LINE_MEMBER(cardline_state::hsync_changed)
|
||||
{
|
||||
/* update any video up to the current scanline */
|
||||
m_hsync_q = (state ? 0x00 : 0x10);
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cardline_state::vsync_changed)
|
||||
|
@ -101,7 +101,9 @@ void cubeqst_state::video_start()
|
||||
|
||||
WRITE16_MEMBER(cubeqst_state::palette_w)
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
COMBINE_DATA(&m_generic_paletteram_16[offset]);
|
||||
}
|
||||
|
||||
|
@ -267,7 +267,8 @@ UINT32 firefox_state::screen_update_firefox(screen_device &screen, bitmap_rgb32
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(firefox_state::video_timer_callback)
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE );
|
||||
}
|
||||
|
@ -5235,7 +5235,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(galaxian_state::timefgtr_scanline)
|
||||
// change spriteram base per each 64-line part of the screen
|
||||
if ((split & 0x3f) == 0)
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_sprites_base = 0x40 | (split << 2 & 0x300);
|
||||
}
|
||||
}
|
||||
|
@ -232,7 +232,8 @@ WRITE8_MEMBER(merit_state::palette_w)
|
||||
{
|
||||
int co;
|
||||
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
data &= 0x0f;
|
||||
|
||||
co = ((m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07);
|
||||
@ -305,7 +306,8 @@ MC6845_UPDATE_ROW( merit_state::crtc_update_row )
|
||||
WRITE_LINE_MEMBER(merit_state::hsync_changed)
|
||||
{
|
||||
/* update any video up to the current scanline */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(merit_state::vsync_changed)
|
||||
|
@ -879,7 +879,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_timer_cb)
|
||||
m_subcpu->set_input_line(IRQ_TIMER+1, ASSERT_LINE);
|
||||
|
||||
if (irq_tmode == 1 || irq_tmode == 2)
|
||||
m_screen->update_now();
|
||||
{
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
}
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(segas24_state::irq_timer_clear_cb)
|
||||
|
@ -82,7 +82,8 @@ WRITE8_MEMBER(slotcarn_state::palette_w)
|
||||
{
|
||||
int co;
|
||||
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
data &= 0x0f;
|
||||
|
||||
co = ((m_ram_attr[offset] & 0x7F) << 3) | (offset & 0x07);
|
||||
@ -157,7 +158,8 @@ MC6845_UPDATE_ROW( slotcarn_state::crtc_update_row )
|
||||
WRITE_LINE_MEMBER(slotcarn_state::hsync_changed)
|
||||
{
|
||||
/* update any video up to the current scanline */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(slotcarn_state::vsync_changed)
|
||||
|
@ -207,14 +207,16 @@ int vicdual_state::is_cabinet_color()
|
||||
|
||||
WRITE8_MEMBER(vicdual_state::videoram_w)
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_videoram[offset] = data;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(vicdual_state::characterram_w)
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_characterram[offset] = data;
|
||||
}
|
||||
|
||||
|
@ -93,7 +93,8 @@ WRITE16_MEMBER( btoads_state::display_control_w )
|
||||
WRITE16_MEMBER( btoads_state::scroll0_w )
|
||||
{
|
||||
/* allow multiple changes during display */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
/* upper bits are Y scroll, lower bits are X scroll */
|
||||
if (ACCESSING_BITS_8_15)
|
||||
@ -106,7 +107,8 @@ WRITE16_MEMBER( btoads_state::scroll0_w )
|
||||
WRITE16_MEMBER( btoads_state::scroll1_w )
|
||||
{
|
||||
/* allow multiple changes during display */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
/* upper bits are Y scroll, lower bits are X scroll */
|
||||
if (ACCESSING_BITS_8_15)
|
||||
|
@ -92,7 +92,9 @@ void cloak_state::set_current_bitmap_videoram_pointer()
|
||||
|
||||
WRITE8_MEMBER(cloak_state::cloak_clearbmp_w)
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
m_bitmap_videoram_selected = data & 0x01;
|
||||
set_current_bitmap_videoram_pointer();
|
||||
|
||||
|
@ -876,7 +876,8 @@ TIMER_CALLBACK_MEMBER(dkong_state::scanline_callback)
|
||||
radarscp_scanline(scanline);
|
||||
|
||||
/* update any video up to the current scanline */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
scanline = (scanline+1) % VTOTAL;
|
||||
/* come back at the next appropriate scanline */
|
||||
|
@ -480,7 +480,8 @@ WRITE8_MEMBER(galaxian_state::galaxian_videoram_w)
|
||||
{
|
||||
UINT8 *videoram = m_videoram;
|
||||
/* update any video up to the current scanline */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
/* store the data and mark the corresponding tile dirty */
|
||||
videoram[offset] = data;
|
||||
@ -491,7 +492,8 @@ WRITE8_MEMBER(galaxian_state::galaxian_videoram_w)
|
||||
WRITE8_MEMBER(galaxian_state::galaxian_objram_w)
|
||||
{
|
||||
/* update any video up to the current scanline */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
/* store the data */
|
||||
m_spriteram[offset] = data;
|
||||
@ -641,7 +643,8 @@ WRITE8_MEMBER(galaxian_state::galaxian_flip_screen_x_w)
|
||||
{
|
||||
if (m_flipscreen_x != (data & 0x01))
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
/* when the direction changes, we count a different number of clocks */
|
||||
/* per frame, so we need to reset the origin of the stars to the current */
|
||||
@ -657,7 +660,9 @@ WRITE8_MEMBER(galaxian_state::galaxian_flip_screen_y_w)
|
||||
{
|
||||
if (m_flipscreen_y != (data & 0x01))
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
m_flipscreen_y = data & 0x01;
|
||||
m_bg_tilemap->set_flip((m_flipscreen_x ? TILEMAP_FLIPX : 0) | (m_flipscreen_y ? TILEMAP_FLIPY : 0));
|
||||
}
|
||||
@ -680,7 +685,10 @@ WRITE8_MEMBER(galaxian_state::galaxian_flip_screen_xy_w)
|
||||
WRITE8_MEMBER(galaxian_state::galaxian_stars_enable_w)
|
||||
{
|
||||
if ((m_stars_enabled ^ data) & 0x01)
|
||||
m_screen->update_now();
|
||||
{
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
}
|
||||
|
||||
if (!m_stars_enabled && (data & 0x01))
|
||||
{
|
||||
@ -697,7 +705,10 @@ WRITE8_MEMBER(galaxian_state::galaxian_stars_enable_w)
|
||||
WRITE8_MEMBER(galaxian_state::scramble_background_enable_w)
|
||||
{
|
||||
if ((m_background_enable ^ data) & 0x01)
|
||||
m_screen->update_now();
|
||||
{
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
}
|
||||
|
||||
m_background_enable = data & 0x01;
|
||||
}
|
||||
@ -706,7 +717,10 @@ WRITE8_MEMBER(galaxian_state::scramble_background_enable_w)
|
||||
WRITE8_MEMBER(galaxian_state::scramble_background_red_w)
|
||||
{
|
||||
if ((m_background_red ^ data) & 0x01)
|
||||
m_screen->update_now();
|
||||
{
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
}
|
||||
|
||||
m_background_red = data & 0x01;
|
||||
}
|
||||
@ -715,7 +729,10 @@ WRITE8_MEMBER(galaxian_state::scramble_background_red_w)
|
||||
WRITE8_MEMBER(galaxian_state::scramble_background_green_w)
|
||||
{
|
||||
if ((m_background_green ^ data) & 0x01)
|
||||
m_screen->update_now();
|
||||
{
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
}
|
||||
|
||||
m_background_green = data & 0x01;
|
||||
}
|
||||
@ -724,7 +741,10 @@ WRITE8_MEMBER(galaxian_state::scramble_background_green_w)
|
||||
WRITE8_MEMBER(galaxian_state::scramble_background_blue_w)
|
||||
{
|
||||
if ((m_background_blue ^ data) & 0x01)
|
||||
m_screen->update_now();
|
||||
{
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
}
|
||||
|
||||
m_background_blue = data & 0x01;
|
||||
}
|
||||
@ -741,7 +761,8 @@ WRITE8_MEMBER(galaxian_state::galaxian_gfxbank_w)
|
||||
{
|
||||
if (m_gfxbank[offset] != data)
|
||||
{
|
||||
m_screen->update_now();
|
||||
//m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_gfxbank[offset] = data;
|
||||
m_bg_tilemap->mark_all_dirty();
|
||||
}
|
||||
|
@ -93,7 +93,8 @@ PALETTE_INIT_MEMBER(gyruss_state, gyruss)
|
||||
|
||||
WRITE8_MEMBER(gyruss_state::gyruss_spriteram_w)
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_spriteram[offset] = data;
|
||||
}
|
||||
|
||||
|
@ -537,7 +537,8 @@ WRITE8_MEMBER(itech8_state::grmatch_palette_w)
|
||||
WRITE8_MEMBER(itech8_state::grmatch_xscroll_w)
|
||||
{
|
||||
/* update the X scroll value */
|
||||
m_screen->update_now();
|
||||
//m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_grmatch_xscroll = data;
|
||||
}
|
||||
|
||||
|
@ -64,7 +64,8 @@ WRITE8_MEMBER(meadows_state::meadows_videoram_w)
|
||||
|
||||
WRITE8_MEMBER(meadows_state::meadows_spriteram_w)
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_spriteram[offset] = data;
|
||||
}
|
||||
|
||||
|
@ -99,7 +99,8 @@ WRITE8_MEMBER(qix_state::qix_videoram_w)
|
||||
{
|
||||
/* update the screen in case the game is writing "behind" the beam -
|
||||
Zookeeper likes to do this */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
/* add in the upper bit of the address latch */
|
||||
offset += (m_videoram_address[0] & 0x80) << 8;
|
||||
@ -113,7 +114,8 @@ WRITE8_MEMBER(qix_state::slither_videoram_w)
|
||||
{
|
||||
/* update the screen in case the game is writing "behind" the beam -
|
||||
Zookeeper likes to do this */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
/* add in the upper bit of the address latch */
|
||||
offset += (m_videoram_address[0] & 0x80) << 8;
|
||||
@ -150,7 +152,8 @@ READ8_MEMBER(qix_state::qix_addresslatch_r)
|
||||
WRITE8_MEMBER(qix_state::qix_addresslatch_w)
|
||||
{
|
||||
/* update the screen in case the game is writing "behind" the beam */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
/* compute the value at the address latch */
|
||||
offset = (m_videoram_address[0] << 8) | m_videoram_address[1];
|
||||
@ -163,7 +166,8 @@ WRITE8_MEMBER(qix_state::qix_addresslatch_w)
|
||||
WRITE8_MEMBER(qix_state::slither_addresslatch_w)
|
||||
{
|
||||
/* update the screen in case the game is writing "behind" the beam */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
|
||||
/* compute the value at the address latch */
|
||||
offset = (m_videoram_address[0] << 8) | m_videoram_address[1];
|
||||
@ -191,7 +195,10 @@ WRITE8_MEMBER(qix_state::qix_paletteram_w)
|
||||
/* trigger an update if a currently visible pen has changed */
|
||||
if (((offset >> 8) == m_palette_bank) &&
|
||||
(old_data != data))
|
||||
m_screen->update_now();
|
||||
{
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
}
|
||||
|
||||
set_pen(offset);
|
||||
}
|
||||
@ -202,7 +209,8 @@ WRITE8_MEMBER(qix_state::qix_palettebank_w)
|
||||
/* set the bank value */
|
||||
if (m_palette_bank != (data & 3))
|
||||
{
|
||||
m_screen->update_now();
|
||||
//m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_palette_bank = data & 3;
|
||||
}
|
||||
|
||||
|
@ -19,14 +19,16 @@
|
||||
|
||||
WRITE8_MEMBER(spacefb_state::port_0_w)
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_port_0 = data;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(spacefb_state::port_2_w)
|
||||
{
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_port_2 = data;
|
||||
}
|
||||
|
||||
|
@ -106,7 +106,8 @@ PALETTE_INIT_MEMBER(tp84_state, tp84)
|
||||
WRITE8_MEMBER(tp84_state::tp84_spriteram_w)
|
||||
{
|
||||
/* the game multiplexes the sprites, so update now */
|
||||
m_screen->update_now();
|
||||
// m_screen->update_now();
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
m_spriteram[offset] = data;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user