Author: aandrejevic
Date: Thu Jun 4 20:25:14 2015
New Revision: 68016
URL:
http://svn.reactos.org/svn/reactos?rev=68016&view=rev
Log:
[FAST486]
Fix VERR and VERW.
Modified:
trunk/reactos/lib/fast486/opgroups.c
Modified: trunk/reactos/lib/fast486/opgroups.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/opgroups.c?rev…
==============================================================================
--- trunk/reactos/lib/fast486/opgroups.c [iso-8859-1] (original)
+++ trunk/reactos/lib/fast486/opgroups.c [iso-8859-1] Thu Jun 4 20:25:14 2015
@@ -2002,13 +2002,6 @@
return;
}
- /* This is a privileged instruction */
- if (Fast486GetCurrentPrivLevel(State) != 0)
- {
- Fast486Exception(State, FAST486_EXCEPTION_GP);
- return;
- }
-
if (!Fast486ReadModrmWordOperands(State,
&ModRegRm,
NULL,
@@ -2033,23 +2026,23 @@
/* Set ZF if it is valid and accessible */
State->Flags.Zf = GdtEntry.Present // must be present
- && GdtEntry.SystemType // must be a segment
- && (((ModRegRm.Register == 4)
- /* code segments are only readable if the RW bit is set
*/
- && (!GdtEntry.Executable || GdtEntry.ReadWrite))
- || ((ModRegRm.Register == 5)
- /* code segments are never writable, data segments are
writable when RW is set */
- && (!GdtEntry.Executable &&
GdtEntry.ReadWrite)))
- /*
- * for segments other than conforming code segments,
- * both RPL and CPL must be less than or equal to DPL
- */
- && ((!GdtEntry.Executable || !GdtEntry.DirConf)
- && ((GET_SEGMENT_RPL(Selector) <=
GdtEntry.Dpl)
- && (Fast486GetCurrentPrivLevel(State) <=
GdtEntry.Dpl)))
- /* for conforming code segments, DPL must be less than or
equal to CPL */
- && ((GdtEntry.Executable &&
GdtEntry.DirConf)
- && (GdtEntry.Dpl <=
Fast486GetCurrentPrivLevel(State)));
+ && GdtEntry.SystemType // must be a segment
+ && (((ModRegRm.Register == 4)
+ /* code segments are only readable if the RW bit is set */
+ && (!GdtEntry.Executable || GdtEntry.ReadWrite))
+ || ((ModRegRm.Register == 5)
+ /* code segments are never writable, data segments are
writable when RW is set */
+ && (!GdtEntry.Executable &&
GdtEntry.ReadWrite)))
+ /*
+ * for segments other than conforming code segments,
+ * both RPL and CPL must be less than or equal to DPL
+ */
+ && (((!GdtEntry.Executable || !GdtEntry.DirConf)
+ && (GET_SEGMENT_RPL(Selector) <= GdtEntry.Dpl)
+ && (Fast486GetCurrentPrivLevel(State) <=
GdtEntry.Dpl))
+ /* for conforming code segments, DPL must be less than or
equal to CPL */
+ || ((GdtEntry.Executable && GdtEntry.DirConf)
+ && (GdtEntry.Dpl <=
Fast486GetCurrentPrivLevel(State))));
break;