From 1b343e4dccf528eeff1941cfe1a8f87ac726e287 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Thu, 30 Jan 2025 10:51:17 +0100 Subject: [PATCH] - [FIX] El envelope timer no es resetejava al fer trigger - [FIX] El divisor del CH4 anava massa rapid --- APU.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/APU.cpp b/APU.cpp index 9699b9f..86f8cbf 100644 --- a/APU.cpp +++ b/APU.cpp @@ -147,7 +147,7 @@ namespace APU CH1.enabled = true; CH1.length_timer=NR11&0x3f; CH1.period_divider = NR13 | ((NR14 &0x7)<<8); - // envelope timer is reset + CH1.envelope_sweep_timer = 0; CH1.volume = NR12>>4; // sweep does several things (check documentation) } @@ -157,7 +157,7 @@ namespace APU CH2.enabled = true; CH2.length_timer=NR21&0x3f; CH2.period_divider = NR23 | ((NR24 &0x7)<<8); - // envelope timer is reset + CH2.envelope_sweep_timer = 0; CH2.volume = NR22>>4; // sweep does several things (check documentation) } @@ -167,7 +167,7 @@ namespace APU CH3.enabled = true; CH3.length_timer=NR31; CH3.period_divider = NR33 | ((NR34 &0x7)<<8); - // envelope timer is reset + CH3.envelope_sweep_timer = 0; CH3.volume = (NR32>>5)&0x3; // sweep does several things (check documentation) } @@ -178,7 +178,7 @@ namespace APU CH4.length_timer=NR41&0x3f; uint8_t clock_shift = ((NR43&0xf0)>>4);// if (clock_shift==0) clock_shift = 1; CH4.period_divider = clock_shift << (NR43&0x07); - // envelope timer is reset + CH4.envelope_sweep_timer = 0; CH4.volume = NR42>>4; // sweep does several things (check documentation) } @@ -403,8 +403,8 @@ namespace APU } } dotsCH4 += dt; - while (dotsCH4>=16) { - dotsCH4 -= 16; + while (dotsCH4>=64) { + dotsCH4 -= 64; CH4.period_divider--; if (CH4.period_divider==0) { uint8_t clock_shift = ((NR43&0xf0)>>3); if (clock_shift==0) clock_shift = 1;