70 lines
1.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|