
UltraSound SDK Revision History                           Updated: 03/07/94
===============================

   Version 1.02 - First general release

   Version 1.03 - Fixed bug in UltraSetVolume()

   Version 1.04 - Fixed bug in UltraMaxAlloc()

   Version 1.05 - Linear volume functions are now linear.
             - Source files split up so objs are separate. This
               will make your code smaller.
              - Microsoft libraries provided.
              - Changed some prototypes from int to unsigned char.
                  My lint checker liked ints better. The values
                  were 8 bit so I set the prototyes appropriately.
              - Added support for 2 Adlib-type timers.
              - Included interrupt callback functions. These
                  were done before but inadvertantly left out of
                  the libraries.

   Version 1.06 - Added functions to return state of DMA channel(s)
                  UltraDramDmaBusy,UltraSampleDmaBusy
              - Fixed potential problem with UltraPeekData and
                  UltraPokeData
              - Fixed bug in UltraVoiceStopped and UltraVolumeStopped
              - Added an support functions for sending/recieving data
                thru midi port.
   Version 1.07 - Fixed bug in restoring the interrupt vectors when
                 closing out the card. A benign problem for the most
                 part. Deadly if irq 7 was used.

   Version 1.08 - Changed the upload & download functions to accept
               a far pointer to the buffer of data to send/receive.
             - Added some of the recording functions. More complete
               documentation to follow.
             - Fixed a bug in the download. Problem downloading if
               buffer ended on a 256K page boundary. The memory 
               allocation structures would be blitzed.
             - IRQ and DMA channel's can now be NOT programmed for
               the board. If any of the parameters are set to 0, 
               the corresponding latch on the board will be setup
               such that it will not be used. This will allow the
               application NOT to use up a PC resource. This can
               be handy if resources are tight.
         
   Version 1.09 - Documentation change. UltraPokeData takes 3 arguments.
                  Prototype was correct, documentation was wrong.
               - Cleaned up documentation, added couple prototypes.
               - Added cdecl's for those who might need it.

   Version 1.10 - Added functions to allocate/deallocate voices. These
                  could have been done by the application, but is useful
                  to add here.
               - Fixed documentation on UltraMemFree(). Had arguments 
                  flipped.
               - Changed some of the source code to make recompiling for
                  Watcom C.
               - Added support for 3D sound implementation

    Version 2.00 - General documentation cleanup. Spelling, grammer etc..
               - Added a lot of hardware specific documentation
                  (Theory of operation, register level defs etc)
               - Fixed bug in volume ramping. Problems when the ramp
                  values are the same.

    Version 2.01 - Fixed bug in UltraAngPosition()
                - Changed init procedure to set locations 0&1 to 0. All
                  voices point there & will cause problems if their 
                  volumes are raised. (clipping when they are summed
                  in).

    Version 2.10 - Some of the 3D functions had their names spelled
                   with a capital D. They were changed to a small d to
                   be consistant with the documentation. Some compilers
                   would generate an error since the case didn't match.
                 - UltraMidiEnableRecv and UltraMidiEnableXmit were flipped.
                   They turned each other's IRQs on instead of their own.
                 - UltraMidiDisableRecv and UltraMidiDisableXmit were flipped.
                   They turned each other's IRQs off instead of their own.
                 - Fixed documentation on UltraStartVoice. When playing a
                   sample in reverse, the BEGIN location should be the
                   largest, the start of the loop should be next and the
                   end loop address should be the smallest.
                 - Fixed bug in UltraStartVoice(). A sampled attack was
                   not done properly. Playing a sample backwards was also
                   incorrect.
                 - Fixed documenation Appendix C. Bit 6 is the direction 
                   bit. 0 means increasing addresses. 1 means decreasing.
                   It is not normally necessary to set this bit. 
                   UltraStartVoice will set it if the start address is
                   greater than the end address.
                 - Cleaned up the makefiles a bit.
                 - Corrected doc on return values for UltraRecordDmaBusy()
                 - Changed the segment group names for Borland tiny model. 
                   Makes a .sys driver easier.....
                 - Added a UltraDup3d function. Will create another handle for
                   the same 3D data. Saves DRAM. UltraCloseDup3d added also.
                 - Fixed bug in UltraAlocVoice. Didn't init variable and
                   could return OK when there were no free voices.
                 - Moved some misc. global variables into _gf1_data struct
                 - Changed initial mixer setting to everything disabled
                 - Added support for the rollover bit
                 - changed    inportw to inpw
                              outportw to outpw
                              inport to inp
                              outport to outp
                          so it will compile with Borland C++ 3.1
                 - Fixed bug. Stopping a 3D sound abruptly would leave the
                   volume at whatever level it was at. It should have
                   ramped it down to zero.
                 - Made functions use ANSI calling sequence.
                 - Add support for rollover bit
                 - Add support for Metaware High C compiler
                 - Fixed bug with 3D header file and watcom libraries
                 - Fixed bug in enabling irq in sampling code
                 - changed DMA controller to use demand mode. This has no
                   effect on current hardware. (vars.c)

    Version 2.11
                 - Fixed bug in UltraSetVoiceMode. It would disable irqs
                  on the voice.
                 - Changes several functions to accept far pointers. This
                  was necessary to support SS != DS (i.e. OS/2)
                 - Fixed problem in UltraReadDmaPos(). Could hang if counter
                   was not moving.
                 - Fixed boundary bug in PrimeDma. Ending location was
                  off by one.
                - Fixed some ROLLOVER problems. UltraSetVoiceEnd() and
                  handle_voice() needed some tweeks.
                - Made UltraPing() look at two values to determine if card
                  is present
                - Added prototypes for the handler's to gf1proto.h
                - irq.c changed MEATWARE to METAWARE

    Version 2.13
                - Fixed some 3d Prototypes.
                - Changed the handler's prototypes to standard ones.
                - Minor changes so it will build with visual C++ (C8)
                - Added a couple new functions.
                           UltraStopRecordDma()
                           UltraStopPlayDma()
                - Changed Ultra16Xparent. Line level input too low.
                - Fixed bug in irq16.c. Wasn't clearing DMA busy flags.
                - Fixed off-by-one in GetRecordDmaPos(). Would make it look
                        like it xferred more data than it did.
                - Changed board version checking to this
                    5 - ICS mixer. Some inputs are flipped
                    6-7 - ICS mixer. Iinputs all correct
                    8-11 - UltraMAX (No ICS mixer)
                    0x81 - 0x90 - GUS w/o line in and mic enables
                - Added channel mutes to ICS mixer code and UltraMixMute()
                    function
                - Changed name of mixer.c icsmix.c
                - Added #defines to includes to allow them to be included
                    multiple times.
                - Added MallocTinyAlignedBuff(). Small and Tiny model
                    should use this to get a page-aligned buff.
                - Fixed malloc/farfree mismatch in MallocAlignedBuff()
                - Removed -Z options in makeborl for small model. Caused
                    some null pointer problems on exit. Tiny model still
                    uses them.....

    Version 2.20 - Pre-release at CES

    Version 2.21 - Changed WATCOM getvect and setvect routines to use
                   _dos_getvect and _dos_setvect.
