  Linux mit Soundblaster & WSS kompatiblen Soundkarten
  Frank Bhm (fraboehm@metronet.de)
  v0.1, 26. Januar 1998

  Beschreibt die Nutzung von kompatiblen Soundkarten und Mixern unter
  Linux.

  1.  Einleitung

  1.1.  Geschichte

  Der Text entstand von mir Ursprnglich als FAQ: Probleme mit Aztech
  SOUND GALAXY. Da ich hufiger e-mails bekommen habe, in denen ich ber
  die Einrichtung einer Aztech SOUND GALAXY gefragt wurde. Die Karte ist
  kompatibel zum Soundblaster Pro und zum Windows Sound System. Ich habe
  eine Mglichkeit gefunden, 16-Bit Sound und die Mixer zu benutzen. Im
  Laufe der Zeit hat sich dann gezeigt, da die meisten Aussagen
  allgemeingltig fr kompatible Karten und Mixer sind.

  1.2.  Copyright

  Dieses Dokument ist urheberrechtlich geschtzt. Das Copyright liegt
  bei Frank Bhm.

  Das Dokument darf gem der GNU General Public License verbreitet
  werden. Insbesondere bedeutet dieses, da der Text sowohl ber
  elektronische wie auch physikalische Medien ohne die Zahlung von
  Lizenzgebhren verbreitet werden darf, solange dieser Copyright
  Hinweis nicht entfernt wird. Eine kommerzielle Verbreitung ist erlaubt
  und ausdrcklich erwnscht. Bei einer Publikation in Papierform ist
  das Deutsche Linux HOWTO Projekt hierber zu zu informieren.

  1.3.  Allgemeine Infos zur Karte

  Die gute Nachricht zuerst, ich habe die gleiche Karte problemlos unter
  Linux (Kernel 2.0.30-32)ansprechen knnen.Bei Bedarf finde ich
  bestimmt auch die Werte fr einen alten 1.x.xx Kernel. Die schlechte,
  um alle Mixer-Funktionen nutzen zu knnen, habe ich den Kernel
  gepatcht.

  Auf der Karte befinden sich zwei Soundkarten. Sie ist kompatibel zur
  Soundblaster Pro (lolevel) und zum Windows Sound System und beide
  knnen ohne Tricks nur ausschlielich benutzt werden. Entweder SB-Pro
  oder WSS. Beide Karten benutzen den gleichen DMA, deshalb mu leider
  die Entscheidung zwischen einer Karte fr die Soundausgabe fallen, es
  kann deshalb sofort benutzt werden:

     SB-Pro:
        8-bit Aufnahme/Wiedergabe und der Mixer ohne Ba und Hhen aber
        mit Synth/PCM/Line In/Mic/CD/Master oder

     WSS:
        16-bit Aufnahme/Wiedergabe und der Mixer zeigt an PCM/Line
        1/Line 2/Mic/Rec/In gain, obwohl die meisten nicht zu
        funktionieren scheinen.

  Es knnten zwei Module kompiliert werden, die abwechselnd geladen
  werden.  Die Entscheidung zwischen fast allen Mixerfunktionen bei der
  SB Version und 8-Bit oder keinem Mixer und 16-Bit Wiedergabe z.B. fr
  MPG3 fllen zu mssen, hat mich aber nicht zufriedengestellt. Mit ein
  wenig Hardwarekenntnissen ist es zum Glck mglich, beide Kartenteile
  mit Einschrnkungen gleichzeitig zu nutzen.

  2.  Installation

  2.1.  Einstellungen fr den Kernel

  Mein Ziel war ein Modul mit mglichst vielen Funktionen: Welche Werte
  mssen eingestellt werden?

  Die Werte knnen unter DOS mit dem Befehl SET in der Zeile

       GALAXY=A220 I5 D1 K10 P530 T6

  oder

       BLASTER=A220 I5 D1 T6

  entnommen werden:

     A220
        Port Soundblaster

     I5 IRQ SB-Pro

     D1 DMA fr SB-Pro und WSS

     K10
        IRQ WSS

     P530
        Port WSS

     T6 Gibt nur den Typ der SB-Karte an, fr uns ohne Belang

  Sie knnen mit einem DOS-Setup Programm oder per Jumper eingestellt
  werden, ich ziehe letzteres vor. Unter Linux habe ich dann
  eingestellt:

       cd /usr/src/linux
       make menuconfig

       <M> Sound card support
       [*] Sound Blaster (SB, SBPro, SB16, clones) support
       [*] Generic OPL2/OPL3 FM synthesizer support
       [*] Microsoft Sound System support
       [*] /dev/dsp and /dev/audio support
       [*] MIDI interface support
       [*] FM synthesizer (YM3812/OPL-3) support
       (220) I/O base for SB Check from manual of the card
       (5) Sound Blaster IRQ Check from manual of the card
       (0) Sound Blaster DMA 0, 1 or 3
       (0) Sound Blaster 16 bit DMA (_REQUIRED_for SB16, Jazz16, SMW)
       (0) MPU401 I/O base of SB16, Jazz16 and ES1688 Check from manual of
       (-1) SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Use -1 with SB16
       (530) MSS/WSS I/O base 530, 604, E80 or F40
       (10) MSS/WSS IRQ 7, 9, 10 or 11
       (1) MSS/WSS DMA 0, 1 or 3
       (65536) Audio DMA buffer size 4096, 16384, 32768 or 65536

       make dep; make clean; make zlilo; make modules; make modules_install;

  Hey, mit cat /dev/sndstat tauchen doch jetzt zwei scheinbar
  unabhngige Karten auf? Wo sind die Einschrnkungen?

  cat /dev/sndstat sieht bei mir so aus:
  Sound Driver:3.5.4-960630 (Sun Dec 28 08:34:41 MET 1997 root,
  Linux loki 2.0.32 #2 Sat Dec 13 05:51:24 MET 1997 i486 unknown)
  Kernel: Linux loki 2.0.32 #2 Sat Dec 13 05:51:24 MET 1997 i486
  Config options:

   Installed drivers:
  Type 10: MS Sound System
  Type 24: MS Sound System (AXP)
  Type 27: Compaq Deskpro XL
  Type 1: OPL-2/OPL-3 FM
  Type 2: Sound Blaster
  Type 7: SB MPU-40

   Card config:
  MS Sound System at 0x530 irq 10 drq 1
  Sound Blaster at 0x220 irq 5 drq 0,0
  (SB MPU-401 irq 1 drq 0)
  OPL-2/OPL-3 FM at 0x388 drq

   Audio devices:
  0: MSS audio codec (AD1848)
  1: Sound Blaster Pro (3.1)
  Synth devices:
  0: Yamaha OPL-

   Midi devices:
  0: Sound Blaste

   Timers:
  0: System cloc

   Mixers:
  0: MSS audio codec (AD1848)
  1: Sound Blaster

  Hier liegt ein Problem "Sound Blaster at 0x220 irq 5 drq 0,0", der
  8-Bit Sound funktioniert nicht. Der groe Vorteil liegt darin, da
  beide Mixer benutzt werden knnen.

  2.2.  Wie funktionieren die Mixer?

  Die meisten Karten, die eine Soundblaster und eine weitere Soundkarte
  emulieren, funktionieren hnlich.

  Mixer auf einer Soundkarte arbeiten unabhngig von der Sounderzeugung
  und knnen mit Portadressen, ohne IRQ und DMA zu bentigen,
  angesteuert werden.

  Theoretisch sind zwei unabhngige Mixer auf der Karte vorhanden. Jeder
  Mixer kann mehrere Eingnge verwalten. Es knnten wesentlich mehr
  Devices geregelt werden, als tatschlich Eingnge vorhanden sind,
  leider wird nur ein Teil genutzt.

  Praktisch sind die Mixer hintereinander geschaltet. Der Ausgang vom
  WSS-Mixer geht in einen Eingang vom SB-Mixer. Das erklrt das
  merkwrdige Verhalten, wenn man einen Mixer aufruft und nur einen Teil
  der Funktionen regeln kann, bzw. warum Regler auftauchen die nix
  bewirken. :-)

  Unter Windows fllt nicht auf, da mit der Oberflche eines
  Mixerprogramms zwei unterschiedliche Devices geregelt werden. Unter
  DOS ist es leider blich, da eine "kompatible" Karte ein Dummy-
  Register hat. Ein Spiel schreibt hier z.B. die Lautstrke fr das CD-
  Rom rein, ein residenter Treiber, der beim Booten geladen wurde,
  schaut mit einer Zeitschleife nach ob, ein neuer Wert vorhanden ist,
  liest ihn aus und trgt ihn im benutzten Mixer ein. Kein Wunder, wenn
  es hufig zu Problemen kommt. :-(

  Die Aztech Sound Galaxy ist abwrtskompatibel zum Soundblaster. Die
  Funktionen fr die Bsse/Hhen werden mit dem Mixer vom SB geregelt.
  Sie knnen auch ohne WSS Einbindung genutzt werden.

  Bei der alten Soundconfig konnte man noch angeben, ob man eine NXPro
  hatte, beim neuen Soundtreiber leider nicht mehr, aber die alten Werte
  standen noch in der Datei sb_mixer.h. Ich habe nichts anderes getan,
  als die Galaxy-Werte bei den normalen Soundblaster Eintrgen zu
  ergnzen.

  Ab jetzt tauchen zwar im jedem Mixer die neuen Regler auf, sinnvoll
  genutzt werden knnen sie aber nur, wenn die Hardware dafr ausgelegt
  ist. Es wird keine Hardware beschdigt, wenn ein Test mit einer alten
  Karte durchgefhrt wird. Untersttzt die Karte keine Bsse/Hhen,
  passiert halt nix. ;-) Es funktioniert mit mehreren Soundblaster
  Karten und Kompatiblen.

  Ich habe ein kleines DOS-Mixer Progamm geschrieben, mit dem die Bits
  einer SB-Karte komfortabel gesetzt werden knnen, wenn ich sehen will,
  welche Funktionen implementiert sind. Bei Bedarf kann ich es in eine
  Binary-NG posten oder direkt zuschicken.

  Als letztes mein Patch 2.0.30/32:

  --- sb_mixer.h.orig     Sun Jun 30 10:43:39 1996
  +++ sb_mixer.h  Sun Nov 23 01:35:58 1997
  @@ -23,8 +23,9 @@
   /* Same as SB Pro, unless I find otherwise */
   #define SGNXPRO_RECORDING_DEVICES SBPRO_RECORDING_DEVICES

  -#define SBPRO_MIXER_DEVICES            (SOUND_MASK_SYNTH | SOUND_MASK_PCM | SOUND_MASK_LINE | SOUND_MASK_MIC | \
  -                                        SOUND_MASK_CD | SOUND_MASK_VOLUME)
  +#define SBPRO_MIXER_DEVICES            (SOUND_MASK_SYNTH | SOUND_MASK_PCM    | SOUND_MASK_LINE | \
  +                                         SOUND_MASK_MIC   | SOUND_MASK_CD     | SOUND_MASK_VOLUME | \
  +                                         SOUND_MASK_BASS  | SOUND_MASK_TREBLE | SOUND_MASK_SPEAKER )

   /* SG NX Pro has treble and bass settings on the mixer. The 'speaker'
    * channel is the COVOX/DisneySoundSource emulation volume control
  @@ -99,17 +100,19 @@
   #ifdef __SB_MIXER_C__
   mixer_tab sbpro_mix = {
   MIX_ENT(SOUND_MIXER_VOLUME,    0x22, 7, 4, 0x22, 3, 4),
  -MIX_ENT(SOUND_MIXER_BASS,      0x00, 0, 0, 0x00, 0, 0),
  -MIX_ENT(SOUND_MIXER_TREBLE,    0x00, 0, 0, 0x00, 0, 0),
  +MIX_ENT(SOUND_MIXER_BASS,      0x46, 2, 3, 0x00, 0, 0),
  +MIX_ENT(SOUND_MIXER_TREBLE,    0x44, 2, 3, 0x00, 0, 0),
   MIX_ENT(SOUND_MIXER_SYNTH,     0x26, 7, 4, 0x26, 3, 4),
   MIX_ENT(SOUND_MIXER_PCM,       0x04, 7, 4, 0x04, 3, 4),
  -MIX_ENT(SOUND_MIXER_SPEAKER,   0x00, 0, 0, 0x00, 0, 0),
  +MIX_ENT(SOUND_MIXER_SPEAKER,   0x42, 2, 3, 0x00, 0, 0),
   MIX_ENT(SOUND_MIXER_LINE,      0x2e, 7, 4, 0x2e, 3, 4),
   MIX_ENT(SOUND_MIXER_MIC,       0x0a, 2, 3, 0x00, 0, 0),
   MIX_ENT(SOUND_MIXER_CD,                0x28, 7, 4, 0x28, 3, 4),
   MIX_ENT(SOUND_MIXER_IMIX,      0x00, 0, 0, 0x00, 0, 0),
   MIX_ENT(SOUND_MIXER_ALTPCM,    0x00, 0, 0, 0x00, 0, 0),
  -MIX_ENT(SOUND_MIXER_RECLEV,    0x00, 0, 0, 0x00, 0, 0)
  +MIX_ENT(SOUND_MIXER_RECLEV,    0x00, 0, 0, 0x00, 0, 0),
  +MIX_ENT(SOUND_MIXER_IGAIN,     0x00, 0, 0, 0x00, 0, 0),
  +MIX_ENT(SOUND_MIXER_OGAIN,     0x00, 0, 0, 0x00, 0, 0)
   };
   mixer_tab es688_mix = {
   MIX_ENT(SOUND_MIXER_VOLUME,    0x32, 7, 4, 0x32, 3, 4),

  2.3.  FAQ

  2.3.1.  Details zur Hardware

    Bei mir steht da was von "CS4231" (oder so hnlich)?

     Die folgenden Chips sind aufwrtskompatibel zum AD1848: CS4248
     CS4231 CS4231A und AD1845 CS4232 CS4231A (und SB, MPU) ** Plug n
     Pain ** CS4232A

     Es sollte also funktionieren.  Da kannst vermutlich den WSS Teil
     fr 16-Bit Sounderzeugung benutzen und den SB-Teil als Hauptmixer.

    Welche Interrupts knnen fr eine WSS Karte benutzt werden, geht
     z.B.: IRQ 3,4?

  Schau dir doch mit

       less /var/log/boot.msg

  die Bootmeldungen an.

  Normalerweise hat jeder neue PC mindestens zwei serielle
  Schnittstellen, die die IRQ 3,4 benutzten. Meistens ist an der ersten
  eine Maus angeschlossen und an der zweiten hngt ein Modem, aber
  selbst, wenn Du noch eine freie serielle Schnittstelle hast, wrde ich
  davon abraten, sie zu verschwenden. Findest Du mit

       less /proc/interrupts

  keine freien Interrupts?

       # Serial driver version 4.13 with no serial options enabled
       # tty00 at 0x03f8 (irq = 4) is a 16550A
       # tty01 at 0x02f8 (irq = 3) is a 16550A

  Die Hardware der meisten WSS kompatiblen Karten lt es nicht zu,
  andere Interrupts als die vorgegebenen (7,9,10,11) zu benutzen.

  2.3.2.  Checkliste

  Meine Checkliste fr den Einbau: leider gibt es mehr falsche als
  richtigen Einstellungen. Am Ende habe ich eine komplette Liste meiner
  Hardware. Vielleicht hilft es.

     Hardware
        (Jumper haben meistens aber nicht immer vorrang) Hauptplatine:
        z.B. feste Vergabe von IRQ 5/7 und DMA 1/3 fr erweiterte
        Druckerschnittstelle ECP/EPP ber Jumper?  andere
        Erweiterungskarten: Netzwerkkarten benutzen z.B.  IRQ5 werden
        die Jumper auf der Soundkarte benutzt oder PNP? (beides ist
        mglich!!)

     Software:
        BIOS: Welche Resourcen werden intern belegt. (HDD-Controler,
        Grafik, PS/2 Maus...)  BIOS: mssen Resourcen als frei/belegt
        angegeben werden?  BIOS: Einstellungen COM/LPT Einstellungen
        anderer Karten Soundkarte EEPROM, Einstellungen mit
        mitgelieferter Software berprfen. Achtung: nderungen werden
        erst nach einem Hardwarereset wirksam Bei manchen Mainboards mu
        sogar der Rechner ausgeschaltet werden, bevor nderungen wirken.
        Stimmen unter DOS die Werte im SET BLASTER berein?

     Test:
        Ab hier sollte mein Programm den SB-Mixer ndern knnen. Lest
        bitte auch die README.TXT im Paket. Doppelbelegungen werden von
        der Windows Systemsteuerung meistens nicht erkannt,
        normalerweise sind sie fr Fehler verantwortlich. Ich versuche
        einen neuen Rechner immer mit mehreren verschiedenen
        Testprogrammen wie Syschk, Config u. DrHardware zu testen, da
        ich kein Programm kenne, das alles erkennen kann.

