On Wed, Apr 16, 2014 at 04:25:48PM -0700, H. Peter Anvin wrote:
On 04/16/2014 04:21 PM, Kevin O'Connor wrote:
If I build SeaVGABIOS without vesa and run the Fedora 16 (or later) installer in qemu I get a menu that is not centered and the bottom line of the menu box isn't drawn. Also, when I hit up arrow or down arrow I can't see which menu item is highlighted. I'm really not sure if this is syslinux related though. (This wasn't an issue in Fedora 15 or earlier - though they always show up as black-and-white.) See the attached screenshot as an example.
I wonder if they simply specify a geometry that is too large for the text mode screen. I'll have to take a look at their config file.
Thanks. The menu definitely looks weird even with a larger screen. If I disable vesa and switch into a graphics mode (eg, 0x12) prior to running syslinux I get a screenshot like the attached. (Same steps to reproduce as in my previous email with the additional patch below to force SeaBIOS to switch to mode 0x12.)
To be clear, the biggest issue is not being able to see which item is highlighted.
[...]
For the record, Syslinux in text mode will use only BIOS calls (no direct write to the screen) to allow things like serial port capture and text-to-graphics conversion to work.
Yes - modern bootloaders seem quite good about using the bios interface.
Let me know if I can be of assistance.
While you're here - what conditions does syslinux require in order to use graphics mode? When we use the coreboot native vga SeaVGABIOS, it does include vesa support and it will advertise exactly one vesa mode. (For example, in our qemu tests it's mode 0x0140 that is 800x600 with 32bpp.) However, syslinux (at least on my fedora tests) doesn't seem to want to go into graphics mode and instead uses its text mode. Are we doing something wrong here, or is it just that a different resolution is required?
Thanks, -Kevin
--- a/src/bootsplash.c +++ b/src/bootsplash.c @@ -45,6 +45,7 @@ enable_vga_console(void) /* Enable VGA text mode */ memset(&br, 0, sizeof(br)); br.ax = 0x0003; + br.ax = 0x0012; call16_int10(&br);
// Write to screen.