diff options
| -rw-r--r-- | engines/scumm/player_nes.cpp | 38 | 
1 files changed, 18 insertions, 20 deletions
| diff --git a/engines/scumm/player_nes.cpp b/engines/scumm/player_nes.cpp index 5525a21e51..eaa59fb4f8 100644 --- a/engines/scumm/player_nes.cpp +++ b/engines/scumm/player_nes.cpp @@ -176,7 +176,8 @@ void Square::Write(int Reg, byte Val) {  		break;  	case 4: -		if (!(Enabled = Val ? true : false)) +		Enabled = Val; +		if (!Enabled)  			Timer = 0;  		break;  	} @@ -293,7 +294,8 @@ void Triangle::Write(int Reg, byte Val) {  		break;  	case 4: -		if (!(Enabled = Val ? true : false)) +		Enabled = Val; +		if (!Enabled)  			Timer = 0;  		break;  	} @@ -389,7 +391,8 @@ void Noise::Write(int Reg, byte Val) {  		break;  	case 4: -		if (!(Enabled = Val ? true : false)) +		Enabled = Val; +		if (!Enabled)  			Timer = 0;  		break;  	} @@ -533,18 +536,14 @@ int step(T &obj, int sampcycles, uint frame_Cycles, int frame_Num) {  			if (frame_Num < 4) {  				obj.QuarterFrame(); -				if (!(frame_Num & 1)) { +				if (frame_Num & 1) +					frame_Cycles++; +				else  					obj.HalfFrame(); -				} -			} -		 -			if (frame_Num & 1) -				frame_Cycles++; -		 -			if (frame_Num == 4) -				frame_Num = 0; -			else +  				frame_Num++; +			} else +				frame_Num = 0;  		}  		if (!obj.Cycles) @@ -571,14 +570,13 @@ int16 APU::GetSample(void) {  	while (tmp >= Frame.Cycles) {  		tmp -= Frame.Cycles;  		Frame.Cycles = 7457; -	 -		if (Frame.Num & 1) -			Frame.Cycles++; -	 -		if (Frame.Num == 4) -			Frame.Num = 0; -		else + +		if (Frame.Num < 4) { +			if (Frame.Num & 1) +				Frame.Cycles++;  			Frame.Num++; +		} else +			Frame.Num = 0;  	}  	Frame.Cycles -= tmp; | 
