[FAST486]
[reactos.git] / reactos / lib / fast486 / opcodes.c
index a032691..101361b 100644 (file)
@@ -279,7 +279,7 @@ Fast486OpcodeHandlers[FAST486_NUM_OPCODE_HANDLERS] =
     Fast486OpcodeOutByte,               /* 0xEE */
     Fast486OpcodeOut,                   /* 0xEF */
     Fast486OpcodePrefix,                /* 0xF0 */
-    Fast486OpcodeInvalid,               /* 0xF1 */  // Invalid opcode
+    Fast486OpcodeInvalid,               /* 0xF1 */  // Invalid opcode -- ICEBP/INT01 opcode
     Fast486OpcodePrefix,                /* 0xF2 */
     Fast486OpcodePrefix,                /* 0xF3 */
     Fast486OpcodeHalt,                  /* 0xF4 */
@@ -300,9 +300,13 @@ Fast486OpcodeHandlers[FAST486_NUM_OPCODE_HANDLERS] =
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeInvalid)
 {
-    /* This is not a valid opcode */
+    /*
+     * This is not a valid opcode.
+     * Well, not totally: see http://www.rcollins.org/secrets/opcodes/ICEBP.html
+     * for more details.
+     */
+    DPRINT1("FAST486 -- Calling ICEBP opcode\n");
     Fast486Exception(State, FAST486_EXCEPTION_UD);
-    return FALSE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePrefix)
@@ -460,10 +464,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePrefix)
 
         /* Throw an exception */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeIncrement)
@@ -495,9 +496,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIncrement)
     State->Flags.Zf = (Value == 0);
     State->Flags.Af = ((Value & 0x0F) == 0);
     State->Flags.Pf = Fast486CalculateParity(LOBYTE(Value));
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeDecrement)
@@ -529,9 +527,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeDecrement)
     State->Flags.Zf = (Value == 0);
     State->Flags.Af = ((Value & 0x0F) == 0x0F);
     State->Flags.Pf = Fast486CalculateParity(LOBYTE(Value));
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePushReg)
@@ -542,7 +537,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePushReg)
     ASSERT((Opcode & 0xF8) == 0x50);
 
     /* Call the internal function */
-    return Fast486StackPush(State, State->GeneralRegs[Opcode & 0x07].Long);
+    Fast486StackPush(State, State->GeneralRegs[Opcode & 0x07].Long);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePopReg)
@@ -557,25 +552,15 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePopReg)
     ASSERT((Opcode & 0xF8) == 0x58);
 
     /* Call the internal function */
-    if (!Fast486StackPop(State, &Value)) return FALSE;
+    if (!Fast486StackPop(State, &Value)) return;
 
     /* Store the value */
     if (Size) State->GeneralRegs[Opcode & 0x07].Long = Value;
     else State->GeneralRegs[Opcode & 0x07].LowWord = Value;
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeNop)
 {
-    if (State->PrefixFlags & FAST486_PREFIX_REP)
-    {
-        /* Idle cycle */
-        State->IdleCallback(State);
-    }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeExchangeEax)
@@ -606,8 +591,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeExchangeEax)
         State->GeneralRegs[Reg].LowWord = State->GeneralRegs[FAST486_REG_EAX].LowWord;
         State->GeneralRegs[FAST486_REG_EAX].LowWord = Value;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeShortConditionalJmp)
@@ -625,7 +608,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeShortConditionalJmp)
     if (!Fast486FetchByte(State, (PUCHAR)&Offset))
     {
         /* An exception occurred */
-        return FALSE;
+        return;
     }
 
     switch ((Opcode & 0x0F) >> 1)
@@ -704,9 +687,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeShortConditionalJmp)
             State->InstPtr.Long &= 0xFFFF;
         }
     }
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeClearCarry)
@@ -718,12 +698,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeClearCarry)
     if (State->PrefixFlags)
     {
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     /* Clear CF and return success */
     State->Flags.Cf = FALSE;
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeSetCarry)
@@ -735,12 +714,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSetCarry)
     if (State->PrefixFlags)
     {
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     /* Set CF and return success*/
     State->Flags.Cf = TRUE;
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeComplCarry)
@@ -752,12 +730,12 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeComplCarry)
     if (State->PrefixFlags)
     {
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     /* Toggle CF and return success */
     State->Flags.Cf = !State->Flags.Cf;
-    return TRUE;
+    return;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeClearInt)
@@ -769,7 +747,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeClearInt)
     if (State->PrefixFlags)
     {
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     /* Check for protected mode */
@@ -785,7 +763,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeClearInt)
         {
             /* General Protection Fault */
             Fast486Exception(State, FAST486_EXCEPTION_GP);
-            return FALSE;
+            return;
         }
     }
     else
@@ -793,9 +771,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeClearInt)
         /* Just clear the interrupt flag */
         State->Flags.If = FALSE;
     }
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeSetInt)
@@ -807,7 +782,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSetInt)
     if (State->PrefixFlags)
     {
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     /* Check for protected mode */
@@ -823,7 +798,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSetInt)
         {
             /* General Protection Fault */
             Fast486Exception(State, FAST486_EXCEPTION_GP);
-            return FALSE;
+            return;
         }
     }
     else
@@ -831,9 +806,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSetInt)
         /* Just set the interrupt flag */
         State->Flags.If = TRUE;
     }
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeClearDir)
@@ -845,12 +817,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeClearDir)
     if (State->PrefixFlags)
     {
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
-    /* Clear DF and return success */
+    /* Clear DF */
     State->Flags.Df = FALSE;
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeSetDir)
@@ -862,12 +833,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSetDir)
     if (State->PrefixFlags)
     {
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
-    /* Set DF and return success*/
+    /* Set DF */
     State->Flags.Df = TRUE;
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeHalt)
@@ -879,21 +849,18 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeHalt)
     if (State->PrefixFlags)
     {
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     /* Privileged instructions can only be executed under CPL = 0 */
     if (State->SegmentRegs[FAST486_REG_CS].Dpl != 0)
     {
         Fast486Exception(State, FAST486_EXCEPTION_GP);
-        return FALSE;
+        return;
     }
 
     /* Halt */
-    // TODO: Halt the CPU until an interrupt occurs, using IdleCallback if needed.
-
-    /* Return success */
-    return TRUE;
+    State->Halted = TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeInByte)
@@ -910,7 +877,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeInByte)
         if (!Fast486FetchByte(State, &Data))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Set the port number to the parameter */
@@ -927,8 +894,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeInByte)
 
     /* Store the result in AL */
     State->GeneralRegs[FAST486_REG_EAX].LowByte = Data;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeIn)
@@ -950,7 +915,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIn)
         if (!Fast486FetchByte(State, &Data))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Set the port number to the parameter */
@@ -982,8 +947,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIn)
         /* Store the value in AX */
         State->GeneralRegs[FAST486_REG_EAX].LowWord = Data;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeOutByte)
@@ -1000,7 +963,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOutByte)
         if (!Fast486FetchByte(State, &Data))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Set the port number to the parameter */
@@ -1017,8 +980,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOutByte)
 
     /* Write the byte to the I/O port */
     State->IoWriteCallback(State, Port, &Data, 1, sizeof(UCHAR));
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeOut)
@@ -1040,7 +1001,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOut)
         if (!Fast486FetchByte(State, &Data))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Set the port number to the parameter */
@@ -1068,8 +1029,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOut)
         /* Write a word to the I/O port */
         State->IoWriteCallback(State, Port, &Data, 1, sizeof(USHORT));
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeShortJump)
@@ -1086,7 +1045,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeShortJump)
     if (!Fast486FetchByte(State, (PUCHAR)&Offset))
     {
         /* An exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Move the instruction pointer */
@@ -1097,8 +1056,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeShortJump)
         /* Clear the top half of EIP */
         State->InstPtr.Long &= 0xFFFF;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeMovRegImm)
@@ -1119,7 +1076,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovRegImm)
         if (!Fast486FetchDword(State, &Value))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Store the value in the register */
@@ -1133,14 +1090,12 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovRegImm)
         if (!Fast486FetchWord(State, &Value))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Store the value in the register */
         State->GeneralRegs[Opcode & 0x07].LowWord = Value;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeMovByteRegImm)
@@ -1154,14 +1109,14 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovByteRegImm)
     {
         /* Invalid prefix */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     /* Fetch the byte */
     if (!Fast486FetchByte(State, &Value))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (Opcode & 0x04)
@@ -1174,8 +1129,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovByteRegImm)
         /* AL, CL, DL or BL */
         State->GeneralRegs[Opcode & 0x03].LowByte = Value;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAddByteModrm)
@@ -1193,7 +1146,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddByteModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadModrmByteOperands(State,
@@ -1202,7 +1155,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddByteModrm)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -1218,10 +1171,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddByteModrm)
     State->Flags.Pf = Fast486CalculateParity(Result);
 
     /* Write back the result */
-    return Fast486WriteModrmByteOperands(State,
-                                         &ModRegRm,
-                                         Opcode & FAST486_OPCODE_WRITE_REG,
-                                         Result);
+    Fast486WriteModrmByteOperands(State,
+                                  &ModRegRm,
+                                  Opcode & FAST486_OPCODE_WRITE_REG,
+                                  Result);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAddModrm)
@@ -1241,7 +1194,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check the operand size */
@@ -1255,7 +1208,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1271,10 +1224,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmDwordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
     else
     {
@@ -1286,7 +1239,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1302,10 +1255,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmWordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmWordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
 }
 
@@ -1321,13 +1274,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddAl)
     {
         /* This opcode doesn't take any prefixes */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     if (!Fast486FetchByte(State, &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -1344,8 +1297,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddAl)
 
     /* Write back the result */
     State->GeneralRegs[FAST486_REG_EAX].LowByte = Result;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAddEax)
@@ -1366,7 +1317,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddEax)
         if (!Fast486FetchDword(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1392,7 +1343,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddEax)
         if (!Fast486FetchWord(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1410,8 +1361,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAddEax)
         /* Write back the result */
         State->GeneralRegs[FAST486_REG_EAX].LowWord = Result;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeOrByteModrm)
@@ -1429,7 +1378,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrByteModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadModrmByteOperands(State,
@@ -1438,7 +1387,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrByteModrm)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -1452,10 +1401,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrByteModrm)
     State->Flags.Pf = Fast486CalculateParity(Result);
 
     /* Write back the result */
-    return Fast486WriteModrmByteOperands(State,
-                                         &ModRegRm,
-                                         Opcode & FAST486_OPCODE_WRITE_REG,
-                                         Result);
+    Fast486WriteModrmByteOperands(State,
+                                  &ModRegRm,
+                                  Opcode & FAST486_OPCODE_WRITE_REG,
+                                  Result);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeOrModrm)
@@ -1475,7 +1424,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check the operand size */
@@ -1489,7 +1438,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1503,10 +1452,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmDwordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
     else
     {
@@ -1518,7 +1467,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1532,10 +1481,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmWordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmWordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
 }
 
@@ -1551,13 +1500,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrAl)
     {
         /* This opcode doesn't take any prefixes */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     if (!Fast486FetchByte(State, &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -1572,8 +1521,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrAl)
 
     /* Write back the result */
     State->GeneralRegs[FAST486_REG_EAX].LowByte = Result;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeOrEax)
@@ -1594,7 +1541,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrEax)
         if (!Fast486FetchDword(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1618,7 +1565,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrEax)
         if (!Fast486FetchWord(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1634,8 +1581,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOrEax)
         /* Write back the result */
         State->GeneralRegs[FAST486_REG_EAX].LowWord = Result;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAndByteModrm)
@@ -1653,7 +1598,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndByteModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadModrmByteOperands(State,
@@ -1662,7 +1607,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndByteModrm)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -1676,10 +1621,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndByteModrm)
     State->Flags.Pf = Fast486CalculateParity(Result);
 
     /* Write back the result */
-    return Fast486WriteModrmByteOperands(State,
-                                         &ModRegRm,
-                                         Opcode & FAST486_OPCODE_WRITE_REG,
-                                         Result);
+    Fast486WriteModrmByteOperands(State,
+                                  &ModRegRm,
+                                  Opcode & FAST486_OPCODE_WRITE_REG,
+                                  Result);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAndModrm)
@@ -1699,7 +1644,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check the operand size */
@@ -1713,7 +1658,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1727,10 +1672,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmDwordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
     else
     {
@@ -1742,7 +1687,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1756,10 +1701,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmWordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmWordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
 }
 
@@ -1776,7 +1721,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndAl)
     if (!Fast486FetchByte(State, &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -1791,8 +1736,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndAl)
 
     /* Write back the result */
     State->GeneralRegs[FAST486_REG_EAX].LowByte = Result;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAndEax)
@@ -1813,7 +1756,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndEax)
         if (!Fast486FetchDword(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1837,7 +1780,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndEax)
         if (!Fast486FetchWord(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1853,8 +1796,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAndEax)
         /* Write back the result */
         State->GeneralRegs[FAST486_REG_EAX].LowWord = Result;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeXorByteModrm)
@@ -1872,7 +1813,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorByteModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadModrmByteOperands(State,
@@ -1881,7 +1822,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorByteModrm)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -1895,10 +1836,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorByteModrm)
     State->Flags.Pf = Fast486CalculateParity(Result);
 
     /* Write back the result */
-    return Fast486WriteModrmByteOperands(State,
-                                         &ModRegRm,
-                                         Opcode & FAST486_OPCODE_WRITE_REG,
-                                         Result);
+    Fast486WriteModrmByteOperands(State,
+                                  &ModRegRm,
+                                  Opcode & FAST486_OPCODE_WRITE_REG,
+                                  Result);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeXorModrm)
@@ -1918,7 +1859,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check the operand size */
@@ -1932,7 +1873,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1946,10 +1887,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmDwordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
     else
     {
@@ -1961,7 +1902,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -1975,10 +1916,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmWordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmWordOperands(State,
+                                      &ModRegRm,
+                                      Opcode & FAST486_OPCODE_WRITE_REG,
+                                      Result);
     }
 }
 
@@ -1994,13 +1935,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorAl)
     {
         /* This opcode doesn't take any prefixes */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     if (!Fast486FetchByte(State, &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -2015,8 +1956,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorAl)
 
     /* Write back the result */
     State->GeneralRegs[FAST486_REG_EAX].LowByte = Result;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeXorEax)
@@ -2037,7 +1976,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorEax)
         if (!Fast486FetchDword(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2061,7 +2000,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorEax)
         if (!Fast486FetchWord(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2077,8 +2016,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXorEax)
         /* Write back the result */
         State->GeneralRegs[FAST486_REG_EAX].LowWord = Result;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeTestByteModrm)
@@ -2096,7 +2033,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestByteModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadModrmByteOperands(State,
@@ -2105,7 +2042,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestByteModrm)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
     /* Calculate the result */
     Result = FirstValue & SecondValue;
@@ -2116,9 +2053,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestByteModrm)
     State->Flags.Zf = (Result == 0);
     State->Flags.Sf = ((Result & SIGN_FLAG_BYTE) != 0);
     State->Flags.Pf = Fast486CalculateParity(Result);
-
-    /* The result is discarded */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeTestModrm)
@@ -2138,7 +2072,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check the operand size */
@@ -2152,7 +2086,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2175,7 +2109,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2188,9 +2122,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestModrm)
         State->Flags.Sf = ((Result & SIGN_FLAG_WORD) != 0);
         State->Flags.Pf = Fast486CalculateParity(Result);
     }
-
-    /* The result is discarded */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeTestAl)
@@ -2205,13 +2136,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestAl)
     {
         /* This opcode doesn't take any prefixes */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     if (!Fast486FetchByte(State, &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -2223,9 +2154,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestAl)
     State->Flags.Zf = (Result == 0);
     State->Flags.Sf = ((Result & SIGN_FLAG_BYTE) != 0);
     State->Flags.Pf = Fast486CalculateParity(Result);
-
-    /* The result is discarded */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeTestEax)
@@ -2246,7 +2174,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestEax)
         if (!Fast486FetchDword(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2267,7 +2195,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestEax)
         if (!Fast486FetchWord(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2280,9 +2208,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeTestEax)
         State->Flags.Sf = ((Result & SIGN_FLAG_WORD) != 0);
         State->Flags.Pf = Fast486CalculateParity(Result);
     }
-
-    /* The result is discarded */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeXchgByteModrm)
@@ -2300,7 +2225,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXchgByteModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadModrmByteOperands(State,
@@ -2309,7 +2234,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXchgByteModrm)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Write the value from the register to the R/M */
@@ -2319,20 +2244,14 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXchgByteModrm)
                                        FirstValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Write the value from the R/M to the register */
-    if (!Fast486WriteModrmByteOperands(State,
-                                       &ModRegRm,
-                                       TRUE,
-                                       SecondValue))
-    {
-        /* Exception occurred */
-        return FALSE;
-    }
-
-    return TRUE;
+    Fast486WriteModrmByteOperands(State,
+                                  &ModRegRm,
+                                  TRUE,
+                                  SecondValue);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeXchgModrm)
@@ -2352,7 +2271,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXchgModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check the operand size */
@@ -2366,7 +2285,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXchgModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Write the value from the register to the R/M */
@@ -2376,18 +2295,14 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXchgModrm)
                                             FirstValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Write the value from the R/M to the register */
-        if (!Fast486WriteModrmDwordOperands(State,
-                                            &ModRegRm,
-                                            TRUE,
-                                            SecondValue))
-        {
-            /* Exception occurred */
-            return FALSE;
-        }
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       TRUE,
+                                       SecondValue);
     }
     else
     {
@@ -2399,7 +2314,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXchgModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Write the value from the register to the R/M */
@@ -2409,28 +2324,21 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXchgModrm)
                                            FirstValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Write the value from the R/M to the register */
-        if (!Fast486WriteModrmWordOperands(State,
-                                           &ModRegRm,
-                                           TRUE,
-                                           SecondValue))
-        {
-            /* Exception occurred */
-            return FALSE;
-        }
+        Fast486WriteModrmWordOperands(State,
+                                      &ModRegRm,
+                                      TRUE,
+                                      SecondValue);
     }
-
-    /* The result is discarded */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePushEs)
 {
     /* Call the internal API */
-    return Fast486StackPush(State, State->SegmentRegs[FAST486_REG_ES].Selector);
+    Fast486StackPush(State, State->SegmentRegs[FAST486_REG_ES].Selector);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePopEs)
@@ -2440,17 +2348,17 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePopEs)
     if (!Fast486StackPop(State, &NewSelector))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Call the internal API */
-    return Fast486LoadSegment(State, FAST486_REG_ES, LOWORD(NewSelector));
+    Fast486LoadSegment(State, FAST486_REG_ES, LOWORD(NewSelector));
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePushCs)
 {
     /* Call the internal API */
-    return Fast486StackPush(State, State->SegmentRegs[FAST486_REG_CS].Selector);
+    Fast486StackPush(State, State->SegmentRegs[FAST486_REG_CS].Selector);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAdcByteModrm)
@@ -2468,7 +2376,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcByteModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadModrmByteOperands(State,
@@ -2477,7 +2385,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcByteModrm)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -2497,10 +2405,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcByteModrm)
     State->Flags.Pf = Fast486CalculateParity(Result);
 
     /* Write back the result */
-    return Fast486WriteModrmByteOperands(State,
-                                         &ModRegRm,
-                                         Opcode & FAST486_OPCODE_WRITE_REG,
-                                         Result);
+    Fast486WriteModrmByteOperands(State,
+                                  &ModRegRm,
+                                  Opcode & FAST486_OPCODE_WRITE_REG,
+                                  Result);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAdcModrm)
@@ -2520,7 +2428,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check the operand size */
@@ -2534,7 +2442,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2554,10 +2462,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmDwordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
     else
     {
@@ -2569,7 +2477,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2589,10 +2497,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmWordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmWordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
 
 }
@@ -2609,13 +2517,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcAl)
     {
         /* This opcode doesn't take any prefixes */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     if (!Fast486FetchByte(State, &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -2636,8 +2544,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcAl)
 
     /* Write back the result */
     State->GeneralRegs[FAST486_REG_EAX].LowByte = Result;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAdcEax)
@@ -2658,7 +2564,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcEax)
         if (!Fast486FetchDword(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2688,7 +2594,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcEax)
         if (!Fast486FetchWord(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2710,14 +2616,12 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAdcEax)
         /* Write back the result */
         State->GeneralRegs[FAST486_REG_EAX].LowWord = Result;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePushSs)
 {
     /* Call the internal API */
-    return Fast486StackPush(State, State->SegmentRegs[FAST486_REG_SS].Selector);
+    Fast486StackPush(State, State->SegmentRegs[FAST486_REG_SS].Selector);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePopSs)
@@ -2727,11 +2631,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePopSs)
     if (!Fast486StackPop(State, &NewSelector))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Call the internal API */
-    return Fast486LoadSegment(State, FAST486_REG_SS, LOWORD(NewSelector));
+    Fast486LoadSegment(State, FAST486_REG_SS, LOWORD(NewSelector));
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeSbbByteModrm)
@@ -2750,7 +2654,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbByteModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadModrmByteOperands(State,
@@ -2759,7 +2663,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbByteModrm)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check if this is the instruction that writes to R/M */
@@ -2782,10 +2686,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbByteModrm)
     State->Flags.Pf = Fast486CalculateParity(Result);
 
     /* Write back the result */
-    return Fast486WriteModrmByteOperands(State,
-                                         &ModRegRm,
-                                         Opcode & FAST486_OPCODE_WRITE_REG,
-                                         Result);
+    Fast486WriteModrmByteOperands(State,
+                                  &ModRegRm,
+                                  Opcode & FAST486_OPCODE_WRITE_REG,
+                                  Result);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeSbbModrm)
@@ -2806,7 +2710,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check the operand size */
@@ -2820,7 +2724,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbModrm)
                                            &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Check if this is the instruction that writes to R/M */
@@ -2843,10 +2747,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmDwordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
     else
     {
@@ -2858,7 +2762,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Check if this is the instruction that writes to R/M */
@@ -2881,10 +2785,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbModrm)
         State->Flags.Pf = Fast486CalculateParity(Result);
 
         /* Write back the result */
-        return Fast486WriteModrmWordOperands(State,
-                                             &ModRegRm,
-                                             Opcode & FAST486_OPCODE_WRITE_REG,
-                                             Result);
+        Fast486WriteModrmWordOperands(State,
+                                      &ModRegRm,
+                                      Opcode & FAST486_OPCODE_WRITE_REG,
+                                      Result);
     }
 }
 
@@ -2901,13 +2805,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbAl)
     {
         /* This opcode doesn't take any prefixes */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     if (!Fast486FetchByte(State, &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -2924,9 +2828,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbAl)
 
     /* Write back the result */
     State->GeneralRegs[FAST486_REG_EAX].LowByte = Result;
-
-    return TRUE;
-
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeSbbEax)
@@ -2948,7 +2849,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbEax)
         if (!Fast486FetchDword(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2974,7 +2875,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbEax)
         if (!Fast486FetchWord(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -2992,15 +2893,12 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSbbEax)
         /* Write back the result */
         State->GeneralRegs[FAST486_REG_EAX].LowWord = Result;
     }
-
-    return TRUE;
-
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePushDs)
 {
     /* Call the internal API */
-    return Fast486StackPush(State, State->SegmentRegs[FAST486_REG_DS].Selector);
+    Fast486StackPush(State, State->SegmentRegs[FAST486_REG_DS].Selector);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePopDs)
@@ -3010,11 +2908,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePopDs)
     if (!Fast486StackPop(State, &NewSelector))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Call the internal API */
-    return Fast486LoadSegment(State, FAST486_REG_DS, LOWORD(NewSelector));
+    Fast486LoadSegment(State, FAST486_REG_DS, LOWORD(NewSelector));
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeDaa)
@@ -3056,8 +2954,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeDaa)
     State->Flags.Sf = (Value & SIGN_FLAG_BYTE) != 0;
     State->Flags.Zf = (Value == 0);
     State->Flags.Pf = Fast486CalculateParity(Value);
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubByteModrm)
@@ -3075,7 +2971,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubByteModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadModrmByteOperands(State,
@@ -3084,7 +2980,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubByteModrm)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check if this is the instruction that writes to R/M */
@@ -3110,15 +3006,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubByteModrm)
     if (!(Opcode & 0x10))
     {
         /* Write back the result */
-        return Fast486WriteModrmByteOperands(State,
-                                             &ModRegRm,
-                                             Opcode & FAST486_OPCODE_WRITE_REG,
-                                             Result);
-    }
-    else
-    {
-        /* Discard the result */
-        return TRUE;
+        Fast486WriteModrmByteOperands(State,
+                                      &ModRegRm,
+                                      Opcode & FAST486_OPCODE_WRITE_REG,
+                                      Result);
     }
 }
 
@@ -3139,7 +3030,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check the operand size */
@@ -3153,7 +3044,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Check if this is the instruction that writes to R/M */
@@ -3179,15 +3070,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubModrm)
         if (!(Opcode & 0x10))
         {
             /* Write back the result */
-            return Fast486WriteModrmDwordOperands(State,
-                                                  &ModRegRm,
-                                                  Opcode & FAST486_OPCODE_WRITE_REG,
-                                                  Result);
-        }
-        else
-        {
-            /* Discard the result */
-            return TRUE;
+            Fast486WriteModrmDwordOperands(State,
+                                           &ModRegRm,
+                                           Opcode & FAST486_OPCODE_WRITE_REG,
+                                           Result);
         }
     }
     else
@@ -3200,7 +3086,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Check if this is the instruction that writes to R/M */
@@ -3226,15 +3112,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubModrm)
         if (!(Opcode & 0x10))
         {
             /* Write back the result */
-            return Fast486WriteModrmWordOperands(State,
-                                                 &ModRegRm,
-                                                 Opcode & FAST486_OPCODE_WRITE_REG,
-                                                 Result);
-        }
-        else
-        {
-            /* Discard the result */
-            return TRUE;
+            Fast486WriteModrmWordOperands(State,
+                                          &ModRegRm,
+                                          Opcode & FAST486_OPCODE_WRITE_REG,
+                                          Result);
         }
     }
 }
@@ -3251,13 +3132,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubAl)
     {
         /* This opcode doesn't take any prefixes */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     if (!Fast486FetchByte(State, &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -3278,8 +3159,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubAl)
         /* Write back the result */
         State->GeneralRegs[FAST486_REG_EAX].LowByte = Result;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubEax)
@@ -3300,7 +3179,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubEax)
         if (!Fast486FetchDword(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -3330,7 +3209,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubEax)
         if (!Fast486FetchWord(State, &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Calculate the result */
@@ -3352,8 +3231,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubEax)
             State->GeneralRegs[FAST486_REG_EAX].LowWord = Result;
         }
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeDas)
@@ -3395,8 +3272,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeDas)
     State->Flags.Sf = (Value & SIGN_FLAG_BYTE) != 0;
     State->Flags.Zf = (Value == 0);
     State->Flags.Pf = Fast486CalculateParity(Value);
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAaa)
@@ -3424,8 +3299,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAaa)
 
     /* Keep only the lowest 4 bits of AL */
     State->GeneralRegs[FAST486_REG_EAX].LowByte &= 0x0F;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAas)
@@ -3453,8 +3326,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAas)
 
     /* Keep only the lowest 4 bits of AL */
     State->GeneralRegs[FAST486_REG_EAX].LowByte &= 0x0F;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePushAll)
@@ -3478,7 +3349,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePushAll)
             if (!Fast486StackPush(State, Size ? SavedEsp.Long : SavedEsp.LowWord))
             {
                 /* Exception occurred */
-                return FALSE;
+                return;
             }
         }
         else
@@ -3488,12 +3359,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePushAll)
                                               : State->GeneralRegs[i].LowWord))
             {
                 /* Exception occurred */
-                return FALSE;
+                return;
             }
         }
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePopAll)
@@ -3515,7 +3384,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePopAll)
         if (!Fast486StackPop(State, &Value))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Don't modify ESP */
@@ -3525,8 +3394,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePopAll)
             else State->GeneralRegs[i].LowWord = LOWORD(Value);
         }
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeBound)
@@ -3544,14 +3411,14 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeBound)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!ModRegRm.Memory)
     {
         /* Invalid */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     /* Check for the segment override */
@@ -3572,7 +3439,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeBound)
                                            (PULONG)&LowerBound))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         if (!Fast486ReadMemory(State,
@@ -3583,14 +3450,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeBound)
                                sizeof(ULONG)))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         if ((Index < LowerBound) || (Index > UpperBound))
         {
             /* Out of bounds */
             Fast486Exception(State, FAST486_EXCEPTION_BR);
-            return FALSE;
         }
     }
     else
@@ -3604,7 +3470,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeBound)
                                           (PUSHORT)&LowerBound))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         if (!Fast486ReadMemory(State,
@@ -3615,18 +3481,15 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeBound)
                                sizeof(USHORT)))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         if ((Index < LowerBound) || (Index > UpperBound))
         {
             /* Out of bounds */
             Fast486Exception(State, FAST486_EXCEPTION_BR);
-            return FALSE;
         }
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeArpl)
@@ -3641,7 +3504,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeArpl)
     {
         /* Cannot be used in real mode or with a LOCK prefix */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     TOGGLE_ADSIZE(AddressSize);
@@ -3650,7 +3513,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeArpl)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Read the operands */
@@ -3660,7 +3523,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeArpl)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check if the RPL needs adjusting */
@@ -3674,13 +3537,12 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeArpl)
         State->Flags.Zf = TRUE;
 
         /* Write back the result */
-        return Fast486WriteModrmWordOperands(State, &ModRegRm, FALSE, SecondValue);
+        Fast486WriteModrmWordOperands(State, &ModRegRm, FALSE, SecondValue);
     }
     else
     {
         /* Clear ZF */
         State->Flags.Zf = FALSE;
-        return TRUE;
     }
 }
 
@@ -3701,11 +3563,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePushImm)
         if (!Fast486FetchDword(State, &Data))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Call the internal API */
-        return Fast486StackPush(State, Data);
+        Fast486StackPush(State, Data);
     }
     else
     {
@@ -3714,11 +3576,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePushImm)
         if (!Fast486FetchWord(State, (PUSHORT)&Data))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Call the internal API */
-        return Fast486StackPush(State, Data);
+        Fast486StackPush(State, Data);
     }
 }
 
@@ -3740,7 +3602,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeImulModrmImm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (Opcode == 0x6B)
@@ -3751,7 +3613,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeImulModrmImm)
         if (!Fast486FetchByte(State, (PUCHAR)&Byte))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         Multiplier = (LONG)Byte;
@@ -3766,7 +3628,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeImulModrmImm)
             if (!Fast486FetchDword(State, (PULONG)&Dword))
             {
                 /* Exception occurred */
-                return FALSE;
+                return;
             }
 
             Multiplier = Dword;
@@ -3779,7 +3641,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeImulModrmImm)
             if (!Fast486FetchWord(State, (PUSHORT)&Word))
             {
                 /* Exception occurred */
-                return FALSE;
+                return;
             }
 
             Multiplier = (LONG)Word;
@@ -3798,7 +3660,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeImulModrmImm)
                                            (PULONG)&Multiplicand))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Multiply */
@@ -3808,10 +3670,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeImulModrmImm)
         State->Flags.Cf = State->Flags.Of = ((Product < MINLONG) || (Product > MAXLONG));
 
         /* Write-back the result */
-        return Fast486WriteModrmDwordOperands(State,
-                                              &ModRegRm,
-                                              TRUE,
-                                              (ULONG)((LONG)Product));
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       TRUE,
+                                       (ULONG)((LONG)Product));
     }
     else
     {
@@ -3825,7 +3687,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeImulModrmImm)
                                           (PUSHORT)&Multiplicand))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Multiply */
@@ -3835,10 +3697,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeImulModrmImm)
         State->Flags.Cf = State->Flags.Of = ((Product < MINSHORT) || (Product > MAXSHORT));
 
         /* Write-back the result */
-        return Fast486WriteModrmWordOperands(State,
-                                             &ModRegRm,
-                                             TRUE,
-                                             (USHORT)((SHORT)Product));
+        Fast486WriteModrmWordOperands(State,
+                                      &ModRegRm,
+                                      TRUE,
+                                      (USHORT)((SHORT)Product));
     }
 }
 
@@ -3852,11 +3714,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePushByteImm)
     if (!Fast486FetchByte(State, (PUCHAR)&Data))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Call the internal API */
-    return Fast486StackPush(State, Data);
+    Fast486StackPush(State, Data);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeMovByteModrm)
@@ -3874,7 +3736,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovByteModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadModrmByteOperands(State,
@@ -3883,17 +3745,17 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovByteModrm)
                                       &SecondValue))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (Opcode & FAST486_OPCODE_WRITE_REG) Result = SecondValue;
     else Result = FirstValue;
 
     /* Write back the result */
-    return Fast486WriteModrmByteOperands(State,
-                                         &ModRegRm,
-                                         Opcode & FAST486_OPCODE_WRITE_REG,
-                                         Result);
+    Fast486WriteModrmByteOperands(State,
+                                  &ModRegRm,
+                                  Opcode & FAST486_OPCODE_WRITE_REG,
+                                  Result);
 
 }
 
@@ -3914,7 +3776,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovModrm)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check the operand size */
@@ -3928,17 +3790,17 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         if (Opcode & FAST486_OPCODE_WRITE_REG) Result = SecondValue;
         else Result = FirstValue;
 
         /* Write back the result */
-        return Fast486WriteModrmDwordOperands(State,
-                                              &ModRegRm,
-                                              Opcode & FAST486_OPCODE_WRITE_REG,
-                                              Result);
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       Opcode & FAST486_OPCODE_WRITE_REG,
+                                       Result);
     }
     else
     {
@@ -3950,17 +3812,17 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovModrm)
                                           &SecondValue))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         if (Opcode & FAST486_OPCODE_WRITE_REG) Result = SecondValue;
         else Result = FirstValue;
 
         /* Write back the result */
-        return Fast486WriteModrmWordOperands(State,
-                                             &ModRegRm,
-                                             Opcode & FAST486_OPCODE_WRITE_REG,
-                                             Result);
+        Fast486WriteModrmWordOperands(State,
+                                      &ModRegRm,
+                                      Opcode & FAST486_OPCODE_WRITE_REG,
+                                      Result);
     }
 }
 
@@ -3981,29 +3843,29 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovStoreSeg)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (ModRegRm.Register >= FAST486_NUM_SEG_REGS)
     {
         /* Invalid */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     if (OperandSize)
     {
-        return Fast486WriteModrmDwordOperands(State,
-                                              &ModRegRm,
-                                              FALSE,
-                                              State->SegmentRegs[ModRegRm.Register].Selector);
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       FALSE,
+                                       State->SegmentRegs[ModRegRm.Register].Selector);
     }
     else
     {
-        return Fast486WriteModrmWordOperands(State,
-                                             &ModRegRm,
-                                             FALSE,
-                                             State->SegmentRegs[ModRegRm.Register].Selector);
+        Fast486WriteModrmWordOperands(State,
+                                      &ModRegRm,
+                                      FALSE,
+                                      State->SegmentRegs[ModRegRm.Register].Selector);
     }
 }
 
@@ -4024,7 +3886,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLea)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* The second operand must be memory */
@@ -4032,23 +3894,23 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLea)
     {
         /* Invalid */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     /* Write the address to the register */
     if (OperandSize)
     {
-        return Fast486WriteModrmDwordOperands(State,
-                                              &ModRegRm,
-                                              TRUE,
-                                              ModRegRm.MemoryAddress);
+        Fast486WriteModrmDwordOperands(State,
+                                       &ModRegRm,
+                                       TRUE,
+                                       ModRegRm.MemoryAddress);
     }
     else
     {
-        return Fast486WriteModrmWordOperands(State,
-                                             &ModRegRm,
-                                             TRUE,
-                                             ModRegRm.MemoryAddress);
+        Fast486WriteModrmWordOperands(State,
+                                      &ModRegRm,
+                                      TRUE,
+                                      ModRegRm.MemoryAddress);
 
     }
 }
@@ -4070,7 +3932,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovLoadSeg)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if ((ModRegRm.Register >= FAST486_NUM_SEG_REGS)
@@ -4078,7 +3940,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovLoadSeg)
     {
         /* Invalid */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     if (OperandSize)
@@ -4088,10 +3950,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovLoadSeg)
         if (!Fast486ReadModrmDwordOperands(State, &ModRegRm, NULL, &Selector))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
-        return Fast486LoadSegment(State, ModRegRm.Register, LOWORD(Selector));
+        Fast486LoadSegment(State, ModRegRm.Register, LOWORD(Selector));
     }
     else
     {
@@ -4100,10 +3962,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovLoadSeg)
         if (!Fast486ReadModrmWordOperands(State, &ModRegRm, NULL, &Selector))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
-        return Fast486LoadSegment(State, ModRegRm.Register, Selector);
+        Fast486LoadSegment(State, ModRegRm.Register, Selector);
     }
 }
 
@@ -4134,8 +3996,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCwde)
         (State->GeneralRegs[FAST486_REG_EAX].LowByte & SIGN_FLAG_BYTE)
         ? 0xFF : 0x00;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeCdq)
@@ -4162,8 +4022,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCdq)
         (State->GeneralRegs[FAST486_REG_EAX].LowWord & SIGN_FLAG_WORD)
         ? 0xFFFF : 0x0000;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeCallAbs)
@@ -4184,7 +4042,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCallAbs)
         if (!Fast486FetchDword(State, &Offset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
     }
     else
@@ -4192,7 +4050,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCallAbs)
         if (!Fast486FetchWord(State, (PUSHORT)&Offset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
     }
 
@@ -4200,43 +4058,39 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCallAbs)
     if (!Fast486FetchWord(State, &Segment))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Push the current code segment selector */
     if (!Fast486StackPush(State, State->SegmentRegs[FAST486_REG_CS].Selector))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Push the current value of the instruction pointer */
     if (!Fast486StackPush(State, State->InstPtr.Long))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Load the new CS */
     if (!Fast486LoadSegment(State, FAST486_REG_CS, Segment))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Load new (E)IP */
     if (Size) State->InstPtr.Long = Offset;
     else State->InstPtr.LowWord = LOWORD(Offset);
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeWait)
 {
     // TODO: NOT IMPLEMENTED
     UNIMPLEMENTED;
-
-    return FALSE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePushFlags)
@@ -4251,12 +4105,12 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePushFlags)
     {
         /* Call the VM86 monitor */
         Fast486ExceptionWithErrorCode(State, FAST486_EXCEPTION_GP, 0);
-        return FALSE;
+        return;
     }
 
     /* Push the flags */
-    if (Size) return Fast486StackPush(State, State->Flags.Long);
-    else return Fast486StackPush(State, LOWORD(State->Flags.Long));
+    if (Size) Fast486StackPush(State, State->Flags.Long);
+    else Fast486StackPush(State, LOWORD(State->Flags.Long));
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodePopFlags)
@@ -4272,7 +4126,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePopFlags)
     if (!Fast486StackPop(State, &NewFlags.Long))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check for VM86 mode when IOPL is not 3 */
@@ -4280,7 +4134,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePopFlags)
     {
         /* Call the VM86 monitor */
         Fast486ExceptionWithErrorCode(State, FAST486_EXCEPTION_GP, 0);
-        return FALSE;
+        return;
     }
 
     State->Flags.Cf = NewFlags.Cf;
@@ -4296,8 +4150,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodePopFlags)
 
     if (Cpl == 0) State->Flags.Iopl = NewFlags.Iopl;
     if (Cpl <= State->Flags.Iopl) State->Flags.If = NewFlags.If;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeSahf)
@@ -4312,8 +4164,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSahf)
     /* Restore the reserved bits of FLAGS */
     State->Flags.AlwaysSet = TRUE;
     State->Flags.Reserved0 = State->Flags.Reserved1 = FALSE;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeLahf)
@@ -4323,8 +4173,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLahf)
 
     /* Set AH to the low-order byte of FLAGS */
     State->GeneralRegs[FAST486_REG_EAX].HighByte = LOBYTE(State->Flags.Long);
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeRet)
@@ -4342,11 +4190,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeRet)
     if (Opcode == 0xC2)
     {
         /* Fetch the number of bytes to pop after the return */
-        if (!Fast486FetchWord(State, &BytesToPop)) return FALSE;
+        if (!Fast486FetchWord(State, &BytesToPop)) return;
     }
 
     /* Pop the return address */
-    if (!Fast486StackPop(State, &ReturnAddress)) return FALSE;
+    if (!Fast486StackPop(State, &ReturnAddress)) return;
 
     /* Return to the calling procedure, and if necessary, pop the parameters */
     if (Size)
@@ -4359,8 +4207,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeRet)
         State->InstPtr.LowWord = LOWORD(ReturnAddress);
         State->GeneralRegs[FAST486_REG_ESP].LowWord += BytesToPop;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeLdsLes)
@@ -4381,7 +4227,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLdsLes)
     if (!Fast486ParseModRegRm(State, AddressSize, &ModRegRm))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!ModRegRm.Memory)
@@ -4394,11 +4240,16 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLdsLes)
         {
             UCHAR BopCode;
 
+#ifndef FAST486_NO_PREFETCH
+            /* Invalidate the prefetch since BOP handlers can alter the memory */
+            State->PrefetchValid = FALSE;
+#endif
+
             /* Fetch the BOP code */
             if (!Fast486FetchByte(State, &BopCode))
             {
                 /* Exception occurred */
-                return FALSE;
+                return;
             }
 
             /* Call the BOP handler */
@@ -4415,13 +4266,12 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLdsLes)
                 State->IntStatus = FAST486_INT_DELAYED;
             }
 
-            /* Return success */
-            return TRUE;
+            return;
         }
 
         /* Invalid */
         Fast486Exception(State, FAST486_EXCEPTION_UD);
-        return FALSE;
+        return;
     }
 
     if (!Fast486ReadMemory(State,
@@ -4433,7 +4283,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLdsLes)
                            OperandSize ? 6 : 4))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (OperandSize)
@@ -4445,10 +4295,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLdsLes)
         State->GeneralRegs[ModRegRm.Register].Long = Offset;
 
         /* Load the segment */
-        return Fast486LoadSegment(State,
-                                  (Opcode == 0xC4)
-                                  ? FAST486_REG_ES : FAST486_REG_DS,
-                                  Segment);
+        Fast486LoadSegment(State,
+                           (Opcode == 0xC4)
+                           ? FAST486_REG_ES : FAST486_REG_DS,
+                           Segment);
     }
     else
     {
@@ -4459,10 +4309,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLdsLes)
         State->GeneralRegs[ModRegRm.Register].LowWord = Offset;
 
         /* Load the segment */
-        return Fast486LoadSegment(State,
-                                  (Opcode == 0xC4)
-                                  ? FAST486_REG_ES : FAST486_REG_DS,
-                                  Segment);
+        Fast486LoadSegment(State,
+                           (Opcode == 0xC4)
+                           ? FAST486_REG_ES : FAST486_REG_DS,
+                           Segment);
     }
 }
 
@@ -4483,20 +4333,20 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeEnter)
     if (!Fast486FetchWord(State, &FrameSize))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     if (!Fast486FetchByte(State, &NestingLevel))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Push EBP */
     if (!Fast486StackPush(State, State->GeneralRegs[FAST486_REG_EBP].Long))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Save ESP */
@@ -4525,8 +4375,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeEnter)
     /* Reserve space for the frame */
     if (Size) State->GeneralRegs[FAST486_REG_ESP].Long -= (ULONG)FrameSize;
     else State->GeneralRegs[FAST486_REG_ESP].LowWord -= FrameSize;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeLeave)
@@ -4545,7 +4393,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLeave)
         State->GeneralRegs[FAST486_REG_ESP].Long = State->GeneralRegs[FAST486_REG_EBP].Long;
 
         /* Pop the saved base pointer from the stack */
-        return Fast486StackPop(State, &State->GeneralRegs[FAST486_REG_EBP].Long);
+        Fast486StackPop(State, &State->GeneralRegs[FAST486_REG_EBP].Long);
     }
     else
     {
@@ -4558,9 +4406,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLeave)
         if (Fast486StackPop(State, &Value))
         {
             State->GeneralRegs[FAST486_REG_EBP].LowWord = LOWORD(Value);
-            return TRUE;
         }
-        else return FALSE;
     }
 }
 
@@ -4580,28 +4426,28 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeRetFar)
     if (Opcode == 0xCA)
     {
         /* Fetch the number of bytes to pop after the return */
-        if (!Fast486FetchWord(State, &BytesToPop)) return FALSE;
+        if (!Fast486FetchWord(State, &BytesToPop)) return;
     }
 
     /* Pop the offset */
     if (!Fast486StackPop(State, &Offset))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Pop the segment */
     if (!Fast486StackPop(State, &Segment))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Load the new CS */
     if (!Fast486LoadSegment(State, FAST486_REG_CS, Segment))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Load new (E)IP, and if necessary, pop the parameters */
@@ -4615,8 +4461,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeRetFar)
         State->InstPtr.LowWord = LOWORD(Offset);
         State->GeneralRegs[FAST486_REG_ESP].LowWord += BytesToPop;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeInt)
@@ -4625,29 +4469,29 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeInt)
 
     switch (Opcode)
     {
-        case 0xCC:
+        case 0xCC:  // INT 3
         {
             /* This is the INT3 instruction */
             IntNum = 3;
             break;
         }
 
-        case 0xCD:
+        case 0xCD:  // INT xx
         {
             /* Fetch the interrupt number */
             if (!Fast486FetchByte(State, &IntNum))
             {
                 /* Exception occurred */
-                return FALSE;
+                return;
             }
 
             break;
         }
 
-        case 0xCE:
+        case 0xCE:  // INTO
         {
             /* Don't do anything if OF is cleared */
-            if (!State->Flags.Of) return TRUE;
+            if (!State->Flags.Of) return;
 
             /* Exception #OF */
             IntNum = FAST486_EXCEPTION_OF;
@@ -4663,7 +4507,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeInt)
     }
 
     /* Perform the interrupt */
-    return Fast486PerformInterrupt(State, IntNum);
+    Fast486PerformInterrupt(State, IntNum);
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
@@ -4683,21 +4527,21 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
     if (!Fast486StackPop(State, &InstPtr))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Pop CS */
     if (!Fast486StackPop(State, &CodeSel))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Pop EFLAGS */
     if (!Fast486StackPop(State, &NewFlags.Long))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check for protected mode */
@@ -4719,7 +4563,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
                 if (!Fast486LoadSegment(State, FAST486_REG_CS, CodeSel))
                 {
                     /* Exception occurred */
-                    return FALSE;
+                    return;
                 }
 
                 /* Set the new flags */
@@ -4732,10 +4576,10 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
             {
                 /* Call the VM86 monitor */
                 Fast486ExceptionWithErrorCode(State, FAST486_EXCEPTION_GP, 0);
-                return FALSE;
+                return;
             }
 
-            return TRUE;
+            return;
         }
 
         if (State->Flags.Nt)
@@ -4743,7 +4587,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
             /* Nested task return */
 
             UNIMPLEMENTED;
-            return FALSE;
+            return;
         }
 
         if (NewFlags.Vm)
@@ -4752,12 +4596,12 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
             ULONG Es, Ds, Fs, Gs;
 
             /* Pop ESP, SS, ES, FS, GS */
-            if (!Fast486StackPop(State, &StackPtr)) return FALSE;
-            if (!Fast486StackPop(State, &StackSel)) return FALSE;
-            if (!Fast486StackPop(State, &Es)) return FALSE;
-            if (!Fast486StackPop(State, &Ds)) return FALSE;
-            if (!Fast486StackPop(State, &Fs)) return FALSE;
-            if (!Fast486StackPop(State, &Gs)) return FALSE;
+            if (!Fast486StackPop(State, &StackPtr)) return;
+            if (!Fast486StackPop(State, &StackSel)) return;
+            if (!Fast486StackPop(State, &Es)) return;
+            if (!Fast486StackPop(State, &Ds)) return;
+            if (!Fast486StackPop(State, &Fs)) return;
+            if (!Fast486StackPop(State, &Gs)) return;
 
             /* Set the new IP */
             State->InstPtr.Long = LOWORD(InstPtr);
@@ -4768,21 +4612,21 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
             State->Flags.AlwaysSet = State->Flags.Vm = TRUE;
 
             /* Load the new segments */
-            if (!Fast486LoadSegment(State, FAST486_REG_CS, CodeSel)) return FALSE;
-            if (!Fast486LoadSegment(State, FAST486_REG_SS, StackSel)) return FALSE;
-            if (!Fast486LoadSegment(State, FAST486_REG_ES, Es)) return FALSE;
-            if (!Fast486LoadSegment(State, FAST486_REG_DS, Ds)) return FALSE;
-            if (!Fast486LoadSegment(State, FAST486_REG_FS, Fs)) return FALSE;
-            if (!Fast486LoadSegment(State, FAST486_REG_GS, Gs)) return FALSE;
+            if (!Fast486LoadSegment(State, FAST486_REG_CS, CodeSel)) return;
+            if (!Fast486LoadSegment(State, FAST486_REG_SS, StackSel)) return;
+            if (!Fast486LoadSegment(State, FAST486_REG_ES, Es)) return;
+            if (!Fast486LoadSegment(State, FAST486_REG_DS, Ds)) return;
+            if (!Fast486LoadSegment(State, FAST486_REG_FS, Fs)) return;
+            if (!Fast486LoadSegment(State, FAST486_REG_GS, Gs)) return;
 
-            return TRUE;
+            return;
         }
 
         /* Load the new CS */
         if (!Fast486LoadSegment(State, FAST486_REG_CS, CodeSel))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Set EIP */
@@ -4795,21 +4639,21 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
             if (!Fast486StackPop(State, &StackPtr))
             {
                 /* Exception */
-                return FALSE;
+                return;
             }
 
             /* Pop SS */
             if (!Fast486StackPop(State, &StackSel))
             {
                 /* Exception */
-                return FALSE;
+                return;
             }
 
             /* Load new SS */
             if (!Fast486LoadSegment(State, FAST486_REG_SS, StackSel))
             {
                 /* Exception */
-                return FALSE;
+                return;
             }
 
             /* Set ESP */
@@ -4842,7 +4686,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
                     || !State->SegmentRegs[i].DirConf))
                 {
                     /* Load the NULL descriptor in the segment */
-                    if (!Fast486LoadSegment(State, i, 0)) return FALSE;
+                    if (!Fast486LoadSegment(State, i, 0)) return;
                 }
             }
         }
@@ -4853,7 +4697,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
         {
             /* Invalid */
             Fast486ExceptionWithErrorCode(State, FAST486_EXCEPTION_GP, 0);
-            return FALSE;
+            return;
         }
 
         /* Set new EIP */
@@ -4863,7 +4707,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
         if (!Fast486LoadSegment(State, FAST486_REG_CS, CodeSel))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Set the new flags */
@@ -4871,8 +4715,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIret)
         else State->Flags.LowWord = NewFlags.LowWord & REAL_MODE_FLAGS_MASK;
         State->Flags.AlwaysSet = TRUE;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAam)
@@ -4886,7 +4728,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAam)
     if (!Fast486FetchByte(State, &Base))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Check if the base is zero */
@@ -4894,7 +4736,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAam)
     {
         /* Divide error */
         Fast486Exception(State, FAST486_EXCEPTION_DE);
-        return FALSE;
+        return;
     }
 
     /* Adjust */
@@ -4906,8 +4748,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAam)
     State->Flags.Zf = (Value == 0);
     State->Flags.Sf = ((Value & SIGN_FLAG_BYTE) != 0);
     State->Flags.Pf = Fast486CalculateParity(Value);
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeAad)
@@ -4921,7 +4761,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAad)
     if (!Fast486FetchByte(State, &Base))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Adjust */
@@ -4933,8 +4773,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeAad)
     State->Flags.Zf = (Value == 0);
     State->Flags.Sf = ((Value & SIGN_FLAG_BYTE) != 0);
     State->Flags.Pf = Fast486CalculateParity(Value);
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeXlat)
@@ -4956,14 +4794,11 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeXlat)
                            sizeof(UCHAR)))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Set AL to the result */
     State->GeneralRegs[FAST486_REG_EAX].LowByte = Value;
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeLoop)
@@ -4986,8 +4821,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLoop)
         /* Additional rule for LOOPNZ */
         if (State->Flags.Zf) Condition = FALSE;
     }
-
-    if (Opcode == 0xE1)
+    else if (Opcode == 0xE1)
     {
         /* Additional rule for LOOPZ */
         if (!State->Flags.Zf) Condition = FALSE;
@@ -4997,7 +4831,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLoop)
     if (!Fast486FetchByte(State, (PUCHAR)&Offset))
     {
         /* An exception occurred */
-        return FALSE;
+        return;
     }
 
     if (Condition)
@@ -5006,8 +4840,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLoop)
         if (Size) State->InstPtr.Long += Offset;
         else State->InstPtr.LowWord += Offset;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeJecxz)
@@ -5029,7 +4861,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeJecxz)
     if (!Fast486FetchByte(State, (PUCHAR)&Offset))
     {
         /* An exception occurred */
-        return FALSE;
+        return;
     }
 
     if (Condition)
@@ -5038,8 +4870,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeJecxz)
         if (Size) State->InstPtr.Long += Offset;
         else State->InstPtr.LowWord += Offset;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeCall)
@@ -5060,14 +4890,14 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCall)
         if (!Fast486FetchDword(State, (PULONG)&Offset))
         {
             /* An exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Push the current value of the instruction pointer */
         if (!Fast486StackPush(State, State->InstPtr.Long))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Move the instruction pointer */
@@ -5081,21 +4911,19 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCall)
         if (!Fast486FetchWord(State, (PUSHORT)&Offset))
         {
             /* An exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Push the current value of the instruction pointer */
         if (!Fast486StackPush(State, State->InstPtr.Long))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Move the instruction pointer */
         State->InstPtr.LowWord += Offset;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeJmp)
@@ -5116,7 +4944,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeJmp)
         if (!Fast486FetchDword(State, (PULONG)&Offset))
         {
             /* An exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Move the instruction pointer */
@@ -5130,7 +4958,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeJmp)
         if (!Fast486FetchWord(State, (PUSHORT)&Offset))
         {
             /* An exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Move the instruction pointer */
@@ -5139,8 +4967,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeJmp)
         /* Clear the top half of EIP */
         State->InstPtr.Long &= 0xFFFF;
     }
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeJmpAbs)
@@ -5161,7 +4987,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeJmpAbs)
         if (!Fast486FetchDword(State, &Offset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
     }
     else
@@ -5169,7 +4995,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeJmpAbs)
         if (!Fast486FetchWord(State, (PUSHORT)&Offset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
     }
 
@@ -5177,20 +5003,18 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeJmpAbs)
     if (!Fast486FetchWord(State, &Segment))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Load the new CS */
     if (!Fast486LoadSegment(State, FAST486_REG_CS, Segment))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Load new EIP */
     State->InstPtr.Long = Offset;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeMovAlOffset)
@@ -5208,7 +5032,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovAlOffset)
         if (!Fast486FetchDword(State, &Offset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
     }
     else
@@ -5218,20 +5042,20 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovAlOffset)
         if (!Fast486FetchWord(State, &WordOffset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         Offset = (ULONG)WordOffset;
     }
 
     /* Read from memory */
-    return Fast486ReadMemory(State,
-                             (State->PrefixFlags & FAST486_PREFIX_SEG) ?
-                             State->SegmentOverride : FAST486_REG_DS,
-                             Offset,
-                             FALSE,
-                             &State->GeneralRegs[FAST486_REG_EAX].LowByte,
-                             sizeof(UCHAR));
+    Fast486ReadMemory(State,
+                      (State->PrefixFlags & FAST486_PREFIX_SEG) ?
+                      State->SegmentOverride : FAST486_REG_DS,
+                      Offset,
+                      FALSE,
+                      &State->GeneralRegs[FAST486_REG_EAX].LowByte,
+                      sizeof(UCHAR));
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeMovEaxOffset)
@@ -5253,29 +5077,29 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovEaxOffset)
         if (!Fast486FetchDword(State, &Offset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Read from memory */
         if (OperandSize)
         {
-            return Fast486ReadMemory(State,
-                                     (State->PrefixFlags & FAST486_PREFIX_SEG) ?
-                                     State->SegmentOverride : FAST486_REG_DS,
-                                     Offset,
-                                     FALSE,
-                                     &State->GeneralRegs[FAST486_REG_EAX].Long,
-                                     sizeof(ULONG));
+            Fast486ReadMemory(State,
+                              (State->PrefixFlags & FAST486_PREFIX_SEG) ?
+                              State->SegmentOverride : FAST486_REG_DS,
+                              Offset,
+                              FALSE,
+                              &State->GeneralRegs[FAST486_REG_EAX].Long,
+                              sizeof(ULONG));
         }
         else
         {
-            return Fast486ReadMemory(State,
-                                     (State->PrefixFlags & FAST486_PREFIX_SEG) ?
-                                     State->SegmentOverride : FAST486_REG_DS,
-                                     Offset,
-                                     FALSE,
-                                     &State->GeneralRegs[FAST486_REG_EAX].LowWord,
-                                     sizeof(USHORT));
+            Fast486ReadMemory(State,
+                              (State->PrefixFlags & FAST486_PREFIX_SEG) ?
+                              State->SegmentOverride : FAST486_REG_DS,
+                              Offset,
+                              FALSE,
+                              &State->GeneralRegs[FAST486_REG_EAX].LowWord,
+                              sizeof(USHORT));
         }
     }
     else
@@ -5285,29 +5109,29 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovEaxOffset)
         if (!Fast486FetchWord(State, &Offset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Read from memory */
         if (OperandSize)
         {
-            return Fast486ReadMemory(State,
-                                     (State->PrefixFlags & FAST486_PREFIX_SEG) ?
-                                     State->SegmentOverride : FAST486_REG_DS,
-                                     Offset,
-                                     FALSE,
-                                     &State->GeneralRegs[FAST486_REG_EAX].Long,
-                                     sizeof(ULONG));
+            Fast486ReadMemory(State,
+                              (State->PrefixFlags & FAST486_PREFIX_SEG) ?
+                              State->SegmentOverride : FAST486_REG_DS,
+                              Offset,
+                              FALSE,
+                              &State->GeneralRegs[FAST486_REG_EAX].Long,
+                              sizeof(ULONG));
         }
         else
         {
-            return Fast486ReadMemory(State,
-                                     (State->PrefixFlags & FAST486_PREFIX_SEG) ?
-                                     State->SegmentOverride : FAST486_REG_DS,
-                                     Offset,
-                                     FALSE,
-                                     &State->GeneralRegs[FAST486_REG_EAX].LowWord,
-                                     sizeof(USHORT));
+            Fast486ReadMemory(State,
+                              (State->PrefixFlags & FAST486_PREFIX_SEG) ?
+                              State->SegmentOverride : FAST486_REG_DS,
+                              Offset,
+                              FALSE,
+                              &State->GeneralRegs[FAST486_REG_EAX].LowWord,
+                              sizeof(USHORT));
         }
     }
 }
@@ -5327,7 +5151,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovOffsetAl)
         if (!Fast486FetchDword(State, &Offset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
     }
     else
@@ -5337,19 +5161,19 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovOffsetAl)
         if (!Fast486FetchWord(State, &WordOffset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         Offset = (ULONG)WordOffset;
     }
 
     /* Write to memory */
-    return Fast486WriteMemory(State,
-                             (State->PrefixFlags & FAST486_PREFIX_SEG) ?
-                             State->SegmentOverride : FAST486_REG_DS,
-                             Offset,
-                             &State->GeneralRegs[FAST486_REG_EAX].LowByte,
-                             sizeof(UCHAR));
+    Fast486WriteMemory(State,
+                      (State->PrefixFlags & FAST486_PREFIX_SEG) ?
+                      State->SegmentOverride : FAST486_REG_DS,
+                      Offset,
+                      &State->GeneralRegs[FAST486_REG_EAX].LowByte,
+                      sizeof(UCHAR));
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeMovOffsetEax)
@@ -5371,27 +5195,27 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovOffsetEax)
         if (!Fast486FetchDword(State, &Offset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Write to memory */
         if (OperandSize)
         {
-            return Fast486WriteMemory(State,
-                                      (State->PrefixFlags & FAST486_PREFIX_SEG) ?
-                                      State->SegmentOverride : FAST486_REG_DS,
-                                      Offset,
-                                      &State->GeneralRegs[FAST486_REG_EAX].Long,
-                                      sizeof(ULONG));
+            Fast486WriteMemory(State,
+                               (State->PrefixFlags & FAST486_PREFIX_SEG) ?
+                               State->SegmentOverride : FAST486_REG_DS,
+                               Offset,
+                               &State->GeneralRegs[FAST486_REG_EAX].Long,
+                               sizeof(ULONG));
         }
         else
         {
-            return Fast486WriteMemory(State,
-                                      (State->PrefixFlags & FAST486_PREFIX_SEG) ?
-                                      State->SegmentOverride : FAST486_REG_DS,
-                                      Offset,
-                                      &State->GeneralRegs[FAST486_REG_EAX].LowWord,
-                                      sizeof(USHORT));
+            Fast486WriteMemory(State,
+                               (State->PrefixFlags & FAST486_PREFIX_SEG) ?
+                               State->SegmentOverride : FAST486_REG_DS,
+                               Offset,
+                               &State->GeneralRegs[FAST486_REG_EAX].LowWord,
+                               sizeof(USHORT));
         }
     }
     else
@@ -5401,33 +5225,38 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovOffsetEax)
         if (!Fast486FetchWord(State, &Offset))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Write to memory */
         if (OperandSize)
         {
-            return Fast486WriteMemory(State,
-                                      (State->PrefixFlags & FAST486_PREFIX_SEG) ?
-                                      State->SegmentOverride : FAST486_REG_DS,
-                                      Offset,
-                                      &State->GeneralRegs[FAST486_REG_EAX].Long,
-                                      sizeof(ULONG));
+            Fast486WriteMemory(State,
+                               (State->PrefixFlags & FAST486_PREFIX_SEG) ?
+                               State->SegmentOverride : FAST486_REG_DS,
+                               Offset,
+                               &State->GeneralRegs[FAST486_REG_EAX].Long,
+                               sizeof(ULONG));
         }
         else
         {
-            return Fast486WriteMemory(State,
-                                      (State->PrefixFlags & FAST486_PREFIX_SEG) ?
-                                      State->SegmentOverride : FAST486_REG_DS,
-                                      Offset,
-                                      &State->GeneralRegs[FAST486_REG_EAX].LowWord,
-                                      sizeof(USHORT));
+            Fast486WriteMemory(State,
+                               (State->PrefixFlags & FAST486_PREFIX_SEG) ?
+                               State->SegmentOverride : FAST486_REG_DS,
+                               Offset,
+                               &State->GeneralRegs[FAST486_REG_EAX].LowWord,
+                               sizeof(USHORT));
         }
     }
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeSalc)
 {
+    /*
+     * See: http://www.rcollins.org/secrets/opcodes/SALC.html
+     * for more information.
+     */
+
     /* Make sure this is the right instruction */
     ASSERT(Opcode == 0xD6);
 
@@ -5435,8 +5264,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeSalc)
 
     /* Set all the bits of AL to CF */
     State->GeneralRegs[FAST486_REG_EAX].LowByte = State->Flags.Cf ? 0xFF : 0x00;
-
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeMovs)
@@ -5465,7 +5292,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovs)
             || (!AddressSize && (State->GeneralRegs[FAST486_REG_ECX].LowWord == 0)))
         {
             /* Do nothing */
-            return TRUE;
+            return;
         }
     }
 
@@ -5483,7 +5310,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovs)
                            DataSize))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Write to the destination operand */
@@ -5495,7 +5322,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovs)
                             DataSize))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Increment/decrement ESI and EDI */
@@ -5546,9 +5373,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeMovs)
             }
         }
     }
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeCmps)
@@ -5579,7 +5403,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmps)
             || (!AddressSize && (State->GeneralRegs[FAST486_REG_ECX].LowWord == 0)))
         {
             /* Do nothing */
-            return TRUE;
+            return;
         }
     }
 
@@ -5601,7 +5425,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmps)
                            DataSize))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Read from the second source operand */
@@ -5614,7 +5438,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmps)
                            DataSize))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -5695,9 +5519,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeCmps)
             State->InstPtr = State->SavedInstPtr;
         }
     }
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeStos)
@@ -5781,7 +5602,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeStos)
                 else State->GeneralRegs[FAST486_REG_ECX].LowWord = LOWORD(Count);
 
                 /* Exception occurred */
-                return FALSE;
+                return;
             }
 
             if (!State->Flags.Df)
@@ -5816,7 +5637,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeStos)
                                 DataSize))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Increment/decrement EDI */
@@ -5831,9 +5652,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeStos)
             else State->GeneralRegs[FAST486_REG_EDI].LowWord -= DataSize;
         }
     }
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeLods)
@@ -5866,7 +5684,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLods)
                                   : State->GeneralRegs[FAST486_REG_ECX].LowWord;
 
         /* If the count is 0, do nothing */
-        if (Count == 0) return TRUE;
+        if (Count == 0) return;
 
         /* Only the last entry will be loaded */
         if (!State->Flags.Df)
@@ -5895,7 +5713,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLods)
                            DataSize))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Increment/decrement ESI */
@@ -5909,9 +5727,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeLods)
         if (!State->Flags.Df) State->GeneralRegs[FAST486_REG_ESI].LowWord += DataSize;
         else State->GeneralRegs[FAST486_REG_ESI].LowWord -= DataSize;
     }
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeScas)
@@ -5937,7 +5752,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeScas)
             || (!AddressSize && (State->GeneralRegs[FAST486_REG_ECX].LowWord == 0)))
         {
             /* Do nothing */
-            return TRUE;
+            return
         }
     }
 
@@ -5959,7 +5774,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeScas)
                            DataSize))
     {
         /* Exception occurred */
-        return FALSE;
+        return;
     }
 
     /* Calculate the result */
@@ -6024,9 +5839,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeScas)
             State->InstPtr = State->SavedInstPtr;
         }
     }
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeIns)
@@ -6112,7 +5924,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIns)
                 else State->GeneralRegs[FAST486_REG_ECX].LowWord = LOWORD(Count);
 
                 /* Exception occurred */
-                return FALSE;
+                return;
             }
 
             if (!State->Flags.Df)
@@ -6150,7 +5962,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIns)
                                 DataSize))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Increment/decrement EDI */
@@ -6165,9 +5977,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeIns)
             else State->GeneralRegs[FAST486_REG_EDI].LowWord -= DataSize;
         }
     }
-
-    /* Return success */
-    return TRUE;
 }
 
 FAST486_OPCODE_HANDLER(Fast486OpcodeOuts)
@@ -6227,7 +6036,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOuts)
                 else State->GeneralRegs[FAST486_REG_ECX].LowWord = LOWORD(Count);
 
                 /* Exception occurred */
-                return FALSE;
+                return;
             }
 
             if (State->Flags.Df)
@@ -6288,7 +6097,7 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOuts)
                                DataSize))
         {
             /* Exception occurred */
-            return FALSE;
+            return;
         }
 
         /* Write to the I/O port */
@@ -6310,9 +6119,6 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeOuts)
             else State->GeneralRegs[FAST486_REG_ESI].LowWord -= DataSize;
         }
     }
-
-    /* Return success */
-    return TRUE;
 }
 
 /* EOF */