[FAST486]: group Fast486GetIntVector and Fast486InterruptInternal calls into Fast486P...
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 11 Oct 2014 15:28:21 +0000 (15:28 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 11 Oct 2014 15:28:21 +0000 (15:28 +0000)
svn path=/trunk/; revision=64672

reactos/lib/fast486/common.c
reactos/lib/fast486/common.h
reactos/lib/fast486/common.inl
reactos/lib/fast486/fast486.c
reactos/lib/fast486/opcodes.c

index 83c11e2..09a9c72 100644 (file)
@@ -160,6 +160,56 @@ Fast486WriteMemory(PFAST486_STATE State,
     return Fast486WriteLinearMemory(State, LinearAddress, Buffer, Size);
 }
 
+static
+inline
+BOOLEAN
+Fast486GetIntVector(PFAST486_STATE State,
+                    UCHAR Number,
+                    PFAST486_IDT_ENTRY IdtEntry)
+{
+    ULONG FarPointer;
+
+    /* Check for protected mode */
+    if (State->ControlRegisters[FAST486_REG_CR0] & FAST486_CR0_PE)
+    {
+        /* Read from the IDT */
+        if (!Fast486ReadLinearMemory(State,
+                                     State->Idtr.Address
+                                     + Number * sizeof(*IdtEntry),
+                                     IdtEntry,
+                                     sizeof(*IdtEntry)))
+        {
+            /* Exception occurred */
+            return FALSE;
+        }
+    }
+    else
+    {
+        /* Read from the real-mode IVT */
+
+        /* Paging is always disabled in real mode */
+        State->MemReadCallback(State,
+                               State->Idtr.Address
+                               + Number * sizeof(FarPointer),
+                               &FarPointer,
+                               sizeof(FarPointer));
+
+        /* Fill a fake IDT entry */
+        IdtEntry->Offset = LOWORD(FarPointer);
+        IdtEntry->Selector = HIWORD(FarPointer);
+        IdtEntry->Zero = 0;
+        IdtEntry->Type = FAST486_IDT_INT_GATE;
+        IdtEntry->Storage = FALSE;
+        IdtEntry->Dpl = 0;
+        IdtEntry->Present = TRUE;
+        IdtEntry->OffsetHigh = 0;
+    }
+
+    return TRUE;
+}
+
+static
+inline
 BOOLEAN
 Fast486InterruptInternal(PFAST486_STATE State,
                          USHORT SegmentSelector,
@@ -304,14 +354,38 @@ Cleanup:
     return Success;
 }
 
+BOOLEAN
+Fast486PerformInterrupt(PFAST486_STATE State,
+                        UCHAR Number)
+{
+    FAST486_IDT_ENTRY IdtEntry;
+
+    /* Get the interrupt vector */
+    if (!Fast486GetIntVector(State, Number, &IdtEntry))
+    {
+        /* Exception occurred */
+        return FALSE;
+    }
+
+    /* Perform the interrupt */
+    if (!Fast486InterruptInternal(State,
+                                  IdtEntry.Selector,
+                                  MAKELONG(IdtEntry.Offset, IdtEntry.OffsetHigh),
+                                  IdtEntry.Type))
+    {
+        /* Exception occurred */
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
 VOID
 FASTCALL
 Fast486ExceptionWithErrorCode(PFAST486_STATE State,
                               FAST486_EXCEPTIONS ExceptionCode,
                               ULONG ErrorCode)
 {
-    FAST486_IDT_ENTRY IdtEntry;
-
     /* Increment the exception count */
     State->ExceptionCount++;
 
@@ -337,20 +411,8 @@ Fast486ExceptionWithErrorCode(PFAST486_STATE State,
     /* Restore the IP to the saved IP */
     State->InstPtr = State->SavedInstPtr;
 
-    if (!Fast486GetIntVector(State, ExceptionCode, &IdtEntry))
-    {
-        /*
-         * If this function failed, that means Fast486Exception
-         * was called again, so just return in this case.
-         */
-        return;
-    }
-
     /* Perform the interrupt */
-    if (!Fast486InterruptInternal(State,
-                                  IdtEntry.Selector,
-                                  MAKELONG(IdtEntry.Offset, IdtEntry.OffsetHigh),
-                                  IdtEntry.Type))
+    if (!Fast486PerformInterrupt(State, ExceptionCode))
     {
         /*
          * If this function failed, that means Fast486Exception
index 764dbbc..917db66 100644 (file)
@@ -154,12 +154,10 @@ Fast486WriteMemory
 );
 
 BOOLEAN
-Fast486InterruptInternal
+Fast486PerformInterrupt
 (
     PFAST486_STATE State,
-    USHORT SegmentSelector,
-    ULONG Offset,
-    ULONG GateType
+    UCHAR Number
 );
 
 VOID
index 7a28f9d..a2186ed 100644 (file)
@@ -691,53 +691,6 @@ Fast486FetchDword(PFAST486_STATE State,
     return TRUE;
 }
 
-FORCEINLINE
-BOOLEAN
-Fast486GetIntVector(PFAST486_STATE State,
-                    UCHAR Number,
-                    PFAST486_IDT_ENTRY IdtEntry)
-{
-    ULONG FarPointer;
-
-    /* Check for protected mode */
-    if (State->ControlRegisters[FAST486_REG_CR0] & FAST486_CR0_PE)
-    {
-        /* Read from the IDT */
-        if (!Fast486ReadLinearMemory(State,
-                                     State->Idtr.Address
-                                     + Number * sizeof(*IdtEntry),
-                                     IdtEntry,
-                                     sizeof(*IdtEntry)))
-        {
-            /* Exception occurred */
-            return FALSE;
-        }
-    }
-    else
-    {
-        /* Read from the real-mode IVT */
-
-        /* Paging is always disabled in real mode */
-        State->MemReadCallback(State,
-                               State->Idtr.Address
-                               + Number * sizeof(FarPointer),
-                               &FarPointer,
-                               sizeof(FarPointer));
-
-        /* Fill a fake IDT entry */
-        IdtEntry->Offset = LOWORD(FarPointer);
-        IdtEntry->Selector = HIWORD(FarPointer);
-        IdtEntry->Zero = 0;
-        IdtEntry->Type = FAST486_IDT_INT_GATE;
-        IdtEntry->Storage = FALSE;
-        IdtEntry->Dpl = 0;
-        IdtEntry->Present = TRUE;
-        IdtEntry->OffsetHigh = 0;
-    }
-
-    return TRUE;
-}
-
 FORCEINLINE
 BOOLEAN
 Fast486CalculateParity(UCHAR Number)
index 5195bef..ccce63b 100644 (file)
@@ -93,17 +93,8 @@ Fast486ExecutionControl(PFAST486_STATE State, FAST486_EXEC_CMD Command)
          */
         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);
-            }
+            /* Perform the interrupt */
+            Fast486PerformInterrupt(State, State->PendingIntNum);
 
             /* Clear the interrupt status */
             State->IntStatus = FAST486_INT_NONE;
index c4934c4..3202574 100644 (file)
@@ -4615,7 +4615,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeRetFar)
 FAST486_OPCODE_HANDLER(Fast486OpcodeInt)
 {
     UCHAR IntNum;
-    FAST486_IDT_ENTRY IdtEntry;
 
     switch (Opcode)
     {
@@ -4656,24 +4655,8 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeInt)
         }
     }
 
-    /* Get the interrupt vector */
-    if (!Fast486GetIntVector(State, IntNum, &IdtEntry))
-    {
-        /* Exception occurred */
-        return FALSE;
-    }
-
     /* Perform the interrupt */
-    if (!Fast486InterruptInternal(State,
-                                  IdtEntry.Selector,
-                                  MAKELONG(IdtEntry.Offset, IdtEntry.OffsetHigh),
-                                  IdtEntry.Type))
-    {
-        /* Exception occurred */
-        return FALSE;
-    }
-
-    return TRUE;
+    return Fast486PerformInterrupt(State, IntNum);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeIret)