mirror of
https://github.com/reactos/reactos.git
synced 2024-10-15 13:45:58 +00:00
[SOFT386]
Implement the PUSHF instruction. svn path=/branches/ntvdm/; revision=60261
This commit is contained in:
parent
6a2d76ab68
commit
60a7ff2e92
|
@ -4132,10 +4132,32 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeWait)
|
|||
|
||||
SOFT386_OPCODE_HANDLER(Soft386OpcodePushFlags)
|
||||
{
|
||||
// TODO: NOT IMPLEMENTED
|
||||
UNIMPLEMENTED;
|
||||
BOOLEAN Size = State->SegmentRegs[SOFT386_REG_CS].Size;
|
||||
|
||||
return FALSE;
|
||||
if (State->PrefixFlags & SOFT386_PREFIX_LOCK)
|
||||
{
|
||||
/* Invalid prefix */
|
||||
Soft386Exception(State, SOFT386_EXCEPTION_UD);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (State->PrefixFlags & SOFT386_PREFIX_OPSIZE)
|
||||
{
|
||||
/* This OPSIZE prefix toggles the size */
|
||||
Size = !Size;
|
||||
}
|
||||
|
||||
/* Check for VM86 mode when IOPL is not 3 */
|
||||
if (State->Flags.Vm && (State->Flags.Iopl != 3))
|
||||
{
|
||||
/* Call the VM86 monitor */
|
||||
Soft386ExceptionWithErrorCode(State, SOFT386_EXCEPTION_GP, 0);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Push the flags */
|
||||
if (Size) return Soft386StackPush(State, State->Flags.Long);
|
||||
else return Soft386StackPush(State, LOWORD(State->Flags.Long));
|
||||
}
|
||||
|
||||
SOFT386_OPCODE_HANDLER(Soft386OpcodePopFlags)
|
||||
|
|
Loading…
Reference in a new issue