I tought my sweep unit was ok, but after testing "Excitebike" in a real NES when the bike "jumps" a platform and use sweep unit my emulator is not correctly emulating it.
The code im using to emulate the sweep is this:
It always confused me Sweep Unit.
Any help??
The code im using to emulate the sweep is this:
Code:
void ClockSweep(PSWEEP PSweep, PPROGTIMER pTimer, int add)
{
u16 result;
if (PSweep->negate)
result = pTimer->reload_value - (pTimer->reload_value >> PSweep->shift) + add;
else
result = pTimer->reload_value + (pTimer->reload_value >> PSweep->shift) + add;
if (PSweep->divider == 0)
{
PSweep->dac = 1;
if ((pTimer->reload_value < 8) || (result > 0x7FF && !PSweep->negate))
PSweep->dac = 0;
else
if (PSweep->enable && PSweep->shift)
{
pTimer->reload_value = result;
}
PSweep->divider = PSweep->period ;
}
else if (PSweep->divider)
PSweep->divider--;
if (PSweep->write)
{
PSweep->divider = PSweep->period ;
PSweep->write = 0;
}
}
{
u16 result;
if (PSweep->negate)
result = pTimer->reload_value - (pTimer->reload_value >> PSweep->shift) + add;
else
result = pTimer->reload_value + (pTimer->reload_value >> PSweep->shift) + add;
if (PSweep->divider == 0)
{
PSweep->dac = 1;
if ((pTimer->reload_value < 8) || (result > 0x7FF && !PSweep->negate))
PSweep->dac = 0;
else
if (PSweep->enable && PSweep->shift)
{
pTimer->reload_value = result;
}
PSweep->divider = PSweep->period ;
}
else if (PSweep->divider)
PSweep->divider--;
if (PSweep->write)
{
PSweep->divider = PSweep->period ;
PSweep->write = 0;
}
}
It always confused me Sweep Unit.
Any help??