/*************************************************************************** * NAME: VOCREAD.C ** COPYRIGHT: ** "Copyright (c) 1992, 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: 11/18/92 *--------------------------------------------------------------------------* * VERSION DATE NAME DESCRIPTION *> 1.0 11/18/92 Original ***************************************************************************/ #include #include #include "forte.h" #include "gf1proto.h" #include "osproto.h" #include "gf1hware.h" #include "gf1os.h" extern ULTRA_DATA _gf1_data; /*************************************************************** * This function will read the accumulator for a particular * voice. ***************************************************************/ unsigned long UltraReadVoice(int voice) { unsigned int count_low, count_high; unsigned long acc; unsigned char mode; ENTER_CRITICAL; outp(_gf1_data.voice_select,voice); /* Select the proper voice */ /* Get the high portion of the accumulator */ outp(_gf1_data.reg_select,GET_ACC_HIGH); count_high = inpw(_gf1_data.data_low); /* Get the low portion of the accumulator */ outp(_gf1_data.reg_select,GET_ACC_LOW); count_low = inpw(_gf1_data.data_low); /* convert from UltraSound's format to a physical address */ outp(_gf1_data.reg_select,GET_CONTROL); mode = inp(_gf1_data.data_hi); LEAVE_CRITICAL; acc = make_physical_address(count_low,count_high,mode); acc &= 0xfffffL; /* Only 20 bits please ... */ return(acc); }