Author: hbelusca
Date: Mon Nov 18 20:25:10 2013
New Revision: 61044
URL:
http://svn.reactos.org/svn/reactos?rev=61044&view=rev
Log:
[NTVDM] : Implement getMSW and setMSW for getting and setting the Machine Status Word
(lower word of CR0).
[FAST486]: MSW = Machine Status Word
Modified:
branches/ntvdm/lib/fast486/opgroups.c
branches/ntvdm/subsystems/ntvdm/registers.c
Modified: branches/ntvdm/lib/fast486/opgroups.c
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/fast486/opgroups.c?re…
==============================================================================
--- branches/ntvdm/lib/fast486/opgroups.c [iso-8859-1] (original)
+++ branches/ntvdm/lib/fast486/opgroups.c [iso-8859-1] Mon Nov 18 20:25:10 2013
@@ -1803,7 +1803,7 @@
/* SMSW */
case 4:
{
- /* Store the lower 16 bits of CR0 */
+ /* Store the lower 16 bits (Machine Status Word) of CR0 */
return Fast486WriteModrmWordOperands(State,
&ModRegRm,
FALSE,
@@ -1813,7 +1813,7 @@
/* LMSW */
case 6:
{
- USHORT MasterStatusWord, Dummy;
+ USHORT MachineStatusWord, Dummy;
/* This is a privileged instruction */
if (Fast486GetCurrentPrivLevel(State) != 0)
@@ -1822,8 +1822,8 @@
return FALSE;
}
- /* Read the new master status word */
- if (!Fast486ReadModrmWordOperands(State, &ModRegRm, &Dummy,
&MasterStatusWord))
+ /* Read the new Machine Status Word */
+ if (!Fast486ReadModrmWordOperands(State, &ModRegRm, &Dummy,
&MachineStatusWord))
{
/* Exception occurred */
return FALSE;
@@ -1831,7 +1831,7 @@
/* This instruction cannot be used to return to real mode */
if ((State->ControlRegisters[FAST486_REG_CR0] & FAST486_CR0_PE)
- && !(MasterStatusWord & FAST486_CR0_PE))
+ && !(MachineStatusWord & FAST486_CR0_PE))
{
Fast486Exception(State, FAST486_EXCEPTION_GP);
return FALSE;
@@ -1839,7 +1839,7 @@
/* Set the lowest 4 bits */
State->ControlRegisters[FAST486_REG_CR0] &= 0xFFFFFFF0;
- State->ControlRegisters[FAST486_REG_CR0] |= MasterStatusWord & 0x0F;
+ State->ControlRegisters[FAST486_REG_CR0] |= MachineStatusWord & 0x0F;
return TRUE;
}
Modified: branches/ntvdm/subsystems/ntvdm/registers.c
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/register…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/registers.c [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/registers.c [iso-8859-1] Mon Nov 18 20:25:10 2013
@@ -661,14 +661,16 @@
CDECL
getMSW(VOID)
{
- return 0; // UNIMPLEMENTED
+ return LOWORD(EmulatorContext.ControlRegisters[FAST486_REG_CR0]);
}
VOID
CDECL
setMSW(USHORT Value)
{
- // UNIMPLEMENTED
+ /* Set the lowest word (8 bits) */
+ EmulatorContext.ControlRegisters[FAST486_REG_CR0] &= 0xFFFF0000;
+ EmulatorContext.ControlRegisters[FAST486_REG_CR0] |= Value & 0xFFFF;
}
/* EOF */