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?rev... ============================================================================== --- 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/registers... ============================================================================== --- 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 */