mirror of https://github.com/bsnes-emu/bsnes.git
41 lines
780 B
C++
41 lines
780 B
C++
auto APU::Sweep::checkPeriod() -> bool {
|
|
if(pulsePeriod > 0x7ff) return false;
|
|
|
|
if(decrement == 0) {
|
|
if((pulsePeriod + (pulsePeriod >> shift)) & 0x800) return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
auto APU::Sweep::clock(uint channel) -> void {
|
|
if(--counter == 0) {
|
|
counter = period + 1;
|
|
if(enable && shift && pulsePeriod > 8) {
|
|
int delta = pulsePeriod >> shift;
|
|
|
|
if(decrement) {
|
|
pulsePeriod -= delta;
|
|
if(channel == 0) pulsePeriod--;
|
|
} else if((pulsePeriod + delta) < 0x800) {
|
|
pulsePeriod += delta;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(reload) {
|
|
reload = false;
|
|
counter = period + 1;
|
|
}
|
|
}
|
|
|
|
auto APU::Sweep::power() -> void {
|
|
shift = 0;
|
|
decrement = 0;
|
|
period = 0;
|
|
counter = 1;
|
|
enable = 0;
|
|
reload = 0;
|
|
pulsePeriod = 0;
|
|
}
|