On Mon, Mar 05, 2012 at 08:10:41AM +0100, Gerd Hoffmann wrote:
On 03/04/12 20:06, Kevin O'Connor wrote:
On Fri, Mar 02, 2012 at 10:09:10AM +0100, Gerd Hoffmann wrote:
Did some more testing of the vgabios today, two issues popped up:
(1) screen isn't cleared in some cases. Visible with grub1 in text mode. When it displays the menu a few stray chars are visible. Even more obvious it becomes when hitting 'c' then to get a prompt, then alot of the menu is still visible.
Thanks. Can you point me to an image and/or the steps to reproduce? I've tracked down a few of these before, and I'm sure I can fix it if I can reproduce it.
Install fedora 15 (or older) in qemu (mimimal is enougth). Edit /boot/grub/menu.lst and comment out the splashimage and hiddenmenu lines. On next reboot grub will come up in text mode and you'll see the behavior described above.
I couldn't reproduce the issue on the initial screen, but I can reproduce when hitting the 'c' key. Turns out to be an integer overflow issue - patch below.
-Kevin
From c823759f201db6cea5a5f13fb7b5bec1cc47c114 Mon Sep 17 00:00:00 2001
From: Kevin O'Connor kevin@koconnor.net Date: Mon, 5 Mar 2012 17:11:50 -0500 Subject: [PATCH] vgabios: int1009 handler bug limits count to 256 characters. To: seabios@seabios.org
Fix bug (u8 overflow) causing large screen fills to fail.
Signed-off-by: Kevin O'Connor kevin@koconnor.net --- vgasrc/vgabios.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/vgasrc/vgabios.c b/vgasrc/vgabios.c index 58e467d..faf57b1 100644 --- a/vgasrc/vgabios.c +++ b/vgasrc/vgabios.c @@ -510,10 +510,15 @@ handle_1008(struct bregs *regs) static void noinline write_chars(u8 page, struct carattr ca, u16 count) { + u16 nbcols = GET_BDA(video_cols); struct cursorpos cp = get_cursor_pos(page); while (count--) { vgafb_write_char(cp, ca); cp.x++; + if (cp.x >= nbcols) { + cp.x -= nbcols; + cp.y++; + } } }