summaryrefslogtreecommitdiff
path: root/vgasrc
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2018-05-30 23:57:06 +0200
committerGerd Hoffmann <kraxel@redhat.com>2018-06-22 07:44:07 +0200
commitddbb6da35099f99edaad3ddad2a187591387925c (patch)
tree1d71bb0fc5cdb7feca6e51cb05d236b816f07d9f /vgasrc
parent0c2b3b1d95cf35d1a08c5dab6579acbb1f20e2c1 (diff)
downloadqemu-seabios-ddbb6da35099f99edaad3ddad2a187591387925c.tar.gz
cbvga_set_mode: disable clearmem in windows x86 emulator.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'vgasrc')
-rw-r--r--vgasrc/cbvga.c10
1 files changed, 9 insertions, 1 deletions
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;