Author: aandrejevic
Date: Mon Nov 11 20:55:33 2013
New Revision: 60956

URL: http://svn.reactos.org/svn/reactos?rev=60956&view=rev
Log:
[FAST486]
Check for interrupts at the end of a cycle, to avoid confusing
debug output.


Modified:
    branches/ntvdm/lib/fast486/fast486.c

Modified: branches/ntvdm/lib/fast486/fast486.c
URL: 
http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/fast486/fast486.c?rev=60956&r1=60955&r2=60956&view=diff
==============================================================================
--- branches/ntvdm/lib/fast486/fast486.c        [iso-8859-1] (original)
+++ branches/ntvdm/lib/fast486/fast486.c        [iso-8859-1] Mon Nov 11 
20:55:33 2013
@@ -55,42 +55,7 @@
     do
     {
         /* Check if this is a new instruction */
-        if (State->PrefixFlags == 0)
-        {
-            State->SavedInstPtr = State->InstPtr;
-
-            /*
-             * Check if there is an interrupt to execute, or a hardware 
interrupt signal
-             * while interrupts are enabled.
-             */
-            if (State->IntStatus == FAST486_INT_EXECUTE)
-            {
-                FAST486_IDT_ENTRY IdtEntry;
-
-                /* Get the interrupt vector */
-                if (Fast486GetIntVector(State, State->PendingIntNum, 
&IdtEntry))
-                {
-                    /* Perform the interrupt */
-                    Fast486InterruptInternal(State,
-                                             IdtEntry.Selector,
-                                             MAKELONG(IdtEntry.Offset, 
IdtEntry.OffsetHigh),
-                                             IdtEntry.Type);
-                }
-
-                /* Clear the interrupt status */
-                State->IntStatus = FAST486_INT_NONE;
-            }
-            else if (State->Flags.If
-                     && (State->IntAckCallback != NULL)
-                     && (State->IntStatus == FAST486_INT_SIGNAL))
-            {
-                /* Acknowledge the interrupt to get the number */
-                State->PendingIntNum = State->IntAckCallback(State);
-
-                /* Set the interrupt status to execute on the next instruction 
*/
-                State->IntStatus = FAST486_INT_EXECUTE;
-            }
-        }
+        if (State->PrefixFlags == 0) State->SavedInstPtr = State->InstPtr;
 
         /* Perform an instruction fetch */
         if (!Fast486FetchByte(State, &Opcode)) continue;
@@ -108,15 +73,45 @@
             Fast486Exception(State, FAST486_EXCEPTION_UD);
         }
 
-        if (Fast486OpcodeHandlers[Opcode] != Fast486OpcodePrefix)
-        {
-            /* A non-prefix opcode has been executed, reset the prefix flags */
-            State->PrefixFlags = 0;
-        }
-        else
+        if (Fast486OpcodeHandlers[Opcode] == Fast486OpcodePrefix)
         {
             /* This is a prefix, go to the next instruction immediately */
             continue;
+        }
+
+        /* A non-prefix opcode has been executed, reset the prefix flags */
+        State->PrefixFlags = 0;
+
+        /*
+         * Check if there is an interrupt to execute, or a hardware interrupt 
signal
+         * while interrupts are enabled.
+         */
+        if (State->IntStatus == FAST486_INT_EXECUTE)
+        {
+            FAST486_IDT_ENTRY IdtEntry;
+
+            /* Get the interrupt vector */
+            if (Fast486GetIntVector(State, State->PendingIntNum, &IdtEntry))
+            {
+                /* Perform the interrupt */
+                Fast486InterruptInternal(State,
+                                         IdtEntry.Selector,
+                                         MAKELONG(IdtEntry.Offset, 
IdtEntry.OffsetHigh),
+                                         IdtEntry.Type);
+            }
+
+            /* Clear the interrupt status */
+            State->IntStatus = FAST486_INT_NONE;
+        }
+        else if (State->Flags.If
+                 && (State->IntAckCallback != NULL)
+                 && (State->IntStatus == FAST486_INT_SIGNAL))
+        {
+            /* Acknowledge the interrupt to get the number */
+            State->PendingIntNum = State->IntAckCallback(State);
+
+            /* Set the interrupt status to execute on the next instruction */
+            State->IntStatus = FAST486_INT_EXECUTE;
         }
     }
     while ((Command == FAST486_CONTINUE)


Reply via email to