1 /************************************
2 * unsigned char read_dsp(void)
7 ************************************/
8 unsigned char read_dsp(unsigned short base
)
10 while((inb(base
+0x0e)&0x80)==0); //Wait until there is something to read
11 return inb(base
+0x0a);
14 /************************************'
15 * sb_status detect_dsp(void);
17 * Detects if a SB16 is installed
19 * Returns: Success or failure
20 ************************************/
21 sb_status
detect_dsp(SB16
* sb16
)
23 for(base
=0x200;base
<0x280;base
+=0x10) //Tries to reset all DSP addresses there is
24 if(reset_dsp(base
)==SB_TRUE
)
32 /**************************************
33 * sb_status reset_dsp(unsigned short base_address);
35 * Tries to reset a DSP chip
36 * Arguments: base address
37 * Returns: Success of failure
38 **************************************/
39 sb_status
reset_dsp(unsigned short base_address
)
43 outb(base_address
+DSP_RESET_PORT
,1);
44 for(delay
=0;delay
<0xffff;delay
++);
46 outb(base_address
+DSP_RESET_PORT
,0);
47 for(delay
=0;delay
<0xffff;delay
++);
49 if((inb(base_address
+DSP_READ_STATUS_PORT
)&0x80)==0) return SB_FALSE
;
51 if(inb(base_address
+DSP_READ_DATA_PORT
)!=0xAA) return SB_FALSE
;
56 void write_dsp(unsigned short base
,unsigned char data
)
58 while ((inb(base
+DSP_WRITE_PORT
) & 0x80) != 0);
59 outb(base
+DSP_WRITE_PORT
, data
);