fix 16bit mixer handling on bigendian machines (sb16 hdma, cdda for cd images), also see sf patches #1284246 and #1989569
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3324
This commit is contained in:
		
							parent
							
								
									8288b0cd34
								
							
						
					
					
						commit
						ce5ef7a254
					
				
					 4 changed files with 102 additions and 26 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 *  Copyright (C) 2002-2008  The DOSBox Team
 | 
			
		||||
 *  Copyright (C) 2002-2009  The DOSBox Team
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 *  it under the terms of the GNU General Public License as published by
 | 
			
		||||
| 
						 | 
				
			
			@ -16,7 +16,7 @@
 | 
			
		|||
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* $Id: sblaster.cpp,v 1.71 2009-02-01 11:07:11 qbix79 Exp $ */
 | 
			
		||||
/* $Id: sblaster.cpp,v 1.72 2009-03-19 20:45:42 c2woody Exp $ */
 | 
			
		||||
 | 
			
		||||
#include <iomanip>
 | 
			
		||||
#include <sstream>
 | 
			
		||||
| 
						 | 
				
			
			@ -461,8 +461,13 @@ static void GenerateDMASound(Bitu size) {
 | 
			
		|||
			read=sb.dma.chan->Read(size,(Bit8u *)&sb.dma.buf.b16[sb.dma.remain_size]) 
 | 
			
		||||
				>> (sb.dma.mode==DSP_DMA_16_ALIASED ? 1:0);
 | 
			
		||||
			Bitu total=read+sb.dma.remain_size;
 | 
			
		||||
#if defined(WORDS_BIGENDIAN)
 | 
			
		||||
			if (sb.dma.sign) sb.chan->AddSamples_s16_nonnative(total>>1,sb.dma.buf.b16);
 | 
			
		||||
			else sb.chan->AddSamples_s16u_nonnative(total>>1,(Bit16u *)sb.dma.buf.b16);
 | 
			
		||||
#else
 | 
			
		||||
			if (sb.dma.sign) sb.chan->AddSamples_s16(total>>1,sb.dma.buf.b16);
 | 
			
		||||
			else sb.chan->AddSamples_s16u(total>>1,(Bit16u *)sb.dma.buf.b16);
 | 
			
		||||
#endif
 | 
			
		||||
			if (total&1) {
 | 
			
		||||
				sb.dma.remain_size=1;
 | 
			
		||||
				sb.dma.buf.b16[0]=sb.dma.buf.b16[total-1];
 | 
			
		||||
| 
						 | 
				
			
			@ -470,8 +475,13 @@ static void GenerateDMASound(Bitu size) {
 | 
			
		|||
		} else {
 | 
			
		||||
			read=sb.dma.chan->Read(size,(Bit8u *)sb.dma.buf.b16) 
 | 
			
		||||
				>> (sb.dma.mode==DSP_DMA_16_ALIASED ? 1:0);
 | 
			
		||||
#if defined(WORDS_BIGENDIAN)
 | 
			
		||||
			if (sb.dma.sign) sb.chan->AddSamples_m16_nonnative(read,sb.dma.buf.b16);
 | 
			
		||||
			else sb.chan->AddSamples_m16u_nonnative(read,(Bit16u *)sb.dma.buf.b16);
 | 
			
		||||
#else
 | 
			
		||||
			if (sb.dma.sign) sb.chan->AddSamples_m16(read,sb.dma.buf.b16);
 | 
			
		||||
			else sb.chan->AddSamples_m16u(read,(Bit16u *)sb.dma.buf.b16);
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
		//restore buffer length value to byte size in aliased mode
 | 
			
		||||
		if (sb.dma.mode==DSP_DMA_16_ALIASED) read=read<<1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue