summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/upd7220.cpp
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2016-07-10 21:19:15 -0500
committer cracyc <cracyc@users.noreply.github.com>2016-07-10 21:19:15 -0500
commite48008b5165510f267a93f6a1b85e34a5878a1ac (patch)
tree7fdec084306958ad8ba6a882d2c1323a6f98f686 /src/devices/video/upd7220.cpp
parente04ed6de3fc6168f175e4d32ef6dbbca885f175c (diff)
upd7220: alternate drawing direction by line in gchrd (nw)
vt240: error--
Diffstat (limited to 'src/devices/video/upd7220.cpp')
-rw-r--r--src/devices/video/upd7220.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/devices/video/upd7220.cpp b/src/devices/video/upd7220.cpp
index 070c9e4fbec..f9ee91a7140 100644
--- a/src/devices/video/upd7220.cpp
+++ b/src/devices/video/upd7220.cpp
@@ -993,22 +993,35 @@ void upd7220_device::draw_char(int x, int y)
LOG(("uPD7220 char check: %d %d %02x %08x %d %d %02x\n",x,y,m_figs.m_dir,m_ead,m_figs.m_d,m_figs.m_dc,m_figs.m_figure_type));
- isize = m_figs.m_d & 0x3ff;
- /* Guess: D has presumably upper bits for ysize, QX-10 relies on this (TODO: check this on any real HW) */
- psize = ((m_figs.m_d & 0x400) + m_figs.m_dc) + 1;
+ /* QX10 may require upper bits for psize, VT240 requires the opposite */
+ isize = m_figs.m_d;
+ psize = m_figs.m_dc + 1;
for(int pi = 0; pi < psize; pi++)
{
tile_data = (m_ra[((psize-1-pi) & 7) | 8] << 8) | m_ra[((psize-1-pi) & 7) | 8];
for(int pz = 0; pz <= m_gchr; pz++)
{
- for(int ii = 0, curpixel = 0; ii < isize; ii++)
+ int ii = 0, curpixel = 0;
+ if(pi & 1)
+ {
+ ii = isize - 1;
+ curpixel = (isize * (m_gchr + 1)) - 1;
+ }
+ while(pi & 1 ? ii >= 0 : ii < isize)
{
for(int iz = 0; iz <= m_gchr; iz++)
{
draw_pixel(x + (curpixel * x_dir[m_figs.m_dir]), y + (curpixel * y_dir[m_figs.m_dir]), ii, tile_data);
- curpixel++;
+ if(pi & 1)
+ curpixel--;
+ else
+ curpixel++;
}
+ if(pi & 1)
+ ii--;
+ else
+ ii++;
}
if(m_figs.m_figure_type == 2)
{