[SeaBIOS] [PATCH 2/8] SeaVGABios/cbvga: Assume VGA compatible GPU in text-mode
Patrick Rudolph
siro at das-labor.org
Fri Mar 24 17:27:21 CET 2017
Assume the GPU is VGA compatible when running in text-mode.
Advertise VGA modes.
Microsoft Windows relies on graphics mode 12 as last resort when
running in text mode. It is used even when not advertised.
Allows to boot Windows 7 in "Safe Mode" and shows the boot splash.
Signed-off-by: Patrick Rudolph <siro at das-labor.org>
diff --git a/vgasrc/cbvga.c b/vgasrc/cbvga.c
index 39ffdbb..49af7f9 100644
--- a/vgasrc/cbvga.c
+++ b/vgasrc/cbvga.c
@@ -21,6 +21,10 @@ static u32 CBlinelength VAR16;
struct vgamode_s *cbvga_find_mode(int mode)
{
+ /* Assume VGA compatible hardware in text-mode. */
+ if (GET_GLOBAL(CBmode) == 0x3)
+ return stdvga_find_mode(mode);
+
if (mode == GET_GLOBAL(CBmode))
return &CBmodeinfo;
if (mode == 0x03)
@@ -31,11 +35,11 @@ struct vgamode_s *cbvga_find_mode(int mode)
void
cbvga_list_modes(u16 seg, u16 *dest, u16 *last)
{
- if (dest<last) {
- SET_FARVAR(seg, *dest, GET_GLOBAL(CBmode));
- dest++;
+
+ /* Assume VGA compatible hardware in text-mode. */
+ if (GET_GLOBAL(CBmode) == 0x3) {
+ stdvga_list_modes(seg, dest, last);
}
- SET_FARVAR(seg, *dest, 0xffff);
}
int
@@ -98,6 +102,11 @@ int
cbvga_set_mode(struct vgamode_s *vmode_g, int flags)
{
u8 emul = vmode_g == &CBemulinfo || GET_GLOBAL(CBmode) == 0x03;
+
+ /* Assume VGA compatible hardware in text-mode. */
+ if (GET_GLOBAL(CBmode) == 0x03)
+ return stdvga_set_mode(vmode_g, flags);
+
MASK_BDA_EXT(flags, BF_EMULATE_TEXT, emul ? BF_EMULATE_TEXT : 0);
if (!(flags & MF_NOCLEARMEM)) {
if (GET_GLOBAL(CBmodeinfo.memmodel) == MM_TEXT) {
--
2.9.3
More information about the SeaBIOS
mailing list