VGA: Simplify scrolling implementation.
Check for nblines==0 in calling function.
Eliminate full screen clearing optimization.
diff --git a/vgasrc/vga.c b/vgasrc/vga.c
index 180fc99..c28d891 100644
--- a/vgasrc/vga.c
+++ b/vgasrc/vga.c
@@ -492,18 +492,21 @@
struct cursorpos ul = {regs->cl, regs->ch, page};
struct cursorpos lr = {regs->dl, regs->dh, page};
- if (ul.x > lr.x || ul.y > lr.y)
- return;
-
u16 nbrows = GET_BDA(video_rows) + 1;
- u16 nbcols = GET_BDA(video_cols);
-
if (lr.y >= nbrows)
lr.y = nbrows - 1;
+ u16 nbcols = GET_BDA(video_cols);
if (lr.x >= nbcols)
lr.x = nbcols - 1;
- vgafb_scroll(dir * regs->al, regs->bh, ul, lr);
+ if (ul.x > lr.x || ul.y > lr.y)
+ return;
+
+ u16 nblines = regs->al;
+ if (!nblines || nblines > lr.y - ul.y + 1)
+ nblines = lr.y - ul.y + 1;
+
+ vgafb_scroll(dir * nblines, regs->bh, ul, lr);
}
static void