[Core/Sound] fixed Timer B overflow handling

This commit is contained in:
EkeEke 2017-04-09 19:12:21 +02:00
parent 116b001fb2
commit 62c1d82145
5 changed files with 9 additions and 5 deletions

View File

@ -121,6 +121,8 @@ Genesis Plus GX 1.7.5 (xx/xx/xxxx) (Eke-Eke)
* removed PSG boost noise feature & added optional high-quality PSG resampling * removed PSG boost noise feature & added optional high-quality PSG resampling
* fixed YM2612 self-feedback regression introduced in 1.7.1 * fixed YM2612 self-feedback regression introduced in 1.7.1
* fixed YM2612 one-sample extra delay on operator1 output * fixed YM2612 one-sample extra delay on operator1 output
* fixed YM2612 LFO PM implementation: block & keyscale code should not be modified by LFO (verified on YM2612 die)
* fixed YM2612 Timer B overflow handling
[Gamecube/Wii] [Gamecube/Wii]
--------------- ---------------

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 MiB

After

Width:  |  Height:  |  Size: 3.3 MiB

View File

@ -26,6 +26,7 @@
** **
** 09-04-2017 Eke-Eke (Genesis Plus GX): ** 09-04-2017 Eke-Eke (Genesis Plus GX):
** - fixed LFO PM implementation: block & keyscale code should not be modified by LFO (verified on YM2612 die) ** - fixed LFO PM implementation: block & keyscale code should not be modified by LFO (verified on YM2612 die)
** - fixed Timer B overflow handling
** **
** 12-03-2017 Eke-Eke (Genesis Plus GX): ** 12-03-2017 Eke-Eke (Genesis Plus GX):
** - fixed Op1 self-feedback regression introduced by previous modifications ** - fixed Op1 self-feedback regression introduced by previous modifications
@ -801,10 +802,11 @@ INLINE void INTERNAL_TIMER_B(int step)
ym2612.OPN.ST.status |= 0x02; ym2612.OPN.ST.status |= 0x02;
/* reload the counter */ /* reload the counter */
if (ym2612.OPN.ST.TBL) do
{
ym2612.OPN.ST.TBC += ym2612.OPN.ST.TBL; ym2612.OPN.ST.TBC += ym2612.OPN.ST.TBL;
else }
ym2612.OPN.ST.TBC = ym2612.OPN.ST.TBL; while (ym2612.OPN.ST.TBC <= 0);
} }
} }
} }
@ -1526,11 +1528,11 @@ INLINE void OPNWriteMode(int r, int v)
ym2612.OPN.LFO_AM = 126; ym2612.OPN.LFO_AM = 126;
} }
break; break;
case 0x24: /* timer A High 8*/ case 0x24: /* timer A High */
ym2612.OPN.ST.TA = (ym2612.OPN.ST.TA & 0x03)|(((int)v)<<2); ym2612.OPN.ST.TA = (ym2612.OPN.ST.TA & 0x03)|(((int)v)<<2);
ym2612.OPN.ST.TAL = 1024 - ym2612.OPN.ST.TA; ym2612.OPN.ST.TAL = 1024 - ym2612.OPN.ST.TA;
break; break;
case 0x25: /* timer A Low 2*/ case 0x25: /* timer A Low */
ym2612.OPN.ST.TA = (ym2612.OPN.ST.TA & 0x3fc)|(v&3); ym2612.OPN.ST.TA = (ym2612.OPN.ST.TA & 0x3fc)|(v&3);
ym2612.OPN.ST.TAL = 1024 - ym2612.OPN.ST.TA; ym2612.OPN.ST.TAL = 1024 - ym2612.OPN.ST.TA;
break; break;