   To  assist  the  developpers, we  provide  tools  for  developping 
   applications  with Creative Voice System. These tools come in  the 
   form of driver, library functions and link module.


   CTV-MOD,  is a Microsoft C's link module for supporting the  8-bit 
   voice  data without file header and data compression.  The  source 
   code CTV-MOD.ASM is provided for developpers to tailor this module 
   to any model they desire.


   Three  global variables have to be declared in the  main  program. 
   They are unsigned integer:

     a. io_addx: the card's selectable I/O address used.
                 value  range    : 210, 220, 230, 240, 250 and 260
                 factory default : 220 hex
    
     b. intr_num: the interrupt used for voice output.
                  factory default : 7                

     c. voice_status: the status word that indicates the status of voice 
                      output


   The functions provided are as follow:


   1. Function   : unint ctv_card_here()
      Description: check  for  the availabilities  of  the  various 
                   music/sound features provided by Creative.
                   
                   The  check is based on the IO address stored  in 
                   the global variable io_addx which is defined  in 
                   the application program.
      Entry      : none
      Return     : Music/sound features available as shown below :
                   The high byte is always zero.
                   The low byte is defined as :
                       bit 0 : set if C/MS music available
                       bit 1 : set if FM music available
                       bit 2 : set if Creative voice available

                   The  type  of Creative music/sound card  can  be 
                   determined   from   the   return   value.    The 
                   GameBlaster card will return 1, the SoundBlaster 
                   will return 7 if the FM option is installed or 5 
                   if the FM option is not installed.

                   A  zero  return  value may be due  to  wrong  IO 
                   address value in the global value io_addx.

   2. Function   : int ctv_detect()
      Description: detects  the existence and functionality of  the 
                   voice card and turn on the speaker by defualt.
      Entry      : none
      Return     : 0, sucessfully initialize
                   1, voice card fails
                   2, I/O read/write fails
                   3, interrupt for DMA fails
      Note       : when a non-zero value is returned, it  indicates 
                   an error, the program should abort.

                   Before  this  function  is  called,  the  global 
                   variable io_addx and intr_num must be set to the 
                   correct value.

              
   3. Function   : void ctv_speaker(int on_off_flag)
      Description: turns  on/off the speaker.
      Entry      : the integer value on_off_flag set the status  of 
                   the voice output speaker. A non-zero value turns 
                   the speaker on else turns it off.
      Entry      : none


   4. Function   : int ctv_output(char far* buffer,
                                   unsigned int buffer_len,
                                   unsigned int sampling_rate)
      Description: outputs the voice
      Entry      : buffer is a far pointer to the voice data.
                   buffer_len is the length of the voice data.
                   sampling_rate is the sampling rate used when the 
                   voice is recorded, range 6000 - 18000Hz.
      Exit       : 0, sucessfull
                   1, error because currently there is voice  being 
                   output or paused, voice_status is not zero.
      Note       : while  the  voice being output,  status_word  is 
                   updated  to  a  non-zero  value.  At  the   end, 
                   status_word is set to zero again. 


   5. Function   : int ctv_pause()
      Description: puases the voice currently being output
      Entry      : none
      Exit       : 0, sucessfull
                   1, error, no voice is currently output


   6. Function   : int ctv_continue()
      Description: continues the paused voice output
      Entry      : none
      Exit       : 0, sucessfull
                   1, error, no voice output is currently pause


   7. Function   : int ctv_halt()
      Description: halts the voice currently being output
      Entry      : none
      Exit       : 0, sucessfull
                   1, error, no voice is currently output


   8. Function   : void ctv_uninstall()
      Description: turn off the speaker and stop the voice  output, 
                   if any.
      Entry      : none
      Exit       : none


