// Cascade the individual bits of the flags register towards the respective variables private void Flags_OnUpdate(object sender, EventArgs e) { CarryFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.CarryFlag) != 0); ParityFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.ParityFlag) != 0); AdjustFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.AdjustFlag) != 0); ZeroFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.ZeroFlag) != 0); SignFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.SignFlag) != 0); TrapFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.TrapFlag) != 0); InterruptEnableFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.InterruptEnableFlag) != 0); DirectionFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.DirectionFlag) != 0); OverflowFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.OverflowFlag) != 0); NestedTaskFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.NestedTaskFlag) != 0); ResumeFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.ResumeFlag) != 0); Virtual8086ModeFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.V8086ModeFlag) != 0); AlignmentCheck.Set((Flags.CurrentValue & (UInt32)FlagMask.AlignmentCheck) != 0); VirtualInterruptFlag.Set((Flags.CurrentValue & (UInt32)FlagMask.VirtualInterruptFlag) != 0); VirtualInterruptPending.Set((Flags.CurrentValue & (UInt32)FlagMask.VirtualInterruptPending) != 0); AllowCPUID.Set((Flags.CurrentValue & (UInt32)FlagMask.AllowCPUID) != 0); UInt32 iopl = (Flags.CurrentValue & (UInt32)FlagMask.IOPrivilegeLevel) >> 12; IOPrivilegeLevel.Set((byte)iopl); }