================================================================
	AWE32 Sound Driver for Linux / FreeBSD
		version 0.4.3; Nov. 1, 1998

	Takashi Iwai <iwai@ww.uni-erlangen.de>
================================================================

* GENERAL NOTES

This is a sound driver extension for SoundBlaster AWE32 and other
compatible cards (AWE32-PnP, SB32, SB32-PnP, AWE64 & etc) to enable
the wave synth operations.  The driver is provided for Linux 1.2.x
and 2.[012].x kernels, as well as FreeBSD, on Intel x86 and DEC
Alpha systems.

This driver was written by Takashi Iwai <iwai@ww.uni-erlangen.de>,
and provided "as is".  The original source (awedrv-0.4.3.tar.gz) and
binary packages are available on the following URL:
	http://bahamut.mm.t.u-tokyo.ac.jp/~iwai/awedrv/
Note that since the author is apart from this web site, the update is
not frequent now.


* NOTE TO LINUX USERS

To enable this driver on linux-2.[01].x kernels, you need turn on 
"AWE32 synth" options in sound menu when configure your linux kernel
and modules.  The precise installation procedure is described in the
AWE64-Mini-HOWTO and linux-kernel/Documetation/sound/AWE32.

If you're using PnP cards, the card must be initialized before loading
the sound driver.  There're several options to do this:
    - Initialize the card via ISA PnP tools, and load the sound module.
    - Initialize the card on DOS, and load linux by loadlin.exe
    - Use PnP kernel driver (for Linux-2.x.x)
The detailed instruction for the solution using isapnp tools is found
in many documents like above.  A brief instruction is also included in
the installation document of this package.
For PnP driver project, please refer to the following URL:
	http://www-jcr.lmh.ox.ac.uk/~pnp/


* USING THE DRIVER

The awedrv has several different playing modes to realize easy channel 
allocation for MIDI songs.  To hear the exact sound quality, you need
to obtain the extended sequencer program, drvmidi or playmidi-2.5.

For playing MIDI files, you *MUST* load the soundfont file on the
driver previously by sfxload utility.  Otherwise you'll here no sounds 
at all!  All the utilities and driver source packages are found in the
above URL.  The sfxload program is included in the package
awesfx-0.4.3.tgz.  Binary packages are available there, too.  See the
instruction in each package for installation.

Loading a soundfont file is very simple.  Just execute the command

	% sfxload synthgm.sbk

Then, sfxload transfers the file "synthgm.sbk" to the driver.
Both SF1 and SF2 formats are accepted.

Now you can hear midi musics by a midi player.

	% drvmidi foo.mid

If you run MIDI player after MOD player, you need to load soundfont
files again, since MOD player programs clear the previous loaded
samples by their own data.

If you have only 512kb on the sound card, I recommend to use dynamic
sample loading via -L option of drvmidi.  2MB GM/GS soundfont file is
available in most midi files.

	% sfxload synthgm
	% drvmidi -L 2mbgmgs foo.mid

This makes a big difference (believe me)!  For more details, please
refer to the FAQ list which is available on the URL above.

The current chorus, reverb and equalizer status can be changed by
aweset utility program (included in awesfx package).  Note that
some awedrv-native programs (like drvmidi and xmp) will change the
current settings by themselves.  The aweset program is effective
only for other programs like playmidi.

Enjoy.


* COMPILE FLAGS

Compile conditions are defined in awe_config.h.

[Compatibility Conditions]
The following flags are defined automatically when using installation
shell script.

- AWE_MODULE_SUPPORT
    indicates your Linux kernel supports module for each sound card
    (in recent 2.1 or 2.2 kernels and unofficial patched 2.0 kernels
    as distributed in the RH5.0 package).
    This flag is automatically set when you're using 2.1.x kernels.
    You can pass the base address and memory size via the following
    module options,
	io = base I/O port address (eg. 0x620)
	memsize = DRAM size in kilobytes (eg. 512)
    As default, AWE driver probes these values automatically.


[Hardware Conditions]
You DON'T have to define the following two values.
Define them only when the driver couldn't detect the card properly.

- AWE_DEFAULT_BASE_ADDR		(default: not defined)
    specifies the base port address of your AWE32 card.
    0 means to autodetect the address.

- AWE_DEFAULT_MEM_SIZE		(default: not defined)
    specifies the memory size of your AWE32 card in kilobytes.
    -1 means to autodetect its size.
    

[Sample Table Size]
From ver.0.4.0, sample tables are allocated dynamically (except
Linux-1.2.x system), so you need NOT to touch these parameters.
Linux-1.2.x users may need to increase these values to appropriate size 
if the sound card is equipped with more DRAM.

- AWE_MAX_SF_LISTS, AWE_MAX_SAMPLES, AWE_MAX_INFOS


[Other Conditions]

- AWE_ALWAYS_INIT_FM		(default: not defined)
    indicates the AWE driver always initialize FM passthrough even
    without DRAM on board.  Emu8000 chip has a restriction for playing
    samples on DRAM that at least two channels must be occupied as
    passthrough channels. 

- AWE_DEBUG_ON			(default: defined)
    turns on debugging messages if defined.

- AWE_HAS_GUS_COMPATIBILITY	(default: defined)
    Enables GUS compatibility mode if defined, reading GUS patches and 
    GUS control commands.  Define this option to use GMOD or other
    GUS module players.

- CONFIG_AWE32_MIDIEMU		(default: defined)
    Adds a MIDI emulation device by Emu8000 wavetable.  The emulation
    device can be accessed as an external MIDI, and sends the MIDI
    control codes directly.  XG and GS sysex/NRPN are accepted.
    No MIDI input is supported.

- CONFIG_AWE32_MIXER		(default: not defined)
    Adds a mixer device for AWE32 bass/treble equalizer control.
    You can access this device using /dev/mixer?? (usually mixer01).

- AWE_USE_NEW_VOLUME_CALC	(default: defined)
    Use the new method to calculate the volume change as compatible
    with DOS/Win drivers.  This option can be toggled via aweset
    program, or drvmidi player.

- AWE_CHECK_VTARGET		(default: defined)
    Check the current volume target value when searching for an
    empty channel to allocate a new voice.  This is experimentally
    implemented in this version.  (probably, this option doesn't
    affect the sound quality severely...)

- AWE_ALLOW_SAMPLE_SHARING	(default: defined)
   Allow sample sharing for differently loaded patches.
   This function is available only together with awesfx-0.4.3p3.
   Note that this is still an experimental option.

- DEF_FM_CHORUS_DEPTH		(default: 0x10)
    The default strength to be sent to the chorus effect engine.
    From 0 to 0xff.  Larger numbers may often cause weird sounds.

- DEF_FM_REVERB_DEPTH		(default: 0x10)
    The default strength to be sent to the reverb effect engine.
    From 0 to 0xff.  Larger numbers may often cause weird sounds.


* ACKNOWLEDGMENTS

Thanks to Witold Jachimczyk (witek@xfactor.wpi.edu) for much advice
on programming of AWE32.  Much code is brought from his AWE32-native 
MOD player, ALMP.
The port of awedrv to FreeBSD is done by Randall Hopper
(rhh@ct.picker.com).
The new volume calculation routine was derived from Mark Weaver's
ADIP compatible routines.
I also thank linux-awe-ml members for their efforts
to reboot their system many times :-)


* TODO'S

- Complete DOS/Win compatibility
- DSP-like output


* COPYRIGHT

Copyright (C) 1996-1998 Takashi Iwai

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
