
 ணࠬ஢ Sound Blaster 
ͼ

Sound Blaster ந  ᨭ⥧஢  ⠪  ஢ 㪨.
 ⮬ 䠩 㤥 ᬮ७ ணࠬ஢ ந ஢
롮ப १ Sound Blaster DSP.


  /뢮 SoundBlaster DSP 
ͼ

 DSP ( ஢ 㪮  ) ணࠬ १  ⮢,
 । १   Sound Blaster:

  2x6h - DSP 
  2xAh - DSP ⥭
  2xCh - DSP  (/) ,
         ﭨ   DSP(  7 )
  2xEh - ﭨ  ⥭ DSP (  7 ),
	 ⢥ত 뢠 DSP
  ⮫쪮  Sound Blaster 16
  2xFh - ⢥ত 뢠 DSP  16 ⠬

 x = 1    210h.
    x = 2    220h.
      .
      .
    x = 6    260h.



  DSP 
ͼ  
 
室  DSP ०, 祬  ࠡ  .  ⢫
 ᫥饬 :

  1)  1    (2x6)
  2)  3 ᥪ㭤
  3)  0    (2x6)
  4) ⠩  ﭨ  ⥭ (2xE)   7 = 1
  5) 訢   ⥭ (2xA)     AAh.

  DSP ॡ  100 . ᫨ ᫥ ⮣   稫
AAh. ,   㪮 ,     
.

ਬ:

#define MAX_BASE_SB 5

int     bases[MAX_BASE_SB]={ 0x220, 0x230, 0x240, 0x250, 0x260 };
int	baseAddrSB=0x220;


	// 

unsigned char pascal ReadSB
        (void)
{
unsigned int value;

while (!(inp((baseAddrSB+0xE)) & 0x80));
value = inp((baseAddrSB+0xA));
return value;
}

	// ஢ 稥
	
char pascal CheckSB
	( void )
{
int i, j;
for ( j=0; j<MAX_BASE_SB; j++ )
{
baseAddrSB=bases[j];
outportb(baseAddrSB+6,1);
delay(10);
outportb(baseAddrSB+6,0);
delay(10);
for(i=0; i<30000; i++ )
        if ( ReadSB()==0xAA )
		return 1;
}
return 0;
}


   DSP 
ͼ

祭    DSP  ᫥饩 楤ன:

  1) ⠩  ﭨ   DSP (2xCh)   7 = 0
  2)  祭    (2xCh)

ਬ:
       
void pascal WriteSB
	(unsigned char value)
{
while (inp(baseAddrSB+0xC) & 0x80);
outp(baseAddrSB+0xC, value);
}


 ⥭ DSP 
ͼ

祭    DSP  ᫥饩 楤ன:

  1) ⠩  ﭨ  ⥭ (2xE)   7 = 1
  2) ⠩ 祭   ⥭ (2xA)

ਬ: . .


 אַ ० 뢮  DAC 
ͼ

DAC -      ८ࠧ뢠 祭 롮ન 
(   0 - 255 )  . ⮡ ஢  㪮 
 ᨬ쭮 ஬   ।  0/255  DAC.
쪮 8-ࠧ來 DAC 㯥  אַ ०.  אַ ०
ணࠬ ⢥⢥  롮 । ६  롮ઠ,
DAC  뢮 㪮 롮ન  ⠪ ᪮   ணࠬ
ᯮᮡ  .

 DSP  ணࠬ஢ DAC  אַ ०:
10h - 뢥   DAC  DMA 8 .  ᯮ짮 
      室:
      1) 뤠 10h
      2)   .
      3) த १ ६ T  砭.
D1h -  ந 㪠.
D3h - 몫 ந 㪠.
20h -    ADC 8 .

ਬ ணࠬ஢ DAC  אַ ०:

#define WRITE_DATA_SB   0x10
#define ON_SOUND_SB	0xD1
#define OFF_SOUND_SB	0xD3

void    main
	( void )
{
long i;
char ch;
if ( CheckSB()==1 )
	printf("S O U N D  B L A S T E R !!!!\n");
else {
	printf(", ,      ...\n");
	return;
	}

WriteSB(ON_SOUND_SB);
ch=0;
for ( i=0; i<100000L; i++ )
{
   WriteSB(WRITE_DATA_SB);
   WriteSB(ch);
   if ( ch==0 ) ch=255;
   else ch=0;
}
WriteSB(OFF_SOUND_SB);

}



 ணࠬ஢ DAC  DMA 
ͼ

DAC  ⠪ ணࠬ஢, ⮡  ਭ 祭 ᫠ 
१ DMA.

 DAC:
14h - 祭 뢮  DAC 8  4KHz - > 23 KHz. ⥬ 訩
       , ⮬ 訩.

	WriteSB(DMA_8_BIT_DAC);
	WriteSB(lo(len));
	WriteSB(hi(len));

24h - 祭   ADC 8  4KHz - > 23 KHz
74h - 祭 뢮  DAC 4  ADPCM 4KHz - > 12 KHz
75h - 祭 뢮  DAC 4  ADPCM  4KHz - > 12 KHz  ⮬ 뫪
76h - 祭 뢮  DAC 2.6  ADPCM 4KHz - > 13 KHz
77h - 祭 뢮  DAC 2.6  ADPCM  4KHz - > 13 KHz  ⮬ 뫪
16h - 祭 뢮  DAC 2  ADPCM 4KHz - > 11 KHz
17h - 祭 뢮  DAC 2  ADPCM  4KHz - > 11 KHz  ⮬ 뫪

ADPCM ( ⨢ ᭮- ) -  㪮 ⮤
ᦠ,  ࠧ稥  ᫥⥫묨 롮ઠ ࠭ ᪮॥
祬  䠪᪨ 祭.  ०  ⠬ 뫪,   -
䠪᪮ 砫쭮 祭. 稥 ०    ⮢ 뫪 
   뢮 ᫥⥫     뫪.

Bxh - ணࠬ஢ ० DMA  16  ஢ 㪮.
     ( 쪮  SB16 )
      ᫥⥫쭮:
     , , Lo(Length-1), Hi(Length-1):

        ⮨:

          D7 D6 D5 D4  D3  D2   D1   D0
          
           1  0  1  1 A/D  A/I  FIFO  0
          
                    0=D/A 0=SC 0=off 
                    1=A/D 1=AI 1=on  
                                     
       騥 :
	 B8 -  横  16-⭮  㪠
         B0 - 筮 横  16- ந
         BE - ⮨樠㥬 16-⭠ 
         B6 - ⮨樠㥬 16-⭮ ந
       
        :

          D7 D6  D5       D4 D3 D2 D1 D0
         
           0  0 ८    0  0  0  0
		0-   0-
		1-८ 1- 

Cxh - ணࠬ஢ ० DMA  8- ஢ 㪮.
     ( 쪮  SB16 )
       ᠬ ,   16-.
         C8 -  横  8-⭮  㪠
	 C0 - 筮 横  8- ந
	 CE - ⮨樠㥬 8-⭠ 
         C6 - ⮨樠㥬 8-⭮ ந

FIFO ᯮ ⮡ 㤠 ᮣᮢ   ਮ 롮ન,
 㪮   ᯮᮡ  DMA,   ॡ.
 FIFO    墠 DMA  筮  , 
ॡ 롮ઠ. ᫨ 㣮 ன⢮   ᮪ ਮ⮬
頥  DMA, 㪮    ᪮ 롮ન 
㬥. FIFO   ६ 롮ન  DMA    DSP
  㪮 ⢠. FIFO 頥 直 ࠧ,  
뫠 DSP.  ० 筮 横, DSP ﭭ ९ணࠬ.
 FIFO DSP   ᮤঠ ,   뫨 뤠, 
 ⨫ DAC. ⮡  ⮣, FIFO   ४祭
 ०   横. ⥬, ᭮ ॢ  ⮨樠㥬
०,  DSP  ९ணࠬ.

1Ch - 祭 뢮  DAC 8  4KHz - > 23 KHz  ⮨樠樥
90h - 祭 뢮  DAC 8  4kHz - > 44 KHz  ⮨樠樥
48h - ⠭    뫪 । 뫪 91h, 99h
      ᭠砫 訩  ⥬ 訩 .
91h - 祭 뢮  DAC 8  4kHz - > 44 KHz ८
99h - 祭   ADC 8  4kHz - > 44 KHz ८

	WriteSB(SET_LEN_DMA_8_BIT);
	WriteSB(lo(len));
	WriteSB(hi(len));
	WriteSB(DMA_8_BIT_DAC_HI);

D0h - ⠭ 8- DMA
D4h -  8- DMA
D5h - ⠭ 16- DMA
D6h -  16- DMA
        ਣ    ⮨樠஢ ०,
      ⠪    横.

D9h - 室   樠㥬 ० DMA  16 ⠬
      ᫥ 砭 ⥪饣 .
DAh - 室   樠㥬 ० DMA  8 ⠬
      ᫥ 砭 ⥪饣 .

E1h -   ᨨ DSP. ᫥ 뫪 ⮩ , ⠩
       DSP  .   -   ᨨ  ன
       -   ᨨ.  4.00 -  SB16.

	    ८     FIFO  16 
	 
         < 2.00    -       21379   -     -
        >= 2.00    -       21379   +     -
	>= 2.01    -       43478   +     -
	>= 3.00    +       43478   +     -
	>= 3.01    +       43478   +     +

ਬ । ᨨ:

int pascal VersionSB
	( void )
{
char ch, ch1;
WriteSB(0xE1);
ch=ReadSB();
ch1=ReadSB();
verSB=ch<<8 | ch1;
if ( verSB>=0x200 )
	Fifo=1;
if ( verSB>=0x201 )
	MaxFrequency=1;
if ( verSB>=0x300 )
	Stereo=1;
if ( verSB>=0x301 )
	SixteenBit=1;
return verSB;
}



 ணࠬ஢ DMA 
ͼ


஫ DMA (אַ 㯠  ) ࠢ 뫪 
 ன⢠ /뢮    ᯮ짮 業ࠫ쭮
. IBM ᮢ⨬    ஫ DMA  
뫮  8 ⠬  㣮  뫮  16 ⠬. ஫ DMA,
  譨 ॣ஬ ࠭, ᯮᮡ  ६饭   64 .
 ਢ ଠ  ணࠬ஢ DMA.

  ⮢   DMA  ॣ஢ .
                             
    ஫          㭪
   
      DMA 1         00        0 
      c 8 ⠬    01        0 
      稭   02        1 
		    03        1 
                    04        2 
                    05        2 
                    06        3 
		    07        3 
    
      DMA  2        C0        4 
       16 ⠬   C2        4 
      騩       C4        5 
                    C6        5 
                    C8        6 
		    CA        6 
		    CC        7 
                    CE        7 


    ⮢  ॣ஢ ࠢ

             㭪
    DMAC1 DMAC2          
    
     0A    D4       ॣ ᪨
     0B    D6       ॣ ०
     0C    D8       ॣ   flip-flop


    ⮢   ॣ஢ ࠭

         㭪
   
      81      2  DMA  8 ⠬
      82      3  DMA  8 ⠬
      83      1  DMA  8 ⠬
      87      0  DMA  8 ⠬
      89      6  DMA  16 ⠬
      8A      7  DMA  16 ⠬
      8B      5  DMA  16 ⠬
            

    ॣ ०

             㭪
    
     7:6    롮 
       00       ࠭  
       01        ࠭ ०
       10       ࠭  ०
       11       ᪠ ࠭ ०
    
       5     饭 / ६ 
        1       ࠭ ६ 
	0       ࠭ 饭 
    
       4     樠
        1       ⮨樠 祭
        0        
    
     3:2    뫪
       00       ஢ 뫪
       01        뫪 (   )
       10       ⠩ 뫪 (   )
       11       饭
       **        ᫨  7:6 = 11
    
     1:0    롮 
       00       롥  0 (4)
       01       롥  1 (5)
       10       롥  2 (6)
       11       롥  3 (7)
              
              
     ᪨ 

            㭪
    
     7:3   ᯮ㥬 (   0 )
              
       2    ⠭/  ᪨
        1       ⠭  ᪨ ( ⪫  )
        0         ᪨ ( 㯥  )
    
     1:0    롮 
       00        0 (4)
       01        1 (5)
       10        2 (6)
       11        3 (7)


DMAC2 ᯮ  ࠡ  16 ⠬  DMAC1 ᯮ 
ࠡ  8 ⠬.  ਬ ணࠬ஢ DMA:

  1) ᫨ ᮫   襣 
	  LinearAddr = MK_SEG( Buf ) * 16L + MK_OFF ( Buf );

  2) ⪫  DMA 㪮  ⠭  ᪨
	outp(MaskPort, 1 + ( DMAChannel % 4 ));

  3)  㪠⥫  flip-flop
	outp(ClrPort, DMAChannel );

  4)  ० DMA  뫪
       롮 ०  ⠭  00h  ० .
        +/-  ⠭  0  饭 .
       ⮨樠樨  ⠭ ᮮ⢥⢥.
       뫪  ⠭  10h  ந 
      01h  . 롮   ⠭ ⠪    
       DMA 㪮 .
	outp(ModePort, Mode + ( DMAChannel % 4 ));

        ᯮ㥬 ०:
	48h +  -  横 ந
	58h +  - ⮨樠㥬 ந
	44h +  -  筮 横
	54h +  - ⮨樠㥬 

  5)  ᬥ饭 , 訩  ⥬ 訩 . 
      ⭠ ࠧ來 , ᬥ饭    ᫮  砫
      128k-⭮ ࠭,  8-  64K.  ⮩ ⮤ 
      ᫥ ᬥ饭  16 ⠬ -  ࠧ   
       । ᫥ ᬥ饭.

	#define lo(value) (unsigned char)((value) & 0x00FF)
	#define hi(value) (unsigned char)((value) >> 8)

	if ( SixteenBit==1 )
	      BufOffset= ( LinearAddr / 2 ) % 65536;
	else  BufOffset= LinearAddr % 65536;
	outp(BaseAddrPort, lo(BufOffset));
	outp(BaseAddrPort, hi(BufOffset));

  6)   뫪  ᮮ⢥騩  , 訩
       ⥬ 訩 .  뫪  8 ⠬, 
          .  뫪  16 ⠬, 
         ᫮  .

	if ( SixteenBit==1 )
		TransferLength/=2;
	outp(CountPort, lo(TransferLength-1));
	outp(CountPort, hi(TransferLength-1));

  7)  ࠭   ॣ ࠭ DMA.
	outp(PagePort, ( LinearAddr / 65536));

  8)  DMA 㪮  ⨢ ᮮ⢥騩  ᪨
	outp(MaskPort, DMAChannel % 4);

ਬ :
int MaskPort, ClrPort, ModePort, ModeDMA, CountPort, PagePort,
	BaseAddrPort;
int pageports[4]={ 0x87, 0x83, 0x81, 0x82 };

MaskPort=0x0A; ClrPort=0xC; ModePort=0xB;
ModeDMA=0x48+DMAChannel;
CountPort=1+DMAChannel*2;
BaseAddrPort=DMAChannel*2;
PagePort=pageports[DMAChannel];

outportb(MaskPort, 4 + DMAChannel);
outportb(ClrPort, DMAChannel );
outportb(ModePort, ModeDMA );
outportb(BaseAddrPort,lo(aligned_physical));
outportb(BaseAddrPort,hi(aligned_physical));
outportb(PagePort,(unsigned char)((aligned_physical>>16)&0xFF));
outportb(CountPort,lo(len-1));
outportb(CountPort,hi(len-1));
outportb(MaskPort, DMAChannel );



 ⠭  롮ન 
ͼ

 ᨨ Sound Blaster  4.00 ⠭  롮ન 믮
뫪 DSP  40h.  ⮬  ८ࠧ  ⠭ ६
 㫥:
    4KHz - > 23 KHz:
	Time Constant = 256 - (1,000,000 / sampling rate)
		      = 256 - (1,000,000 / 8,000 )
		      = 131

    4KHz - > 44 KHz:
	Time Constant = (MSByte of) 65536 - (256,000,000 / sampling rate)
		      = (MSByte of) 65536 - (256,000,000 / 44,100)
		      = (MSByte of) 59731
		      = (MSByte of) 0E953h
		      = 0E9h

void pascal RateSB
	( unsigned int rate )
{
unsigned char tc;

if ( MaxFrequency==0 )
{
    if ( rate<5000 ) rate=5000;
    if ( rate>22528 ) rate=22528;
    tc = (unsigned char)(256 - (1000000/rate));
}
else
{
    if ( rate<5000 ) rate=5000;
    if ( rate>45056 ) rate=45056;
    tc = (unsigned char)(hi((unsigned int)(65536-(256000000L/rate))));
}
WriteSB(TIME_CONSTANT);
WriteSB(tc);
}

 ⫨稥  ⮣ SB16 ணࠬ 䠪᪮ ⮩ 롮ન.
 41h ᯮ  ந,  42h ᯮ  .
     if ( Play==1 )
	     WriteSB ( 0x41 );
     else    WriteSB ( 0x42 );
     WriteSB ( hi( frequency ) );
     WriteSB ( lo( frequency ) );


  ஢ /뢮 㪠 
ͼ

⮡ 뢠  ந ,   ᯮ짮 ᫥
᫥⥫쭮:

  1) ।    ᥪ ࠭ 64 Kb
  2) ⠭ ணࠬ ࠡ⪨ 뢠.
  3) ணࠬ ஫ DMA  䮭 뫪
  4) ⠭  롮ન
  5)   I/O  DSP
  6)  ० 뫪 I/O  DSP
  7)  ࠧ   DSP ( 訩 /訩  )

᫥ ⮣ ࠧ 筥   ந 㪠.

뤥    DMA:

data=(char far *)farmalloc(131000L);
if ( data==NULL )
{
	printf("    DMA\n");
	return 0;
}
physical=((unsigned long)FP_OFF(data))+(((unsigned long)FP_SEG(data))<<4);
aligned_physical=physical+0x0FFFFL;
aligned_physical&=0xF0000L;
aligned=MK_FP((unsigned )((aligned_physical >> 4) & 0xFFFF),0);


 ਢ ਬ ᫥⥫쭮⥩  ணࠬ஢ SB
  DMA.
ଠ쭠 , ந:

  1)  D1h  2xCh
  2) ⠭ ࠡ稪 뢠
  3)  40h  2xCh
  4)  ⠭ ६  2xCh
  5) ணࠬ஢ DMA
  6)  14h  2xCh
  7)   롮ન
  8) 㦨 뢠,  砭 롮ન
  9) ⠭  ࠡ稪
 10)  D3h  2xCh

 ⮬  뢠    DSP,   ந.

襭 , ந:

  1)  D1h  2xCh
  2) ⠭ ࠡ稪 뢠
  3)  40h  2xCh
  4)  ⠭ ६  2xCh
  5) ணࠬ஢ DMA
  6)  48h  2xCh
  7)   롮ન
  8)  91h  2xCh
  9) 㦨 뢠,  砭 롮ન
 10) ⠭  ࠡ稪
 11)  D3h  2xCh

ଠ쭠 ,  㪠:

  1) ⠭ ࠡ稪 뢠
  2)  40h  2xCh
  3)  ⠭ ६  2xCh
  4) ணࠬ஢ DMA
  5)  24h  2xCh
  6)   롮ન
  7) 㦨 뢠,  砭 롮ન
  8) ⠭  ࠡ稪

 ⮬  뫠    DSP,   .

襭 , :

  1) ⠭ ࠡ稪 뢠
  2)  40h  2xCh
  3)  ⠭ ६  2xCh
  4) ணࠬ஢ DMA
  5)  48h  2xCh
  6)   롮ન
  7)  99h  2xCh
  8) 㦨 뢠,  砭 롮ન
  9) ⠭  ࠡ稪


  ஢ /뢮 㪠 
ͼ

 뫪 祭  뢠. ᪨ 
뢠   ⠭ IRQ   Sound Blaster:

            IRQ   뢠
            
              2      0Ah
              3      0Bh
              5      0Dh
              7      0Fh


 㦨 뢠 室 믮:

  1) ⢥न ਥ 뢠  DSP ⠢  (2xEh)  ࠧ 
     8-⭮ 㪠,   2xF  16-⭮ 㪠.
  2) 뢮 ᫥饣 , ᫨ .
  3) 뢥 祭 20h ( EOI )   ஫ 뢠 20h,
      ᫨ IRQ8-15(뢠 70h-77h),   20h  A0h.

⠭ 뢠 :

DMA_complete = 0;
disable();
OldIRQ = getvect(0x08 + SbIRQ);
setvect(0x08 + SbIRQ,SBHandler);
enable();

ࠡ稪 뢠 :

static void far interrupt SBHandler( void )
{
enable();
DMA_complete = 1;

// ⢥
inportb(baseAddrSB+0xE);
outportb(0x20,0x20);
}

樠 ࠡ稪 :

DMA_complete = 0;
im = inportb(0x21);
tm = ~(1 << SbIRQ);
outportb(0x21,im & tm);
enable();

 ࠡ稪 :

disable();
setvect(0x08 + SbIRQ,OldIRQ);
i = inportb(0x21);
outportb(0x21, i | (1 << SbIRQ));
enable();

ந 䠩 롮ન:

f = fopen(argv[1],"rb");
raw = ( char far * ) farmalloc(32000L);
if ( f == 0 || raw==0 )
{
	printf("   䠩 롮ન - %s\n",argv[1]);
	printf(" \n",argv[1]);
	ResetSB();
	return;
}

printf("ந 롮ન ...\n");
WriteSB(ON_SOUND_SB);
RateSB(22222);

len=fread(raw,1,32000,f);
while ( 1 )
{
	if ( len==0 ) break;
	PlaySB(raw,len);
	len=fread(raw,1,32000,f);
	while ( StatePlaySB()==0 )
		if ( kbhit() ) { getch(); goto Fin; }
}

Fin:
if ( f!=0 ) fclose(f);
if ( raw!=0 ) farfree(raw);
ResetSB();



 ८  
ͼ

 ந ८ 㪮 室 뫠 2  DSP, 
  , ன  ࠢ. 室 ⠪  㪠 SB,
  ந ८ , १ ॣ .



  Sound Blaster 
ͼ

 ਢ ଠ  SbPro.
 2x4h -   , 2x5h -   (⥭/).

void pascal WriteMixerSB
	( char index, char val )
{
outportb(baseAddrSB+4,index);
outportb(baseAddrSB+5,val);
}


char pascal ReadMixerSB
	( char index )
{
outportb(baseAddrSB+4,index);
return inportb(baseAddrSB+5);
}


   ᯮ  樠樨 . ⠭
 ॣ  0 ।    㣨 ॣ஢ .

void pascal ResetMixerSB
	( void )
{
WriteMixerSB(0,0); // RESET
}


  । 筨 㪠  ⨯ 䨫.

	       = 0Ch

		7   6   5   4   3   2   1   0
                
                           
                                 
                                     
		              ADC 筨
		  000 -         00 - 䮭 1
		  001 - ᮪       01 - CD
		  010 -     10 - 䮭 2
				      11 -  室

#define SOURCE_MIC1	0
#define SOURCE_CD	1
#define SOURCE_MIC2	2
#define SOURCE_LINE	3


void pascal InputMixerSB
	( char sou, char filtr )
{
char val;
val=(sou<<1)&0x6;
val|=(filtr<<3)&0x38;
WriteMixerSB(0xC,val);
}


 ந 㦨  ⠭ 䨫  ८ 㪠.

	       = 0Eh

		7   6   5   4   3   2   1   0
                
                                       
                                       
	     0 - ᯮ짮 䨫   0 - 
	     1 -  䨫           1 - Stereo


#define MONO	0
#define STEREO	1

#define USE_FILTER	0
#define BYPASS_FILTER	1

void pascal OutputMixerSB
	( char st, char filtr )
{
char val;
val=(st==1)?2:0;
val|=(filtr==1)?0x20:0;
WriteMixerSB(0xE,val);
}

 饩 ஬:

	       = 22h

		7   6   5   4   3   2   1   0
                Ŀ
                   
                                     
		 ஬         ஬
		                 ࠢ

void pascal MasterVolumeSB
	( char left, char right )
{
char val;
val=right&0xf;
val|=(left<<4)&0xf0;
WriteMixerSB(0x22,val);
}

 ஬ DSP:

	       = 04h

		7   6   5   4   3   2   1   0
                Ŀ
                   
                                     
		 ஬         ஬
		                 ࠢ

void pascal VoiceVolumeSB
	( char left, char right )
{
char val;
val=right&0xf;
val|=(left<<4)&0xf0;
WriteMixerSB(0x04,val);
}


 ஬ FM ᨭ⥧:

	      = 26h

		7   6   5   4   3   2   1   0
                Ŀ
                   
                                     
		 ஬         ஬
                                 ࠢ

void pascal FMVolumeSB
	( char left, char right )
{
char val;
val=right&0xf;
val|=(left<<4)&0xf0;
WriteMixerSB(0x26,val);
}


 ஬ CD:

	       = 28h

		7   6   5   4   3   2   1   0
                Ŀ
                   
                                     
		 ஬         ஬
                                 ࠢ

void pascal CDVolumeSB
	( char left, char right )
{
char val;
val=right&0xf;
val|=(left<<4)&0xf0;
WriteMixerSB(0x28,val);
}


 ஬  室:

	       = 2Eh

		7   6   5   4   3   2   1   0
                Ŀ
                   
                                     
		 ஬         ஬
                                 ࠢ

void pascal LineVolumeSB
	( char left, char right )
{
char val;
val=right&0xf;
val|=(left<<4)&0xf0;
WriteMixerSB(0x2E,val);
}

 ஬ 䮭:

	       = 0Ah

		7   6   5   4   3   2   1   0
                Ŀ
                                    
                                        
				   ஬ 䮭.

void pascal MicVolumeSB
	( char vol )
{
char val;
val=vol&0x7;
WriteMixerSB(0xA,val);
}



 ਬ砭:
ͼ

    㬥 ⠢ ᨬ .. 08/1995. . -,
   ஢᪮ . .
   묨  ⠢ ⮣ 㬥 㦨 ଠ
    ࠧ 筨. ⮬    ⢥⢥
     ଠ,   ० 孨  ⥫ 
   ᯮ짮 ⮣ 㬥.
 訬 ﬨ,   ⥫ ணࠬ஢ Sound Blaster !
			   Vale !
