summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/upd7220.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video/upd7220.cpp')
-rw-r--r--src/devices/video/upd7220.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/devices/video/upd7220.cpp b/src/devices/video/upd7220.cpp
index 746207e8ef5..1216839dce8 100644
--- a/src/devices/video/upd7220.cpp
+++ b/src/devices/video/upd7220.cpp
@@ -18,7 +18,6 @@
- read data
- modify data
- write data
- - QX-10 diagnostic test misses the zooming factor (external pin);
- compis2 SAD address for bitmap is 0x20000 for whatever reason (presumably missing banking);
- A5105 has a FIFO bug with the RDAT, should be a lot larger when it scrolls up.
Can be fixed with a DRDY mechanism for RDAT/WDAT;
@@ -1723,6 +1722,7 @@ void upd7220_device::update_graphics(bitmap_rgb32 &bitmap, const rectangle &clip
int y = 0, tsy = 0, bsy = 0;
bool mixed = ((m_mode & UPD7220_MODE_DISPLAY_MASK) == UPD7220_MODE_DISPLAY_MIXED);
uint8_t interlace = ((m_mode & UPD7220_MODE_INTERLACE_MASK) == UPD7220_MODE_INTERLACE_ON) ? 0 : 1;
+ uint8_t zoom = m_disp + 1;
for(int area = 0; area < 4; area++)
{
@@ -1743,9 +1743,12 @@ void upd7220_device::update_graphics(bitmap_rgb32 &bitmap, const rectangle &clip
Xevious (PC-98xx) wants the pitch to be fixed at 80, and wants bsy to be /1
Dragon Buster (PC-98xx) contradicts with Xevious with regards of the pitch tho ... */
uint32_t const addr = ((sad << 1) & 0x3ffff) + ((y / (mixed ? 1 : m_lr)) * (m_pitch << (im ? 0 : 1)));
-
- if (!m_display_cb.isnull())
- draw_graphics_line(bitmap, addr, y + bsy + m_vbp, wd, (m_pitch << interlace));
+ for(int z = 0; z <= m_disp; ++z)
+ {
+ int yval = (y*zoom)+z + (bsy + m_vbp);
+ if(!m_display_cb.isnull() && yval <= cliprect.bottom())
+ draw_graphics_line(bitmap, addr, yval, wd, (m_pitch << interlace));
+ }
}
}
else
@@ -1755,16 +1758,16 @@ void upd7220_device::update_graphics(bitmap_rgb32 &bitmap, const rectangle &clip
for(y = 0; y < len; y += m_lr)
{
uint32_t const addr = (sad & 0x3ffff) + ((y / m_lr) * m_pitch);
-
- if(!m_draw_text_cb.isnull())
- m_draw_text_cb(bitmap, addr, y + tsy + m_vbp, wd, m_pitch, m_lr, m_dc, m_ead);
+ int yval = y * zoom + (tsy + m_vbp);
+ if (!m_draw_text_cb.isnull() && yval <= cliprect.bottom())
+ m_draw_text_cb(bitmap, addr, yval, wd, m_pitch, m_lr, m_dc, m_ead);
}
}
}
if (m_lr)
- tsy += y;
- bsy += y;
+ tsy += y * zoom;
+ bsy += y * zoom;
}
}