Index: sys/dev/ic/hd44780_subr.c diff -u sys/dev/ic/hd44780_subr.c:1.12 src/sys/dev/ic/hd44780_subr.c:1.13 --- sys/dev/ic/hd44780_subr.c:1.12 Fri Oct 19 11:59:52 2007 +++ sys/dev/ic/hd44780_subr.c Thu Nov 1 13:05:32 2007 @@ -161,10 +161,11 @@ ncols = hdscr->hlcd_sc->sc_cols - srccol; if (row > 0 && (hdscr->hlcd_sc->sc_flags & (HD_MULTILINE|HD_MULTICHIP))) - bcopy(&hdscr->image[hdscr->hlcd_sc->sc_cols * row + srccol], - &hdscr->image[hdscr->hlcd_sc->sc_cols * row + dstcol], ncols); + memmove(&hdscr->image[hdscr->hlcd_sc->sc_cols * row + dstcol], + &hdscr->image[hdscr->hlcd_sc->sc_cols * row + srccol], + ncols); else - bcopy(&hdscr->image[srccol], &hdscr->image[dstcol], ncols); + memmove(&hdscr->image[dstcol], &hdscr->image[srccol], ncols); } @@ -200,7 +201,7 @@ if (!(hdscr->hlcd_sc->sc_flags & (HD_MULTILINE|HD_MULTICHIP))) return; - bcopy(&hdscr->image[srcrow * ncols], &hdscr->image[dstrow * ncols], + memmove(&hdscr->image[dstrow * ncols], &hdscr->image[srcrow * ncols], nrows * ncols); } @@ -703,6 +704,7 @@ hd44780_ir_write(sc, en, cmd_clear()); hd44780_ir_write(sc, en, cmd_rethome()); + hd44780_ir_write(sc, en, cmd_ddramset(HD_ROW1_ADDR)); for (i = 0; (i < io->len) && (i < sc->sc_cols); i++) { hd44780_dr_write(sc, en, io->buf[i]); }