// 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);
        }