2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: drivers/dd/sound/dsp.c
5 * PURPOSE: Digital Signal Processing ?
6 * PROGRAMMER: Snatched from ?
10 * 10/23/02: Steven Edwards (Steven_Ed4153@yahoo.com)
17 /************************************
18 * unsigned char read_dsp(void)
23 ************************************/
24 unsigned char read_dsp(unsigned short base)
26 while((inb(base+0x0e)&0x80)==0); //Wait until there is something to read
27 return inb(base+0x0a);
30 /************************************'
31 * sb_status detect_dsp(void);
33 * Detects if a SB16 is installed
35 * Returns: Success or failure
36 ************************************/
37 sb_status detect_dsp(SB16* sb16)
39 for(base=0x200;base<0x280;base+=0x10) //Tries to reset all DSP addresses there is
40 if(reset_dsp(base)==SB_TRUE)
48 /**************************************
49 * sb_status reset_dsp(unsigned short base_address);
51 * Tries to reset a DSP chip
52 * Arguments: base address
53 * Returns: Success of failure
54 **************************************/
55 sb_status reset_dsp(unsigned short base_address)
59 outb(base_address+DSP_RESET_PORT,1);
60 for(delay=0;delay<0xffff;delay++);
62 outb(base_address+DSP_RESET_PORT,0);
63 for(delay=0;delay<0xffff;delay++);
65 if((inb(base_address+DSP_READ_STATUS_PORT)&0x80)==0) return SB_FALSE;
67 if(inb(base_address+DSP_READ_DATA_PORT)!=0xAA) return SB_FALSE;
72 void write_dsp(unsigned short base,unsigned char data)
74 while ((inb(base+DSP_WRITE_PORT) & 0x80) != 0);
75 outb(base+DSP_WRITE_PORT, data);