From 6be60b2d19d137e0d620c0d90775be061a29cd9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Tue, 8 Jul 2008 18:25:45 +0000 Subject: [PATCH] Applied patch by Jan Kloetzke: The PUSHF/POPF instructions were not emulated correctly. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26325 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/arch/x86/vm86.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/system/kernel/arch/x86/vm86.cpp b/src/system/kernel/arch/x86/vm86.cpp index dbadcedd19..5e41a9bba6 100644 --- a/src/system/kernel/arch/x86/vm86.cpp +++ b/src/system/kernel/arch/x86/vm86.cpp @@ -44,8 +44,8 @@ #define PUSHF 0x9c #define STI 0xfb -#define I_FLAG (1 << 9) -#define DIRECTION_FLAG (1 << 10) +#define I_FLAG (1u << 9) +#define DIRECTION_FLAG (1u << 10) #define CSEG 0x2e #define SSEG 0x36 @@ -442,7 +442,7 @@ emulate(struct vm86_state *state) uint16 flags = state->regs.flags; /* store real IF */ - flags &= I_FLAG; + flags &= ~I_FLAG; flags |= (uint16)state->if_flag << 9; pushw(&state->regs, flags); @@ -475,10 +475,11 @@ emulate(struct vm86_state *state) case PUSHF: { TRACE_NP("PUSHF"); - uint16 flags = state->regs.flags & I_FLAG; + uint32 flags = state->regs.flags; /* store real IF */ - flags |= (uint16)state->if_flag << 9; + flags &= ~I_FLAG; + flags |= (uint32)state->if_flag << 9; if (prefix.size) pushl(&state->regs, flags); else