[FAST486]

Properly check the limit for "expand down" segments.


svn path=/trunk/; revision=67528
This commit is contained in:
Aleksandar Andrejevic 2015-05-03 03:37:06 +00:00
parent 3da5321a16
commit 923efbbc4e

View file

@ -47,11 +47,23 @@ Fast486ReadMemory(PFAST486_STATE State,
/* Get the cached descriptor */ /* Get the cached descriptor */
CachedDescriptor = &State->SegmentRegs[SegmentReg]; CachedDescriptor = &State->SegmentRegs[SegmentReg];
if ((Offset + Size - 1) > CachedDescriptor->Limit) if (InstFetch || !CachedDescriptor->DirConf)
{ {
/* Read beyond limit */ if ((Offset + Size - 1) > CachedDescriptor->Limit)
Fast486Exception(State, FAST486_EXCEPTION_GP); {
return FALSE; /* Read beyond limit */
Fast486Exception(State, FAST486_EXCEPTION_GP);
return FALSE;
}
}
else
{
if (Offset < CachedDescriptor->Limit)
{
/* Read beyond limit */
Fast486Exception(State, FAST486_EXCEPTION_GP);
return FALSE;
}
} }
/* Check for protected mode */ /* Check for protected mode */
@ -157,11 +169,23 @@ Fast486WriteMemory(PFAST486_STATE State,
/* Get the cached descriptor */ /* Get the cached descriptor */
CachedDescriptor = &State->SegmentRegs[SegmentReg]; CachedDescriptor = &State->SegmentRegs[SegmentReg];
if ((Offset + Size - 1) > CachedDescriptor->Limit) if (!CachedDescriptor->DirConf)
{ {
/* Write beyond limit */ if ((Offset + Size - 1) > CachedDescriptor->Limit)
Fast486Exception(State, FAST486_EXCEPTION_GP); {
return FALSE; /* Write beyond limit */
Fast486Exception(State, FAST486_EXCEPTION_GP);
return FALSE;
}
}
else
{
if (Offset < CachedDescriptor->Limit)
{
/* Read beyond limit */
Fast486Exception(State, FAST486_EXCEPTION_GP);
return FALSE;
}
} }
/* Check for protected mode */ /* Check for protected mode */