This commit is contained in:
Stanislav Shwartsman 2007-11-22 21:52:55 +00:00
parent 1dbe51a2fb
commit af9a14ff3b
3 changed files with 11 additions and 17 deletions

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// $Id: flag_ctrl.cc,v 1.30 2007-11-20 23:00:44 sshwarts Exp $ // $Id: flag_ctrl.cc,v 1.31 2007-11-22 21:52:55 sshwarts Exp $
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2002 MandrakeSoft S.A. // Copyright (C) 2002 MandrakeSoft S.A.
@ -177,7 +177,6 @@ void BX_CPU_C::PUSHF_Fw(bxInstruction_c *i)
if ((BX_CPU_THIS_PTR get_IOPL() < 3) && (CR4_VME_ENABLED == 0)) { if ((BX_CPU_THIS_PTR get_IOPL() < 3) && (CR4_VME_ENABLED == 0)) {
BX_DEBUG(("PUSHFW: #GP(0) in v8086 (no VME) mode")); BX_DEBUG(("PUSHFW: #GP(0) in v8086 (no VME) mode"));
exception(BX_GP_EXCEPTION, 0, 0); exception(BX_GP_EXCEPTION, 0, 0);
return;
} }
#if BX_SUPPORT_VME #if BX_SUPPORT_VME
if (CR4_VME_ENABLED && BX_CPU_THIS_PTR get_IOPL() < 3) { if (CR4_VME_ENABLED && BX_CPU_THIS_PTR get_IOPL() < 3) {

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// $Id: protect_ctrl.cc,v 1.65 2007-11-18 18:24:46 sshwarts Exp $ // $Id: protect_ctrl.cc,v 1.66 2007-11-22 21:52:55 sshwarts Exp $
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2001 MandrakeSoft S.A. // Copyright (C) 2001 MandrakeSoft S.A.
@ -656,30 +656,25 @@ void BX_CPU_C::LGDT_Ms(bxInstruction_c *i)
invalidate_prefetch_q(); invalidate_prefetch_q();
Bit16u limit_16;
Bit32u base_32;
#if BX_CPU_LEVEL >= 3 #if BX_CPU_LEVEL >= 3
if (i->os32L()) { if (i->os32L()) {
Bit16u limit_16;
Bit32u base0_31;
read_virtual_word(i->seg(), RMAddr(i), &limit_16); read_virtual_word(i->seg(), RMAddr(i), &limit_16);
read_virtual_dword(i->seg(), RMAddr(i) + 2, &base0_31); read_virtual_dword(i->seg(), RMAddr(i) + 2, &base_32);
BX_CPU_THIS_PTR gdtr.limit = limit_16; BX_CPU_THIS_PTR gdtr.limit = limit_16;
BX_CPU_THIS_PTR gdtr.base = base0_31; BX_CPU_THIS_PTR gdtr.base = base_32;
} }
else else
#endif #endif
{ {
Bit16u limit_16, base0_15;
Bit8u base16_23;
read_virtual_word(i->seg(), RMAddr(i), &limit_16); read_virtual_word(i->seg(), RMAddr(i), &limit_16);
read_virtual_word(i->seg(), RMAddr(i) + 2, &base0_15); read_virtual_dword(i->seg(), RMAddr(i) + 2, &base_32);
read_virtual_byte(i->seg(), RMAddr(i) + 4, &base16_23);
/* ignore high 8 bits */
BX_CPU_THIS_PTR gdtr.limit = limit_16; BX_CPU_THIS_PTR gdtr.limit = limit_16;
BX_CPU_THIS_PTR gdtr.base = (base16_23 << 16) | base0_15; BX_CPU_THIS_PTR gdtr.base = base_32 & 0x00ffffff; /* ignore upper 8 bits */
} }
} }

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// $Id: stack64.cc,v 1.27 2007-11-22 17:33:06 sshwarts Exp $ // $Id: stack64.cc,v 1.28 2007-11-22 21:52:55 sshwarts Exp $
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// //
// Copyright (C) 2001 MandrakeSoft S.A. // Copyright (C) 2001 MandrakeSoft S.A.
@ -64,7 +64,7 @@ void BX_CPU_C::POP_RRX(bxInstruction_c *i)
{ {
Bit64u rrx; Bit64u rrx;
pop_64(&rrx); pop_64(&rrx);
BX_CPU_THIS_PTR gen_reg[i->opcodeReg()].rrx = rrx; BX_WRITE_64BIT_REG(i->opcodeReg(), rrx);
} }
void BX_CPU_C::PUSH64_FS(bxInstruction_c *i) void BX_CPU_C::PUSH64_FS(bxInstruction_c *i)