ushort GetNextNote(byte param)
{
short freqIndex = (short)((_channelData.freqOffset) - 0x40);
if (freqIndex >= 0x3F)
freqIndex++;
freqIndex *= 2;
freqIndex += (short)(param << 6);
ushort freqData = _frequenceTable[freqIndex % 0x300];
if ((freqIndex % 0x300 >= 0x1C0) || (freqIndex / 0x300 > 0))
{
return (ushort)((((freqIndex / 0x300) - 1) << 10) + (freqData & 0x7FF));
}
else
{
// looks like a bug. dunno why. It's what the ASM code says.
return (ushort)((freqData) >> 1);
}
}