diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index b358c464c..bd3b19a68 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -426,7 +426,8 @@ class DivDispatch { #define NOTE_PERIODIC(x) round(parent->calcBaseFreq(chipClock,CHIP_DIVIDER,x,true)) #define NOTE_PERIODIC_NOROUND(x) parent->calcBaseFreq(chipClock,CHIP_DIVIDER,x,true) #define NOTE_FREQUENCY(x) parent->calcBaseFreq(chipClock,CHIP_FREQBASE,x,false) -#define NOTE_FNUM_BLOCK(x,bits) ((((int)parent->calcBaseFreq(chipClock,CHIP_FREQBASE,(x)%12,false))&((1<calcBaseFreqFNumBlock(chipClock,CHIP_FREQBASE,x,bits) #define COLOR_NTSC (315000000.0/88.0) #define COLOR_PAL (283.75*15625.0+25.0) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 905ba8aa5..2ebbd2fdb 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -887,6 +887,17 @@ double DivEngine::calcBaseFreq(double clock, double divider, int note, bool peri base*(divider/clock); } +unsigned short DivEngine::calcBaseFreqFNumBlock(double clock, double divider, int note, int bits) { + int bf=calcBaseFreq(clock,divider,note,false); + int block=note/12; + if (block<0) block=0; + if (block>7) block=7; + bf>>=block; + if (bf<0) bf=0; + if (bf>((1<