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.
While the stdvga driver could be used instead, implementing it properly in the cbvga driver allows to switch between text and gfx mode using NVRAM option.
Signed-off-by: Patrick Rudolph siro@das-labor.org --- vgasrc/cbvga.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
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) {