Subject: Retina console scroll problem fixed.
To: None <amiga@NetBSD.ORG>
From: John Vrolijk <dsnjvro@etmsun.etm.ericsson.se>
List: amiga
Date: 03/30/1995 15:19:17
Some while ago, I reported a scrolling problem with my RetinaZ2 on NetBSD 1.0
I thought I was the only one with this problem, but it looks like I'm not the only
one. Together with Ian.Wellock@isltd.insignia.com, who had similar
problems, I managed to fix it, at least for my setup.

setup: Retina Z2 with 4 MB VRAM
       GVP combo 040 at 33 Mhz with 16 MB 32-bit RAM
       8 MB 16-bit RAM
       NetBSD 1.0
       Kickstart 3.1
       2 MB ChipRAM 



I changed the code in ite_rt.c as follows: note that the code was already there,
it was just commented out......

Why is the original code not working ??????


/John



function retina_scroll:

-------------- start ----------


void retina_scroll(struct ite_softc *ip, int sy, int sx, int count, int dir)
{
  volatile u_char * ba = ip->grf->g_regkva;
  u_long * fb = (u_long *) ip->grf->g_fbkva;
  register int height, dy, i;

  retina_cursor(ip, ERASE_CURSOR);

  if (dir == SCROLL_UP)
    {
    /* fixed by John Vrolijk. 1995-03-29. Following code messes up Retina console output when scrolling. Used the bcopy/retina_clear code instead. */
    /* screen_up (ip, sy - count, ip->bottom_margin, count); */
      bcopy (fb + sy * ip->cols, fb + (sy - count) * ip->cols, 4 * (ip->bottom_margin - sy + 1) * ip->cols);
      retina_clear (ip, ip->bottom_margin + 1 - count, 0, count, ip->cols);
    }
  else if (dir == SCROLL_DOWN)
    {
    /* fixed by John Vrolijk. 1995-03-29. Following code messes up Retina console output when scrolling. Used the bcopy/retina_clear code instead. */
    /* screen_down (ip, sy, ip->bottom_margin, count); */
      bcopy (fb + sy * ip->cols, fb + (sy + count) * ip->cols, 4 * (ip->bottom_margin - sy - count + 1) * ip->cols);
      retina_clear (ip, sy, 0, count, ip->cols);
    }
  else if (dir == SCROLL_RIGHT)
    {
      bcopy (fb + sx + sy * ip->cols, fb + sx + sy * ip->cols + count, 4 * (ip->cols - (sx + count)));
      retina_clear (ip, sy, sx, 1, count);
    }
  else
    {
      bcopy (fb + sx + sy * ip->cols, fb + sx - count + sy * ip->cols, 4 * (ip->cols - sx));
      retina_clear (ip, sy, ip->cols - count, 1, count);
    }
  /* added by John Vrolijk. 1995-03-29 */
  retina_cursor(ip, !ERASE_CURSOR);
}

#endif /* NGRFRT */

---------------- end ---------------------------