THE GUS MINI HOWTO

Version 0.2.2; 14/9/1997 (that's European date format ;-)

(C)opyright 1997 Nicolai Langfeldt (janl@math.uio.no)

This is a HOWTO on how to get Gravis Ultra Sound cards working under
Linux.  Specifically I describe the the 'Perex Ultra' driver for
Linux, it's a alternate sound driver for GUS cards, including GUS PnP.

The regular sound driver in Linux can drive most GUS cards, but not
GUS PnP, easily.  If you read the "Initializing PnP cards" and look at
the referred configuration files you can probably work out to get the
regular driver to work though, it's not, strictly speaking, magic.  An
other alternative is 4Front's commercial driver, for which you can
obtain a 5 day trial version.  See http://www.4Front-Tech.com/ (this
is a much enhanced commercial version of the regular Linux sound
driver).  Of all the three drivers 4Front's driver was easiest to get
working on my machine.  It is my opinion that the Perex Ultra driver
is the best free alternative.

* Getting it

First of all: you need root access to the machine you're installing
on.  If you haven't got that you can forget installing sound drivers.

Then you get the driver.  http://www.pf.jcu.cz/~perex/ultra/ lists a
number of ftp sites.  The home site is
ftp://romeo.pf.jcu.cz/pub/perex/ultra/.  In the directory final you
find the final, working, versions of the driver.  At this time
(6/9/97) the latest is 2.71b.  Fetch the driver version you want.

* Problems?

If, you like me, get problems getting any sound out of the card at all
you must debug.  To help with this the distribution contains a FAQ
(the file is called FAQ ;-)

* Installing

I will assume directory and filenames are according to the 2.71b
version.  Unpack it (tar xvzf ultra-2.71b.tgz).  It unpacks into a new
directory, ultra-2.71b, cd there.

First you have to configure the package.  Simply type './configure'.
It will figure out what kind of CPU you have, and how many.  Please
note that a ultra driver compiled for SMP (multi-CPU) machines will
not work on single CPU machines, and vice versa.

To compile go 'make compile'.  It will print some CPU and architecture
info, install paths and ask you to press return.  If you're unhappy
with something it printed press ^C and edit the Makefile to match your
tastes.  Otherwise press return (enter).  If you change the paths, be
aware that some programs, like ultramidi expect the midi config files
to be in /usr/local/etc no matter where the top Makefile has them
placed.  At the next prompt (GUSCFG_MAJOR question) press return
again.  At the next prompt (GUSCFG_ALL) decide if you want a driver
that can handle all GUS cards or not.  One for all cards will be
slightly larger.  If you answer 'n' you now get to select what card(s)
to support, select the card(s) you want.  Press return on all the
prompts thereafter.  The driver should now compile.

If there are any compilation errors fix them, and report them to Perex
(email: perex@pf.jcu.cz).  You can ignore all/any warnings.

Once it compiles ok do 'make install'.  This will install the driver,
config files and the accompanying binaries in the directories shown
when the compilation started.

* Initializing PnP cards

If you have a PnP card you _might_ need to do some more work.  I had
to do what I describe in this section to get my card working.  Other
people has told me they didn't have to, and indeed, it's supposed to
work without doing this.  If after loading the driver and trying to
play sounds (see the next section; "Getting it working") there is no
sound and /dev/gusinfo is unreadable go back here.  If it works with
no special initialization; cool.

The PnP tools, and a sample configuration file is included in
src/driver/isapnptools-1.7.  cd there.  If you don't have isapnptools
already installed go 'make' to compile the software, and 'cp pnpdump
isapnp /sbin' to install it.  A word of WARNING: Running pnpdump can
cause your computer to lock up real hard, real fast.  The latest
version of isapnptools can be found at
ftp://ftp.demon.co.uk/pub/unix/linux/utils, it's currently at version
1.10.

The file gravis.conf is supplied as an example configuration file.
You can almost certainly use that, with some small modifications.  You
want to configure a card called GRV0001.  But the supplied file
initializes

  GRV0001/1

Which probably don't match your hardware.  Run 

  pnpdump >mygravis.conf

The file mygravis.conf will now contain information on all your
ISA-PnP cards.  Look in the file and find the CONFIGURE lines with the
GRV0001 numbers.  On my machine it's:

  GRV0001/7332

So in my case, I just substitute all instances of GRV0001/1 with
GRV0001/7332.  Put the new file at the end of /etc/isapnp.conf.  Run
'isapnp /etc/isapnp.conf'.  There won't be any error messages, trust
me >:-).  At this point the card is initialized to the listed
interrupts, DMAs and other things.

* Getting it working

First run /usr/local/bin/gusdevs.  This will make the special files in
/dev that the gus driver needs.  If the file
/usr/local/etc/gus-midi-gf1.defs isn't there copy it from
src/driver/daemon/gus-midi-gf1.defs in the distribution.

Now we'll see if the driver is working.  First connect headphones or
loudspeakers to your card.  Then run 'insgus', it loads the driver.
It should not print any messages, if it does something is wrong.  To
test the driver play some sound.  A very rough test is to copy your
kernel to the sound system.  Try this:

  cat /boot/vmlinuz >/dev/audio

(this assumes that /boot/vmlinuz is the name of your kernel).  This
should make some noise.  You can adjust the cards volume with the
gusmix or xgusmix program.  The Main/Master and PCM volumes needs to
be up.  If gusmix/xgusmix won't run the driver isn't working at all.
If it dosn't make any sound the driver is not working right.

Another diagnostic is to run 'cat /dev/gusinfo'.  If you get a 'no
such device' message things are _not_ working.  This 'file' should
also show the correct amount of memory on your board.

* Making it work permanently.

Once the driver is working we can modify boot scripts and config files
so that we don't have to think about it anymore.

There are two ways to load the driver, with modprobe/kerneld, or by
running the insgus program.  

To use the insgus program just put a insgus command in your boot
scripts.  On a RedHat system /etc/rc.d/rc.local is a good place.  If
you have some other system please e-mail me, telling me where to put
the command.  Make sure /usr/local/bin is in your path, or write the
command completely out: /usr/local/bin/insgus.

If you have a PnP card you need to run the isapnp command each time
the machine boots: 'isapnp /etc/isapnp.conf'.  Again: On a RedHat
system /etc/rc.d/rc.local is a good place.  Run it _before_ running
insgus though!!!

My favorite is using kerneld.  You need to edit your /etc/conf.modules
file.  In the apps-setup directory of the ultra distribution there is
a file called conf.modules:

----
#
# Configuration for GUS driver from The Ultra Sound Project...
#

path=/usr/local/etc
alias char-major-14 gus
install gus /usr/local/etc/insgus -Kn
remove gus /usr/local/etc/insgus -Kk
----

Insert it at the end of your /etc/conf.modules file (if you haven't
got one check if you have modules.conf instead, if not, just make
conf.modules).  There is a slight typo in the file (in version 2.71b,
shown above), the path to the insgus program is actually
/usr/local/bin/insgus, so fix that.  Once that is in place the driver
should auto load whenever a sound device is opened for use (when you
try to play a sound or run a mixer program) and after being unused a
while the module will be automatically removed.  More on all this in
the kerneld mini howto.

* Finished?

That's it.  Follow the links on Perex' Ultra page to find more
information about sound playing and such under Linux.

Oh, and, the ultramod and ultramidi programs seem to require that you
have RAM on your sound-card.  I don't have any RAM, so I use mikmod,
available on sunsite.unc.edu to play mod files.  I haven't gotten
around to midi yet.

