/*************************************************************************** * NAME: MIXER16.C ** COPYRIGHT: ** "Copyright (c) 1994, by FORTE ** ** "This software is furnished under a license and may be used, ** copied, or disclosed only in accordance with the terms of such ** license and with the inclusion of the above copyright notice. ** This software or any other copies thereof may not be provided or ** otherwise made available to any other person. No title to and ** ownership of the software is hereby transfered." **************************************************************************** * CREATION DATE: 01/01/94 *--------------------------------------------------------------------------* * VERSION DATE NAME DESCRIPTION *> 1.0 01/01/94 Original ***************************************************************************/ #include #include #include "forte.h" #include "ultraerr.h" #include "gf1os.h" #include "extern16.h" #include "defs16.h" #include "codecos.h" #include "codec.h" #include "proto16.h" extern ULTRA16_DATA _codec_data; extern IMAGE16 _image_codec; extern ULTRA_DATA _gf1_data; unsigned char Left_Input_Gain_Select(level) unsigned char level; { unsigned char old; old = _image_codec.lic; _image_codec.lic &= ~0x0f; _image_codec.lic |= (level&0x0f); ENTER_CRITICAL; outp(_codec_data.addr,LEFT_INPUT); outp(_codec_data.data,_image_codec.lic); LEAVE_CRITICAL; return(old); } unsigned char Left_Input_Source(source) unsigned char source; { unsigned char old; old = _image_codec.lic & 0xC0; _image_codec.lic &= ~0xC0; _image_codec.lic |= (source&0xC0); ENTER_CRITICAL; outp(_codec_data.addr,LEFT_INPUT); outp(_codec_data.data,_image_codec.lic); LEAVE_CRITICAL; return(old); } unsigned char Left_Mic_Gain_Enable(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.lic & MIC_GAIN) old = ON; if (on_off == ON) { _image_codec.lic |= MIC_GAIN; } else { _image_codec.lic &= ~MIC_GAIN; } ENTER_CRITICAL; outp(_codec_data.addr,LEFT_INPUT); outp(_codec_data.data,_image_codec.lic); LEAVE_CRITICAL; return(old); } unsigned char Right_Input_Gain_Select(level) unsigned char level; { unsigned char old; old = _image_codec.ric & 0x0f; _image_codec.ric &= ~0x0f; _image_codec.ric |= (level&0x0f); ENTER_CRITICAL; outp(_codec_data.addr,RIGHT_INPUT); outp(_codec_data.data,_image_codec.ric); LEAVE_CRITICAL; return(old); } unsigned char Right_Input_Source(source) unsigned char source; { unsigned char old; old = _image_codec.ric & 0xC0; _image_codec.ric &= ~0xC0; _image_codec.ric |= (source&0xC0); ENTER_CRITICAL; outp(_codec_data.addr,RIGHT_INPUT); outp(_codec_data.data,_image_codec.ric); LEAVE_CRITICAL; return(old); } unsigned char Right_Mic_Gain_Enable(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.ric & MIC_GAIN) old = ON; if (on_off == ON) { _image_codec.ric |= MIC_GAIN; } else { _image_codec.ric &= ~MIC_GAIN; } ENTER_CRITICAL; outp(_codec_data.addr,RIGHT_INPUT); outp(_codec_data.data,_image_codec.ric); LEAVE_CRITICAL; return(old); } unsigned char Left_GF1_Input_Level(level) unsigned char level; { unsigned char old; old = _image_codec.la1ic & 0x1f; _image_codec.la1ic &= ~0x1f; _image_codec.la1ic |= (level&0x1f); ENTER_CRITICAL; outp(_codec_data.addr,GF1_LEFT_INPUT); outp(_codec_data.data,_image_codec.la1ic); LEAVE_CRITICAL; return(old); } unsigned char Left_GF1_Input_Mute(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.la1ic & MUTE_INPUT) old = ON; if (on_off == ON) { _image_codec.la1ic |= MUTE_INPUT; } else { _image_codec.la1ic &= ~MUTE_INPUT; } ENTER_CRITICAL; outp(_codec_data.addr,GF1_LEFT_INPUT); outp(_codec_data.data,_image_codec.la1ic); LEAVE_CRITICAL; return(old); } unsigned char Left_Line_Input_Level(level) unsigned char level; { unsigned char old; old = _image_codec.llic & 0x1f; _image_codec.llic &= ~0x1f; _image_codec.llic |= (level&0x1f); ENTER_CRITICAL; outp(_codec_data.addr,LEFT_LINE_IN); outp(_codec_data.data,_image_codec.llic); LEAVE_CRITICAL; return(old); } unsigned char Left_Line_Input_Mute(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.llic & MUTE_INPUT) old = ON; if (on_off == ON) { _image_codec.llic |= MUTE_INPUT; } else { _image_codec.llic &= ~MUTE_INPUT; } ENTER_CRITICAL; outp(_codec_data.addr,LEFT_LINE_IN); outp(_codec_data.data,_image_codec.llic); LEAVE_CRITICAL; return(old); } unsigned char Left_CD_Input_Level(level) unsigned char level; { unsigned char old; old = _image_codec.la2ic & 0x1f; _image_codec.la2ic &= ~0x1f; _image_codec.la2ic |= (level&0x1f); ENTER_CRITICAL; outp(_codec_data.addr,CD_LEFT_INPUT); outp(_codec_data.data,_image_codec.la2ic); LEAVE_CRITICAL; return(old); } unsigned char Left_CD_Input_Mute(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.la2ic & MUTE_INPUT) old = ON; if (on_off == ON) { _image_codec.la2ic |= MUTE_INPUT; } else { _image_codec.la2ic &= ~MUTE_INPUT; } ENTER_CRITICAL; outp(_codec_data.addr,CD_LEFT_INPUT); outp(_codec_data.data,_image_codec.la2ic); LEAVE_CRITICAL; return(old); } unsigned char Right_GF1_Input_Level(level) unsigned char level; { unsigned char old; old = _image_codec.ra1ic & 0x1f; _image_codec.ra1ic &= ~0x1f; _image_codec.ra1ic |= (level&0x1f); ENTER_CRITICAL; outp(_codec_data.addr,GF1_RIGHT_INPUT); outp(_codec_data.data,_image_codec.ra1ic); LEAVE_CRITICAL; return(old); } unsigned char Right_GF1_Input_Mute(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.ra1ic & MUTE_INPUT) old = ON; if (on_off == ON) { _image_codec.ra1ic |= MUTE_INPUT; } else { _image_codec.ra1ic &= ~MUTE_INPUT; } ENTER_CRITICAL; outp(_codec_data.addr,GF1_RIGHT_INPUT); outp(_codec_data.data,_image_codec.ra1ic); LEAVE_CRITICAL; return(old); } unsigned char Right_Line_Input_Level(level) unsigned char level; { unsigned char old; old = _image_codec.rlic & 0x1f; _image_codec.rlic &= ~0x1f; _image_codec.rlic |= (level&0x1f); ENTER_CRITICAL; outp(_codec_data.addr,RIGHT_LINE_IN); outp(_codec_data.data,_image_codec.rlic); LEAVE_CRITICAL; return(old); } unsigned char Right_Line_Input_Mute(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.rlic & MUTE_INPUT) old = ON; if (on_off == ON) { _image_codec.rlic |= MUTE_INPUT; } else { _image_codec.rlic &= ~MUTE_INPUT; } ENTER_CRITICAL; outp(_codec_data.addr,RIGHT_LINE_IN); outp(_codec_data.data,_image_codec.rlic); LEAVE_CRITICAL; return(old); } unsigned char Right_CD_Input_Level(level) unsigned char level; { unsigned char old; old = _image_codec.ra2ic & 0x1f; _image_codec.ra2ic &= ~0x1f; _image_codec.ra2ic |= (level&0x1f); ENTER_CRITICAL; outp(_codec_data.addr,CD_RIGHT_INPUT); outp(_codec_data.data,_image_codec.ra2ic); LEAVE_CRITICAL; return(old); } unsigned char Mono_Output_Mute(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.mioc & 0x40) old = ON; if (on_off == ON) { _image_codec.mioc |= 0x40; } else { _image_codec.mioc &= ~0x40; } ENTER_CRITICAL; outp(_codec_data.addr,MONO_IO_CTRL); outp(_codec_data.data,_image_codec.mioc); LEAVE_CRITICAL; return(old); } unsigned char Mono_Input_Mute(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.mioc & MUTE_INPUT) old = ON; if (on_off == ON) { _image_codec.mioc |= MUTE_INPUT; } else { _image_codec.mioc &= ~MUTE_INPUT; } ENTER_CRITICAL; outp(_codec_data.addr,MONO_IO_CTRL); outp(_codec_data.data,_image_codec.mioc); LEAVE_CRITICAL; return(old); } unsigned char Mono_Input_Level(level) unsigned char level; { unsigned char old; old = _image_codec.mioc & 0x0f; _image_codec.mioc &= ~0x0f; _image_codec.mioc |= (level&0x0f); ENTER_CRITICAL; outp(_codec_data.addr,MONO_IO_CTRL); outp(_codec_data.data,_image_codec.mioc); LEAVE_CRITICAL; return(old); } unsigned char Right_CD_Input_Mute(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.ra2ic & MUTE_INPUT) old = ON; if (on_off == ON) { _image_codec.ra2ic |= MUTE_INPUT; } else { _image_codec.ra2ic &= ~MUTE_INPUT; } ENTER_CRITICAL; outp(_codec_data.addr,CD_RIGHT_INPUT); outp(_codec_data.data,_image_codec.ra2ic); LEAVE_CRITICAL; return(old); } unsigned char Left_Output_Attn_Select(level) unsigned char level; { unsigned char old; old = _image_codec.loc & 0x3f; _image_codec.loc &= ~0x3f; _image_codec.loc |= (level & 0x3f); ENTER_CRITICAL; outp(_codec_data.addr,LEFT_OUTPUT); outp(_codec_data.data,_image_codec.loc); LEAVE_CRITICAL; return(old); } unsigned char Left_Output_Mute(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.loc & MUTE_OUTPUT) old = ON; if (on_off == ON) { _image_codec.loc |= MUTE_OUTPUT; } else { _image_codec.loc &= ~MUTE_OUTPUT; } ENTER_CRITICAL; outp(_codec_data.addr,LEFT_OUTPUT); outp(_codec_data.data,_image_codec.loc); LEAVE_CRITICAL; return(old); } unsigned char Right_Output_Attn_Select(level) unsigned char level; { unsigned char old; old = _image_codec.roc & 0x3f; _image_codec.roc &= ~0x3f; _image_codec.roc |= (level & 0x3f); ENTER_CRITICAL; outp(_codec_data.addr,RIGHT_OUTPUT); outp(_codec_data.data,_image_codec.roc); LEAVE_CRITICAL; return(old); } unsigned char Right_Output_Mute(on_off) unsigned char on_off; { unsigned char old = OFF; if (_image_codec.roc & MUTE_OUTPUT) old = ON; if (on_off == ON) { _image_codec.roc |= MUTE_OUTPUT; } else { _image_codec.roc &= ~MUTE_OUTPUT; } ENTER_CRITICAL; outp(_codec_data.addr,RIGHT_OUTPUT); outp(_codec_data.data,_image_codec.roc); LEAVE_CRITICAL; return(old); } void Ultra16Xparent() { /* Lets try this method now ... */ Left_GF1_Input_Mute(OFF); /* Let GF1 output thru ... */ Right_GF1_Input_Mute(OFF); /* Let GF1 output thru ... */ Left_GF1_Input_Level(8); /* No attenuations please ... */ Right_GF1_Input_Level(8); Left_CD_Input_Mute(OFF); /* Let CD output thru ... */ Right_CD_Input_Mute(OFF); /* Let CD output thru ... */ Left_CD_Input_Level(8); /* No attenuations please ... */ Right_CD_Input_Level(8); Left_Line_Input_Mute(OFF); /* Let line level input thru */ Right_Line_Input_Mute(OFF); /* Let line level input thru */ Left_Line_Input_Level(8); /* 0db gain please */ Right_Line_Input_Level(8); Mono_Input_Mute(OFF); /* let microphone input thru ... */ Mono_Input_Level(4); /* No attenuation */ /* Now setup the sampling side of the codec .. */ Left_Input_Source(MUX_OUTPUT_SOURCE);/* loop mixed back to sample */ Right_Input_Source(MUX_OUTPUT_SOURCE);/* loop mixed back to sample */ Left_Output_Mute(ON); /* Block sampled output ... */ Right_Output_Mute(ON); /* Block sampled output ... */ Mono_Output_Mute(ON); /* Block sampled output ... */ Left_Input_Gain_Select(8); /* No gain during sampling .. */ Right_Input_Gain_Select(8); }