C64Lib.Core.MOS6526.CountTOD C# (CSharp) Метод

CountTOD() публичный Метод

public CountTOD ( ) : void
Результат void
        public void CountTOD()
        {
            byte lo, hi;

            // Decrement frequency divider
            if (tod_divider != 0)
                tod_divider--;
            else
            {

                // Reload divider according to 50/60 Hz flag
                if ((cra & 0x80) > 0)
                    tod_divider = 4;
                else
                    tod_divider = 5;

                // 1/10 seconds
                tod_10ths++;
                if (tod_10ths > 9)
                {
                    tod_10ths = 0;

                    // Seconds
                    lo = (byte)((tod_sec & 0x0f) + 1);
                    hi = (byte)(tod_sec >> 4);
                    if (lo > 9)
                    {
                        lo = 0;
                        hi++;
                    }

                    if (hi > 5)
                    {
                        tod_sec = 0;

                        // Minutes
                        lo = (byte)((tod_min & 0x0f) + 1);
                        hi = (byte)(tod_min >> 4);

                        if (lo > 9)
                        {
                            lo = 0;
                            hi++;
                        }

                        if (hi > 5)
                        {
                            tod_min = 0;

                            // Hours
                            lo = (byte)((tod_hr & 0x0f) + 1);
                            hi = (byte)((tod_hr >> 4) & 1);
                            tod_hr &= 0x80;		// Keep AM/PM flag

                            if (lo > 9)
                            {
                                lo = 0;
                                hi++;
                            }

                            tod_hr |= (byte)((hi << 4) | lo);

                            if ((tod_hr & 0x1f) > 0x11)
                                tod_hr = (byte)(tod_hr & 0x80 ^ 0x80);
                        }
                        else
                            tod_min = (byte)((hi << 4) | lo);
                    }
                    else
                        tod_sec = (byte)((hi << 4) | lo);
                }

                // Alarm time reached? Trigger interrupt if enabled
                if (tod_10ths == alm_10ths && tod_sec == alm_sec &&
                    tod_min == alm_min && tod_hr == alm_hr)
                    TriggerInterrupt(4);
            }
        }