- [FIX] El envelope timer no es resetejava al fer trigger

- [FIX] El divisor del CH4 anava massa rapid
This commit is contained in:
2025-01-30 10:51:17 +01:00
parent 9d3204daba
commit 1b343e4dcc

12
APU.cpp
View File

@@ -147,7 +147,7 @@ namespace APU
CH1.enabled = true; CH1.enabled = true;
CH1.length_timer=NR11&0x3f; CH1.length_timer=NR11&0x3f;
CH1.period_divider = NR13 | ((NR14 &0x7)<<8); CH1.period_divider = NR13 | ((NR14 &0x7)<<8);
// envelope timer is reset CH1.envelope_sweep_timer = 0;
CH1.volume = NR12>>4; CH1.volume = NR12>>4;
// sweep does several things (check documentation) // sweep does several things (check documentation)
} }
@@ -157,7 +157,7 @@ namespace APU
CH2.enabled = true; CH2.enabled = true;
CH2.length_timer=NR21&0x3f; CH2.length_timer=NR21&0x3f;
CH2.period_divider = NR23 | ((NR24 &0x7)<<8); CH2.period_divider = NR23 | ((NR24 &0x7)<<8);
// envelope timer is reset CH2.envelope_sweep_timer = 0;
CH2.volume = NR22>>4; CH2.volume = NR22>>4;
// sweep does several things (check documentation) // sweep does several things (check documentation)
} }
@@ -167,7 +167,7 @@ namespace APU
CH3.enabled = true; CH3.enabled = true;
CH3.length_timer=NR31; CH3.length_timer=NR31;
CH3.period_divider = NR33 | ((NR34 &0x7)<<8); CH3.period_divider = NR33 | ((NR34 &0x7)<<8);
// envelope timer is reset CH3.envelope_sweep_timer = 0;
CH3.volume = (NR32>>5)&0x3; CH3.volume = (NR32>>5)&0x3;
// sweep does several things (check documentation) // sweep does several things (check documentation)
} }
@@ -178,7 +178,7 @@ namespace APU
CH4.length_timer=NR41&0x3f; CH4.length_timer=NR41&0x3f;
uint8_t clock_shift = ((NR43&0xf0)>>4);// if (clock_shift==0) clock_shift = 1; uint8_t clock_shift = ((NR43&0xf0)>>4);// if (clock_shift==0) clock_shift = 1;
CH4.period_divider = clock_shift << (NR43&0x07); CH4.period_divider = clock_shift << (NR43&0x07);
// envelope timer is reset CH4.envelope_sweep_timer = 0;
CH4.volume = NR42>>4; CH4.volume = NR42>>4;
// sweep does several things (check documentation) // sweep does several things (check documentation)
} }
@@ -403,8 +403,8 @@ namespace APU
} }
} }
dotsCH4 += dt; dotsCH4 += dt;
while (dotsCH4>=16) { while (dotsCH4>=64) {
dotsCH4 -= 16; dotsCH4 -= 64;
CH4.period_divider--; CH4.period_divider--;
if (CH4.period_divider==0) { if (CH4.period_divider==0) {
uint8_t clock_shift = ((NR43&0xf0)>>3); if (clock_shift==0) clock_shift = 1; uint8_t clock_shift = ((NR43&0xf0)>>3); if (clock_shift==0) clock_shift = 1;