diff options
-rw-r--r-- | src/devices/video/upd7220.cpp | 9 | ||||
-rw-r--r-- | src/mame/nec/pc9801.cpp | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/devices/video/upd7220.cpp b/src/devices/video/upd7220.cpp index 5398998b55c..06c04f232bb 100644 --- a/src/devices/video/upd7220.cpp +++ b/src/devices/video/upd7220.cpp @@ -346,7 +346,12 @@ inline void upd7220_device::dequeue(uint8_t *data, int *flag) inline void upd7220_device::update_vsync_timer(int state) { - int next_y = state ? (m_vs + m_vbp) : 0; + const int vert_mult = (m_mode & UPD7220_MODE_INTERLACE_MASK) == UPD7220_MODE_INTERLACE_ON ? 2 : 1; + + // page 6-68, route vsync so that top is start of back porch, end is at sync time + // (at bottom of MAME vpos() mechanism) + // - pc9801:lemmings and pc9801:spindiz2 cares + int next_y = state ? (m_vbp + m_al + m_vfp) * vert_mult : 0; attotime duration = screen().time_until_pos(next_y, 0); @@ -1888,7 +1893,7 @@ void upd7220_device::update_graphics(bitmap_rgb32 &bitmap, const rectangle &clip int yval = (y*zoom)+z + (bsy + m_vbp); // pc9801:duel sets up bitmap layer with height 384 vs. 400 of text layer // so we scissor here, interlace wants it bumped x2 (microbx2) - if(yval <= cliprect.bottom() && (yval - m_vbp) < m_al << interlace) + if(yval >= cliprect.top() && yval <= cliprect.bottom() && (yval - m_vbp) < m_al << interlace) draw_graphics_line(bitmap, addr, yval, wd, pitch_shift); } } diff --git a/src/mame/nec/pc9801.cpp b/src/mame/nec/pc9801.cpp index 5105de995a7..0b0552a401b 100644 --- a/src/mame/nec/pc9801.cpp +++ b/src/mame/nec/pc9801.cpp @@ -847,6 +847,8 @@ void pc9801vm_state::pc9801rs_a0_w(offs_t offset, uint8_t data) pal4bit(m_analog16.g[m_analog16.pal_entry]), pal4bit(m_analog16.b[m_analog16.pal_entry]) ); + // lemmings raster effects + m_screen->update_partial(m_screen->vpos()); return; } |