Filtered out tone frequencies outside dsp range in AY-3-8912

This commit is contained in:
fabio.olimpieri 2012-06-10 20:22:30 +00:00
parent 5d45fc349f
commit 155562e0f5

View File

@ -185,12 +185,12 @@ inline void play_ay (unsigned int tstados) {
tone_period_c= ((unsigned int) ordenador.ay_registers[4]) + 256 * ((unsigned int) ((ordenador.ay_registers[5]) & 0x0F)); tone_period_c= ((unsigned int) ordenador.ay_registers[4]) + 256 * ((unsigned int) ((ordenador.ay_registers[5]) & 0x0F));
noise_period= ((unsigned int) ordenador.ay_registers[6]) & 0x1F; noise_period= ((unsigned int) ordenador.ay_registers[6]) & 0x1F;
if (!tone_period_a) tone_period_a = 1;
if (!tone_period_b) tone_period_b = 1;
if (!tone_period_c) tone_period_c = 1;
if (!noise_period) noise_period = 1; if (!noise_period) noise_period = 1;
if (tone_period_a*ordenador.freq<110841) //Freq_camp > cpufreq/(2*16*tone_period)
ordenador.aych_a =1;
else
{
if (ordenador.aych_a<tone_period_a) if (ordenador.aych_a<tone_period_a)
ordenador.aych_a++; ordenador.aych_a++;
else else
@ -198,7 +198,12 @@ inline void play_ay (unsigned int tstados) {
ordenador.ayval_a = !ordenador.ayval_a; ordenador.ayval_a = !ordenador.ayval_a;
ordenador.aych_a =0; ordenador.aych_a =0;
} }
}
if (tone_period_b*ordenador.freq<110841) //Freq_camp > cpufreq/(2*16*tone_period)
ordenador.aych_b =1;
else
{
if (ordenador.aych_b<tone_period_b) if (ordenador.aych_b<tone_period_b)
ordenador.aych_b++; ordenador.aych_b++;
else else
@ -206,7 +211,12 @@ inline void play_ay (unsigned int tstados) {
ordenador.ayval_b = !ordenador.ayval_b; ordenador.ayval_b = !ordenador.ayval_b;
ordenador.aych_b =0; ordenador.aych_b =0;
} }
}
if (tone_period_c*ordenador.freq<110841) //Freq_camp > cpufreq/(2*16*tone_period)
ordenador.aych_c =1;
else
{
if (ordenador.aych_c<tone_period_c) if (ordenador.aych_c<tone_period_c)
ordenador.aych_c++; ordenador.aych_c++;
else else
@ -214,7 +224,7 @@ inline void play_ay (unsigned int tstados) {
ordenador.ayval_c = !ordenador.ayval_c; ordenador.ayval_c = !ordenador.ayval_c;
ordenador.aych_c =0; ordenador.aych_c =0;
} }
}
if (ordenador.aych_n<noise_period) if (ordenador.aych_n<noise_period)
ordenador.aych_n++; ordenador.aych_n++;