예제 #1
0
        private void UpdateCarryFlag(CarryFlagAffect flagAffect, byte initialValue, byte newValue)
        {
            switch (flagAffect)
            {
            case CarryFlagAffect.UNAFFECTED:
                break;

            case CarryFlagAffect.SET_IF_BORROW:
                flags.CarryFlag = (newValue > initialValue);
                break;

            case CarryFlagAffect.SET_IF_CARRY:
                flags.CarryFlag = (newValue < initialValue);
                break;

            case CarryFlagAffect.SET:
                flags.CarryFlag = true;
                break;

            case CarryFlagAffect.RESET:
                flags.CarryFlag = false;
                break;
            }
        }
예제 #2
0
        private void UpdateHalfCarryFlag(CarryFlagAffect flagAffect, byte initialValue, byte newValue)
        {
            switch (flagAffect)
            {
            case CarryFlagAffect.UNAFFECTED:
                break;

            case CarryFlagAffect.SET_IF_BORROW:
                flags.HalfCarryFlag = ((initialValue & 0xf0) > ((newValue - initialValue) & 0xf0));
                break;

            case CarryFlagAffect.SET_IF_CARRY:
                flags.HalfCarryFlag = ((initialValue & 0x0f) + ((newValue - initialValue) & 0x0f)) > 0x0f;
                break;

            case CarryFlagAffect.SET:
                flags.HalfCarryFlag = true;
                break;

            case CarryFlagAffect.RESET:
                flags.HalfCarryFlag = false;
                break;
            }
        }