From: Gerd Hoffmann Date: Wed, 30 May 2018 21:57:06 +0000 (+0200) Subject: cbvga_set_mode: disable clearmem in windows x86 emulator. X-Git-Tag: rel-1.11.2~5 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=4ba61fae47a92f21d9151472bbd472bb75fcc7aa;p=seabios.git cbvga_set_mode: disable clearmem in windows x86 emulator. Signed-off-by: Gerd Hoffmann (cherry picked from commit ddbb6da35099f99edaad3ddad2a187591387925c) --- diff --git a/vgasrc/cbvga.c b/vgasrc/cbvga.c index 3f16bee..f6ebe71 100644 --- a/vgasrc/cbvga.c +++ b/vgasrc/cbvga.c @@ -192,8 +192,16 @@ int cbvga_set_mode(struct vgamode_s *vmode_g, int flags) { u8 emul = vmode_g == &CBemulinfo || GET_GLOBAL(CBmode) == 0x03; + /* + * The extra_stack flag is false when running in windows x86 + * emulator, to avoid stack switching triggering bugs. Using the + * same flag here to skip screen clearing, because the windows + * emulator seems to have problems to handle the int 1587 call + * too, and GO_MEMSET uses that. + */ + u8 extra_stack = GET_BDA_EXT(flags) & BF_EXTRA_STACK; MASK_BDA_EXT(flags, BF_EMULATE_TEXT, emul ? BF_EMULATE_TEXT : 0); - if (!(flags & MF_NOCLEARMEM)) { + if (!(flags & MF_NOCLEARMEM) && extra_stack) { if (GET_GLOBAL(CBmodeinfo.memmodel) == MM_TEXT) { memset16_far(SEG_CTEXT, (void*)0, 0x0720, 80*25*2); return 0;