BizHawk/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Tod.cs

70 lines
1.3 KiB
C#

namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS
{
public sealed partial class Cia
{
private void CountTod()
{
if (_todCounter > 0)
{
_todCounter -= _todDen;
return;
}
_todCounter += _todNum * ((_cra & 0x80) != 0 ? 6 : 5);
_tod10Ths++;
if (_tod10Ths > 9)
{
_tod10Ths = 0;
_todlo = (_todSec & 0x0F) + 1;
_todhi = (_todSec >> 4);
if (_todlo > 9)
{
_todlo = 0;
_todhi++;
}
if (_todhi > 5)
{
_todSec = 0;
_todlo = (_todMin & 0x0F) + 1;
_todhi = (_todMin >> 4);
if (_todlo > 9)
{
_todlo = 0;
_todhi++;
}
if (_todhi > 5)
{
_todMin = 0;
_todlo = (_todHr & 0x0F) + 1;
_todhi = (_todHr >> 4);
_todHr &= 0x80;
if (_todlo > 9)
{
_todlo = 0;
_todhi++;
}
_todHr |= (_todhi << 4) | _todlo;
if ((_todHr & 0x1F) > 0x11)
{
_todHr &= 0x80 ^ 0x80;
}
}
else
{
_todMin = (_todhi << 4) | _todlo;
}
}
else
{
_todSec = (_todhi << 4) | _todlo;
}
}
if (_tod10Ths == _alm10Ths && _todSec == _almSec && _todMin == _almMin && _todHr == _almHr)
{
TriggerInterrupt(4);
}
}
}
}