[BRK-1995]
Version:                          1.0


       
        Dokumentation zur Programmierung der Soundblasterkarten 
       

                     
                      By Braker of DC-Berlin 
                     


 ͸
  Inhalt 
 

 1     .........................................................   Einleitung
 1.0   ............................................................   Vorwort
 1.1   ..................................   Wozu bauche Ich dieses Tutorial ?
 1.2   .........................................   Fr wen ist das Tutorial ?
 1.3   .............................................   Denkbar ungeeignet fr

 2     ........................................................   Erluterung
 2.0   ................................................   Modi der Soundkarte
 2.1   ..............................................   Die Hardware-Adressen

 3     .........................................................   FM - Musik

 4     ...........................................................   Sampling
 4.01  ............................................   Resetten der Soundkarte
 4.02  .............................................   Werte zum DSP schicken
 4.03  ................................................   Werte vom DSP lesen
 4.04  ........................................................   DSP-Befehle
 4.05  ........................................   Der ADPCM - Packalgorithmus
 4.06  ..........................   Der Datenblock im Mono und im Stereomodus

 5     ...............................................   Der DMA - Kontroller

 6     ......................................................   Der Mixerchip
 6.1   ............................................   Resetten des Mixerchips
 6.2   ..........................   Werte und Befehle an den Mixerchip senden
 6.3   ..........................................   Werte vom Mixerchip lesen
 6.4   ............................   Mixerchip Kommandos fr SB Pro und SB16
 6.5   ...................................   Mixerchip Kommandos for die SB16




 ͸
  1    -  Einleitung 
 

  1.0  -  Vorwort
 
   Bis heute,habe Ich leider noch kein vollstndiges Tutorial ber die Program-
 mierung der Soundblasterkarten gesehen. Dies ist sehr Schade, aber es hilft
 ja nichts. Da Ich mich nun zur Zeit mit der Soundblaster-Programmierung herum-
 schlage, dachte Ich, da Ich gleich ein Tutorial nebenbei schreibe. Ist wohl
 das beste, schlielich hat dann ja jeder was davon. Nun kommen wir zu einigen
 Pseudo-Standard-Fragen, die das Tutorial betreffen. Und strt euch bitte nicht
 so sehr an meiner Rechtschreibung. Das liegt auch ein wenig an der Tastatur.
 Ich bernehme jedoch keine Verantwortung, fr eventuelle Schden, die Direkt
 oder indirekt durch die Benutzung dieses Tutorials herrhren. Dennoch wnsche
 Ich euch Viel Spass damit.

  1.1  -  Wozu brauche Ich dieses Tutorial ?
 
   Es gibt verschiedene Mglichkeiten, dieses Tutorial zu nutzen. Man kann es
 Beispielsweise dazu benutzen, die Platte vollzubekommen. Man kann sich im
 lschen von Dateien ben und kann das bis zur Perfektion ausbauen. Man kann
 sich auch drber totlachen, was Ich doch fr ein Idiot bin, weil Ich es
 nicht so mache, wie es jemand anderes tun wrde. Man kann es auch zum Zeit-
 vertreib ins Englische, Franzsische, Spanische, Schwedische, ... bersetzen.
 Oder ganz einfach, Du liest es und lernst vielleicht mal was neues, nimmst ein
 paar Ideen mit. Vielleicht Ist dies Tutorial, genau da, wonach Du schon eine
 ganze Weile gesucht hast. Du kannst Dich ja auch von Mir ZULABERN lassen...

  1.2  -  Fr Wen ist das Tutorial ?
 
   Fr alle diejenigen,die wissen wollen, wie man diese Karte dazu bringt,genau
 das zu tun, was man von ihr mchte. Wie man zum Beispiel, Adlib-Instrumente
 realisiert, Stereo und Dolby-Surround Effekte hinbekommt. Gleichermaen wird
 hier die DSP(Digitaler Sound Prozessor)-Programmierung behandelt. Und nebenbei
 widmen wir uns der DMA-Programmierung. Dann werden wir noch einige wenige
 Einzelheiten besprechen, zB. wie man das mit der Interruptsteuerung in den
 Griff bekommt.Wie wir den Port, den DMA-Kanal und die IRQ-Adresse der Sound-
 karte entlocken knnen. Und noch einiges mehr.

  1.3  -  Denkbar ungeeignet fr :
 
  Muttis, mit 3 Jahre-alten Kindern, die dieses Tutorial als Gute-Nacht-
   Geschichte vorlesen wollen.
  Leute, die vom PC keinen blassen Schimmer haben.
  Und andere Verrkte Menschen...




 ͸
  2    -  Erluterung 
 

  2.0  -  Modi der Soundkarte
 
   Bei der Soundblasterkarte gibt es zwei Mglichkeiten der Musikerzeugung, zum
 einen wre es die synthetische Musik und zum anderen wre es die gesampelte
 Musik. Der Unterschied ist im Grunde genommen ganz einfach, bei der Synth-
 etischen Musik handelt es sich um einen Ton und bei der Gesampelten Musik
 handelt es sich schlichtweg um ein Gerusch. Ein Ton ergibt sich aus einer
 berlagerung von mehreren Wellen. Wohingegen ein Gerusch aus vielen kleinen
 Amplituden besteht. Der Vorteil bei der synth. Musik liegt klar auf der Hand,
 Man braucht fr ein Instrument nur sehr wenige Daten zu Speichern, diese
 beschrnken sich nmlich nur auf die Wellenform und noch einige andere kleine
 Parameter aber die Musik ist ein wenig zu knstlich. Und genau das ist der
 Nachteil und der Vorteil der Gesampelten Musik. Man braucht sehr viele Daten,
 um ein Instrument zu Speichern, aber das Gerusch klingt 'echt'.

  2.1  -  Die Hardware-Adressen
 
   Als nchstes mchte Ich Euch mit den Basis-Adressen, bzw. den Ports der
 Soundblasterkarte bekannt machen. Fr alle, die es jetzt noch nicht wissen,
 Base ist eine der folgenden Zahlen 210h,220h,230h,240h,250h,260h,270h,280h;
 Ich hoffe doch, Du weit hoffentlich, was Hexadezimale Zahlen bedeuten, wenn
 nicht, dann schnapp Dir doch Bitte eins der einhunderttausend Bcher, in
 denen genau das drinsteht. Ich werde es hier nicht erlutern.
 In der Tabelle #001 sind die Hardware-Adressen und deren Kurzbeschreibung
 zu sehen, sowie eine Liste, wo diese Hardware Adressen untersttzt werden.
 Nimm die Tabelle erst einmal so hin, den Rest werde Ich zur gegebenen Zeit
 erlutern. Ich gebe Dir mein Wort, Ich werde es so gut es nur irgend geht
 erlutern.

 Ŀ
  Ports:                                                              (#001) 
 Ĵ
  Base + 00h	linkes FM-Register, Auswahl+Status	r/w	Pro/16        
  Base + 01h	linkes FM-Register, Daten		w	Pro/16        
  Base + 02h	rechtes FM-Regsietr, Auswahl+Status	r/w	Pro/16        
  Base + 03h	rechtes FM-Register, Daten		w	Pro/16        
  Base + 04h	Mixer-Chip, Indexregister		w	Pro/16        
  Base + 05h	Mixer-Chip, Datenregister		r/w	Pro/16        
  Base + 06h	DSP-Reset				w	Jr/Pro/16     
  Base + 08h	beide FM-Register, Auswahl+Status	r/w	Jr/Pro/16     
  Base + 09h	beide FM-Register, Daten		w	Jr/Pro/16     
  Base + 0Ah	DSP-Daten (Read-Data)			r	Jr/Pro/16     
  Base + 0Ch	DSP-Daten, Befehle, Pufferstatus	r/w	Jr/Pro/16     
  Base + 0Dh	DSP-Timer-Interrupt Clear Port		r	16            
  Base + 0Eh	DSP-Status vorhandener Daten		r	Jr/Pro/16     
  Base + 0Fh	16-Bit Voice-Interrupt Clear Port	r	16            
  Base + 10h	CD-ROM Daten				r	ASP-CD        
  Base + 11h	CD-ROM Command				w	ASP-CD        
  Base + 12h	CD-ROM Reset				w	ASP-CD        
  Base + 13h	CD-ROM Einschalten			w	ASP-CD        
     338h	FM-Register Status Port			r	ALL           
     339h	FM-Auswhl-Register			w	ALL           
     38Bh	Advanced FM-Register Auswahl		w	ALL           
     38Bh	Advanced FM-Register Daten-Port		w	ALL           
 




 ͸
  3    -  FM - Musik 
 




 ͸
 4    -  Sampling 
 

  4.01 -  Resetten der Soundkarte
 
   Diese Sache sollte einmal erfolgen, wenn man den Soundblaster benutzen
 mchte, aber Ich sehe keinen Grund es machen zu mssen. Ich lege es Dir ans
 Herz, da man auf diese Weise erfahren kann, ob die Person eine Soundblaster-
 karte hat oder nicht. Ich finde es nmlich total primitiv den User zu fragen,
 ob er einen Soundblaster hat oder nicht, nur um sich ein wenig Arbeit zu er-
 sparen. Um den Port einer Karte in Erfahrung zu bringen, solltest Du nichts
 weiter machen, als alle Mglichkeiten durchzugehen (2.1), bis der Test
 erfolgreich ist. Denn dann hast Du den richtigen Port gefunden. Wenn aber die
 Routine bei keiner der Mglichkeiten anspringt, so liegt ein Fehler vor.
 Entweder hat der User keine Soundblasterkarte, oder sie ist nicht im Rechner,
 oder sie ist im ungnstigsten Falle kaputt.

 Ŀ
  Resetten :                                                                 
 Ĵ
  1: Schreibe an den Port 2*6h das Byte 01h                                  
  2: Warte nun ca. 3 s                                                      
  3: Schreibe nun an den selben Port das Byte 00h                            
  4: Warte bis die Soundkarte an Port 2*Eh Bit 7 setzt                       
  5: Wenn es erfolgreich war, dann hole dir aus Port 2*Ah ein Byte und ver-  
     gleiche es mit 0AAh, wenn es drin steht, war der Test erfolgreich.      
 

  4.02 -  Werte zum DSP schicken
 
   Dies hier ist die fast lebenswichtigste Prozedur, um den Soundblaster genau
 das tun zu lassen, was man will.In einer der nchsten Tabellen werden wir eine
 bersicht ber alle Komandos und Befehle haben, die der Soundblaster unter-
 sttzt. Mit dieser Prozedur werden auch die Datenbytes an den DSP gesendet.

 Ŀ
  Kommando an den DSP schicken:                                              
 Ĵ
  1: Warte bis Bit 7 an Port 2*Ch gleich 0                                   
  2: Knalle das Kommando nun an den Port 2*Ch                                
 

  4.03 -  Werte vom DSP lesen
 
   Diese Routine wird erst dann so richtig wichtig, wenn es gilt Gerusche zu
 digitalisieren. Eine weitere sinnlose Anwendung ist, den Geruschpegel, der
 beim Mikrofon ankommt graphisch darzustellen. Diese Routine ist auch bei der
 Versionsabfrage vom Soundblaster sehr wichtig.

 Ŀ
  Wert vom DSP lesen:                                                        
 Ĵ
  1: Warte bis Bit 7 an Port 2*Eh gleich 1                                   
  2: Lies nun den Wert vom Port 2*Ah.                                        
 

  4.04 -  DSP-Befehle
 
   Hier kommt die lang ersehnte Liste mit den einzelnen DSP-Befehlen. Ich werde
 aber jeden einzelnen noch nher erlutern. Doch eines werde Ich mir in diesem
 Tutorial komplett verkneifen. Es betrifft die MIDI-Programmierung. Hier werde
 Ich keines Falls ansetzen. Ich habe nmlich keine Lust, aus diesem Tutorial
 einen Roman zu machen.

 Ŀ
  DSP-Befehle:                                                               
 Ĵ
  10h	direkte-Ausgabe 8-Bit                                                 
  14h	DMA-Ausgabe 8-Bit                                                     
  16h	Ausgabe von 2-Bit komprimierten Samples ber DMA                      
  17h	Ausgabe von 2-Bit komprimierten Samples mit Referenzbyte ber DMA     
  20h	direkte Aufnahme                                                      
  24h	Aufnahme ber DMA                                                     
  30h	direkte Midi-Eingabe                                                  
  31h	Midi-Eingabe ber Interrupt                                           
  32h	direkte Midi-eingabe mit Timestamp                                    
  33h	Midi-Eingabe ber Interrupt mit Timestamp                             
  34h	Midi-UART-Modus direkt                                                
  35h	Midi-UART-Modus ber Interrupt                                        
  37h	Midi-UART ber Interrupt mit Timestamp                                
  38h	Midi-Code senden                                                      
  40h	Setzen der Sample-Rate                                                
  45h	DMA-Multiblock-Continue (SB16)                                        
  48h	Blockgre einstellen (Pro+)                                          
  74h	Ausgabe von 4-Bit komprimierten Samples ber DMA                      
  75h	Ausgabe von 4-Bit komprimierten Samples ber DMA und Referenz Byte    
  76h	Ausgabe von 2.6-Bit komprimierten Daten ber DMA                      
  77h	Ausgabe von 2.6-Bit komprimierten Daten ber DMA und Referenz Byte    
  80h	Stilleblock definieren                                                
  91h	8-Bit Ausgabe ber DMA in High Speed (Pro+)                           
  99h	8-Bit Aufnahme ber DMA in High Speed (Pro+)                          
  B6h	16-Bit Daten auf SB16 ber DMA ausgeben (SB16)                        
  B9h	16-Bit Daten auf SB16 ber DMA aufnehmen (SB16)                       
  C6h	8-Bit Daten auf SB16 ber DMA ausgeben (SB16)                         
  C9h	8-Bit Daten auf SB16 ber DMA aufnehmen (SB16)                        
  D0h	DMA anhalten                                                          
  D1h	Lautsprecher einschalten                                              
  D3h	Lautsprecher ausschalten                                              
  D4h	DMA-fortsetzen                                                        
  D8h	Lautsprechereinstellung abfragen (Pro+)                               
  E1h	Versionsabfrage                                                       
 

   10h - direkte Ausgabe 8-Bit
 
   Um eine gute Ausgabe zu erreichen must Du Schritt 1. und 2. stndig und
 periodisch ausfhren.
 1. Senden des Befehls 10h
 2. Senden des Daten-Bytes

   14h - DMA-Ausgabe 8-Bit
 
   Die Ausgabe ist nicht ganz so einfach, wie es scheint. Zuvor mu erst mal
 der DMA-Kontroller korrekt programmiert werden. Aber damit wollen wir uns in
 einem anderen Kapitel beschftigen. Wenn Du den DMA-Kontroller programmiert,
 die Sample-Rate gesetzt und den SB-Hardware-Interrupt auf eine Routine umge-
 bogen hast. Kann es endlich losgehen.
 1. Senden des Befehls 14h
 2. Senden des Lowbytes der Lnge vom Sample-1
 3. Senden des Highbytes der Lnge vom Sample-1

   16h - Ausgabe von 2-Bit-komprimierten Samples ber DMA
 
   Luft analog zu 14h. Die Daten sin nach dem sog. ADPCM-Algorithmus gepackt,
 und diese gepackten Daten mssen nicht zu 'Fu' entpackt werden, weil diese
 Funktion der Soundkarte das Automatisch erledigt. Siehe 17h

   17h - Ausgabe von 2-Bit-komprimierten Samples ber DMA mit Referenzbyte
 
   Luft fast so wie 16h, nur da ein sog. Referenzbyte am Anfang steht. Das
 heit im Klartext, da das erste Byte als Originalbyte aufgefasst wird und
 der Rest wie bei 16h funktioniert. Ist auch nach ADPCM gepackt. Zuerst sollte
 der erste Block der Daten mit Funktion 17h ausgegeben werden und jeder weitere
 Block kann mit Funktion 16h ausgegeben werden.

   20h - Direkte 8-Bit Aufnahme
 
   Dieses Kommando, wird genau dann benutzt, wenn man eine direkte 8-Bit auf-
 nahme wnscht. Eigentlich sehe Ich keinen Grund es nicht ber DMA zu er-
 ledigen, auer wenn man bestimmte Sliding Effekte hinbekommen mchte, an-
 sonsten wrde Ich persnlich DMA bevorzugen.
 1. Senden des Befehls 20h
 2. Lesen des Wertes

   24h - Aufnahme ber DMA
 
   Diese Art der Aufnahme ist nicht so unkompliziert, wie Ich es gleich dar-
 stellen werde. Zuerst wird ein IRQ handler auf den SB-Interrupt gelegt, dann
 wird die Samplerate gesetzt. Und jetzt wird der DMA-Kontroller programmiert.
 Nun wird die Datenlnge bergeben, zuerst das Lowbyte und danach das Highbyte.
 1. Senden des Kommandos 24h
 2. Senden des Lowbytes der Samplelnge-1
 3. Senden des Highbytes der Samplelnge-1

   40h - Setzen der Samplerate
 
   Der hier zu bergebende Wert gibt die Samplerate an. Er besteht aus nur
 einem Byte und dieses mu folgendermaen Berechnet werden.
  Normal Speed Modus
 TIME_CONST = 256 - (1.000.000 / Samplefrequenz)
 . High Speed Modus
 TIME_CONST = 65535 - (256.000.000 / Samplefrequenz)
 Damit kann minimal eine Frequenz von ca. 4 kHz erreicht werden. Fr ungepackte
 Daten betrgt die maximale Samplefrequenz ca. 23 kHz. Bei der Soundblaster Pro
 und den folgenden, betrgt die maximale Sample und Abspielfrequenz 44.1 kHz.
 Im Normalen Modus mu das errechnete Byte geschrieben werden, und im Highspeed
 Modus mu das Hherwertige Byte bergeben werden. Und das Niederwertige Byte
 fllt unter den Tisch.
 1. Senden des Kommandos 40h
 2. Senden des TIME_CONST Bytes

   45h - DMA Multiblock Continue (SB16)
 
   Ersetzt die erneute Programmierung der Befehle B6h,B9h,C6h,C9h. Das heit,
 da Du nicht die ganzen Daten erneut an den Soundblaster bergeben mut. Es
 wird ein Block der selben Gre wie der eben zuvor bertragene Block ber-
 tragen. Aber Ich glaube, da Du den DMA-Chip noch mal Programmieren mut.

   48h - Blockgre einstellen
 
   ber diesen Befehl stellst Du die Blockgre im High-Speed-Modus ein.
 1. Senden des Kommandos 48h
 2. Senden des Lowbytes von Blockgre-1
 3. Senden des Highbytes von Blockgre-1

   74h - Ausgabe von 4-Bit komprimierten Samples ber DMA
 
   Dieser Befehl arbeitet wie 16h. Die Daten sind wiederrum mit dem ADPCM-
 Algorithmus gepackt. Siehe auch unter ADPCM-Algorithmus.

   75h - Ausgabe von 4-Bit komp. Samples ber DMA mit Referenzbyte
 
   Siehe Ausfhrungen zum Befehl 17h. Siehe zustzlich ADPCM-Algorithmus.

   76h - Ausgabe von 2.6-Bit komp. Samples ber DMA
 
   Analog zum Befehl 74h.

   77h - Ausgabe von 2.6-Bit komp. Samples ber DMA mit Referenzbyte
 
   Analog zum Befehl 77h.

   80h - Stilleblock definieren
 
   Um diese Funktion korrekt abzuarbeiten, mut Du den SB-Interrupt auf eine
 eigene Routine umlenken, um zu erfahren, wann der Stilleblock zu ende ist.
 Denn wenn der Stille-Block ausgegeben wurde, wird der SB-Interrupt generiert.
 1. Setze die entsprechende Samplerate
 2. Senden des Befehls 80h
 3. Sende das Lowbyte der Blockgre-1
 4. Sende das Highbyte der Blockgre-1

   91h - 8-Bit High-Speed-Ausgabe im DMA-Modus
 
   Das hier ist fast so wie bei der normalen Ausgabe von Daten. Noch ein Wort
 zum HIGH-SPEED-Modus. Hier knnen Sampleraten von 44 kHz erreicht werden.
 1. Verbiegen des SB-Interrupts
 2. DMA-Kontroller programmieren
 3. Samplerate setzen
 4. Blockgre mit Befehl 48h einstellen
 5. Senden des Befehls 91h

   99h - 8-Bit High-Speed-Aufnahme im DMA-Modus
 
   hnlich dem Befehl 91h,nur da der DMA-Kontroller anders programmiert werden
 mu. Und statt des Befehls 91h mu der Befehl 99h gesendet werden. Ansonsten
 ist der Rest gleich.

   B6h - 16-Bit Datenausgabe im DMA-Modus (SB16)
 
   Dieser Befehl unterscheidet sich gravierend von dem Rest der Soundblaster-
 karten, insbesondere der SB-Pro. Denn bei einer SB16 wird hier festgelegt,
 ob das Sample Stereo abgespielt wird oder nicht. Und es wird nicht wie blich
 ber den Mixer-Chip der Soundblaster voreingestellt. Deshalb funktionieren
 Stereoausgaben, die fr die Soundblaster Pro programmiert wurden, nicht auf
 einer SB16!
 1. Verbiegen des SB-Interrupts
 2. DMA-Kontroller Programmieren
 3. Sende den Befehl B6h
 4. Sende nun eine 00h fr MONO- oder eine 20h fr STEREO-Daten.
 5. Lowbyte der Blockgre-1
 6. Highbyte der Blockgre-1

   B9h - 16-Bit Datenaufnahme im DMA-Modus (SB16)
 
   Die Ausfhrung entspricht genau der die auch Beim Befehl B6h benutzt wurde.

   C6h - 8-Bit Datenausgabe im DMA-Modus (SB16)
 
   Entspricht genau dem Befehl B6h,nur da hier 8-Bit Daten ausgeben werden.

   C9h - 8-Bit Datenaufnahme im DMA-Modus (SB16)
 
   Entspricht genau dem Befehl B9h,nur da hier 8-Bit Daten aufgenommen werden.

   D0h - DMA-Ausgabe anhalten
 
   Hiermit kann die DMA-bertragung sofort gestoppt werden, kann aber jedoch
 mit dem Kommando D4h wieder fortgefhrt werden.

   D1h - Lautsprecher einschalten
 
   Um berhaupt was aus dem Ausgang des Soundblasters ein Gerusch zu erhalten,
 mu man erst den Lautsprecher einschalten. Und dies erreicht man damit, da
 man den Befehl D1h ausgibt.

   D3h - Lautsprecher ausschalten
 
   Und hiermit kann der Lautsprecher wieder ausgeschaltet werden.

   D4h - DMA-Ausgabe fortfhren
 
   Wenn die DMA-Ausgabe mit D0h gestoppt wurde, so kann, man die Ausgabe wieder
 fortfhren. Sofern man diese Funktion benutzt.

   D8h - Lautsprechereinstellung abfragen
 
   Ab der Soundblaster Pro wurde dieser Befehl zur Verfgung gestellt. ber
 diesen Befehl kannst Du in Erfahrung bringen,ob der Lautsprecher eingeschaltet
 oder etwa ausgeschaltet ist.
 1. Senden des Kommandos D8h
 2. Lese ein Byte vom DSP
 Wenn dieses gelesene Byte ein 0FFh ist, ist der Lautsprecher an. Wenn es aber
 eine 01h beinhaltet, ist der Lautsprecher aus.

   E1h - Versionsabfrage
 
   Der Name des Befehls deutet es ja schon an. Damit kann man die Version der
 Soundblasterkarte ermitteln.
 1. Senden des Kommandos E1h
 2. Lies nun die Hauptversionsnummer vom DSP
 3. Lies jetzt die Unterversionsnummer vom DSP

  4.05 - Der ADPCM - Packalgorithmus
 
   Der Packalgorithmus, ist sehr viel einfacher, als LZW, HUFFMAN, RLE usw. der
 uns hier vorliegende Algorithmus ist eine Entwicklung von Creative. Und er
 funktioniert genau so. Wenn man Daten Sampelt, entsteht ein Strom von vielen
 kleinen Amplituden. Und das ganze verbraucht Hllisch viel Speicherplatz. Da
 die meisten Amplituden nicht alzuweit auseinanderliegen, Speichert man die
 Differrenzen zwischen den Bytes. in 4-Bits (-8 - +7) in 2 Bits (-2 - +1) und
 in 2.6 Bits (hier werden 8 Bytes in 3 Bytes zusammengefasst.). Der Erste Wert
 mu immer ein Originalwert sein. Und der Rest der daten bezieht sich immer auf
 den unmittelbaren Wert davor, der sich wiederrum aus dem vorherigen Byte be-
 rechnet.

  4.06 - Der Datenblock im Mono und im Stereomodus
 
   Wir reden hier stndig vom Mono und vom Stereomodus, aber wir haben keine
 Ahnung, wie wir nun auf zwei verschiedene Kanle (links und rechts) ver-
 schiedene Daten rauskriegen. Nun Ich habe mir ehrlich eine ganze Zeit lang
 meine Birne darber zerbrochen. Nun meine berlegung, die sich besttigt hat.
 Also wie will man Daten mit einem DMA-Kanal, da heit mit einem einzigen
 Puffer zugleich auf zwei verschiedene Kanle bertragen ??? Die Lsung ist
 ganz einfach und Ich habe sie gerade ebend genannt, beide Kanle werden in
 einem Puffer untergebracht. Doch wie wei der Soundblaster, was er wo spielen
 mu ??? Also der Soundblaster macht es sich ganz besonders einfach. Er schickt
 alle Bytes abwechselnd auf die Kanle. Das erste Byte wird auf den Linken
 Kanal und das darauf folgende Byte auf dem Rechten Kanal ausgegeben. Zumindest
 ist es im 8-Bit Modus so. Im 16-Bit Modus handelt es sich also um Wortwerte.

  00    01    02    03    04    05    06    07    08	        Linker Kanal
    Ŀ
 0001020304050607080910111213141516    end
 ...
     00    01    02    03    04    05    06    07       last    Rechter Kanal



 ͸
  5     -  Der DMA - Kontroller 
 




 ͸
  6    -  Der Mixerchip 
 

  6.1  - Resetten des Mixerchips
 
   Ich habe vielfach gesehen, da Soundutilities den Mixerchip resetten, obwohl
 ich persnlich finde, da es Schwachsinn ist. Denn dabei gibt es eine lstige
 Begleiterscheinung. Der User hat mit Mhe und Not eine Optimale Konfiguration
 gefunden die bei vielen Spielen gut klingt und jetzt resettet irgend so ein
 Spinner den Mixerchip und versaut diese Konfiguration. Denn der Mixerchip
 setzt die vom Hersteller eingebrannten Werte und der User steht blde da.
 Darum empfehle Ich es nicht zu tun. Ich habe es aber dennoch erwhnt(weil es
 alle machen). Also erspart dem User bitte die lstige 'Neukonfiguration', er
 wirds euch danken.

 Ŀ
  Mixerchip resetten:                                                        
 Ĵ
  1: In das Indexregister wird der Wert Null geschrieben, Port 02*4h.        
  2: Jetzt mu man knapp 100 ms warten.                                      
  3: Nun schreibe man den Wert Null in das Datenregister. Port 02*5h.        
 

  6.2  - Werte und Befehle an den Mixerchip senden
 
   Da Ich bis heute keine Angaben drber gefunden habe, da man eine bestimmte
 Zeit warten mu, wenn man das Indexregister addressiert hat, gehe Ich davon
 aus,da es mglich ist,ohne Zeitverzgerung das Datenregister zu adressieren.
 Probiers bitte selbst aus, ob Deine Musikroutinen auch bei anderen Leuten
 genau so gut funktionieren, wie bei Dir. Aber Ich empfehle Dir, warte eine
 ganz ganz kurze Zeit. Diese Zeit sollte sich im s-Bereich erstrecken.

 Ŀ
  Mixerchip beschreiben:                                                     
 Ĵ
  1: Den Index an das Indexregister des MixerChips senden, Port 02*4h.       
  2: (eventuell einige s warten)                                            
  3: Den Wert an das Datenregister, Port 02*5h senden.                       
 

  6.3  - Werte vom Mixerchip lesen
 
   Das ist auch nicht weiter dramatisch. Ich werde gleich auch noch eine
 genauere Aufschlsselung der Befehle und der Werte geben. Jetzt soll erst mal
 die bersicht kommen, was getan werden mu, um einen Wert zu lesen.

 Ŀ
  Mixerchipwerte lesen:                                                      
 Ĵ
  1: Den Index an das Indexregister des Mixerchips senden, Port 02*4h.       
  2: (eventuell einige s warten)                                            
  3: Den Wert aus dem Datenregister, Port 02*5h lesen.                       
 

  6.4  - Mixerchip-Kommandos fr SB Pro und SB16
 
   Nun kommt endlich eine Liste mit den Indexregistern und deren Bedeutung. Ich
 hoffe doch, da Du sehr an dieser Liste interressiert bist. Hier gibt es noch
 ein paar Einschrnkungen. Die SB16 ist nur halb so abwrtskompatibel, wie sie
 vom Hause aus sein sollte. Es gibt im Klartext einige Unstimmigkeiten zwischen
 der SB Pro und der SB16 in Bezug auf die Register.Aber Ich werde diese kleinen
 Ungereimtheiten nher beschreiben. Mit dem sogenannten Mixerchip, kann man die
 ein und Ausgnge steuern, auerdem kann hiermit die Balance und die Lautstrke
 geregelt werden.Es wird einige Probleme mit den einzelnen Versionen der Sound-
 blasterkarte geben. (Gegrt sei hiermit die Firma Creative, die fast nichts
 von Abwrtskomatieblitt hlt. Fast jeder Hersteller bemht sich ein wenig nur
 Creative nicht).
 Ŀ
  MixerChip-Kommandos fr die Soundblaster Pro:                              
 Ĵ
  00h	Reset                                                                 
  02h	DSP-Lautstrke                                                        
  04h  Stimmen-Lautstrke                                                    
  0Ah	Microfonlautstrke                                                    
  0Ch	Eingabe und Filtereinstellungen                                       
  0Eh	Ausgabefilter und Stereowahl                                          
  22h	Masterlautstrke                                                      
  26h	FM-Lautstrke                                                         
  28h	CD-Lautstrke                                                         
  2Eh	Line-Lautstrke                                                       
 

   00h - Reset
 
   Haben wir bereits besprochen.

   02h - DSP-Lautstrke
 
   SB Pro :
 Wird zur Lautstrke Regelung benutzt.    Ŀ	 - unbenutzt
 Linke Lautstrke (0..7) Ŀ   765321
 Rechte Lautstrke (0..7) Ŀ    
                                        
   SB16 (ASP) :                     
 Links (0..15)  Bits: 7,6,5,4
 Rechts (0..15) Bits: 3,2,1,0

   04h - Stimmen-Lautstrke
 
   SB Pro:
 Wird zur Simmenlautstrkeregelung benutzt.   Ŀ
 Linke Lautstrke (0..7) Ŀ   765321
 Rechte Lautstrke (0..7) Ŀ    
                                              
   SB16 (ASP) :                         
 Links (0..15)  Bits: 7,6,5,4
 Rechts (0..15) Bits: 3,2,1,0

   0Ah - Mikrofon-Lautstrke
 
   SB Pro:
 Wiederrum eine Regelung frs Mikrofon.    Ŀ
 Mikrofonlautstrke (0..3) Ŀ  21
                                          
   SB16 (ASP) :                         
 Mikrofonlautst. (0..7)  Bits: 2,1,0

   0Ch - Aufnahme und Filtereinstellungen
 
   SB Pro/SB16 (ASP):
 Das Register regelt Einstellungen fr die Aufnahme. Zum einen knnen hier
 verschiedene Filter eingestellt werden. Und des weiteren knnen hier die
 Eingabequellen genau spezifiziert werden.    Ŀ
 Filter ein und ausschalten Ŀ  5321
 Art des Filters Ŀ   
 Eingabemedium Ŀ      
 Bit 5:    0=Filter aktiv                
           1=Filter inaktiv            
 Bit 3:    0=Hochton Filter
           1=Tiefton Filter
 Bit 2,1:  00=Mikrofon 1  |  01=CD  |  10=Mikrofon 2  | 11=Line-IN

   0Eh - Ausgabefilter und Stereowahl
 
   SB Pro/(SB16??? (ASP)):
 Da diese Stereo Funktion bei der SB16 nicht so hinhaut, wie sie eigentlich
 sollte, mchte Ich mich nicht so genau festlegen. Ich meine damit, ob das
 Register auf der SB16 auch vorhanden ist.Ich wei mit Sicherheit, da die
 Stereo-Funktion so nicht arbeitet, auf einer SB16. Sieh bitte dazu bei den
 DSP-Kommandos nach, die im Kapitel 4.04 unter den DSP Befehlen B6h,B9h,C6h
 und C9h beschrieben sind. (Um Stereosounds auf einer SB16 auszugeben).
 Diese Funktionen werden auch von dem Testprogramm genutzt, das im Sound-
 blasterpaket der SB16 ist, um ein Stereosample auszugeben. Da SB-Pro ge-
 schriebene Software nicht zu einer SB16 kompatibel ist,kann man schlufolgern,
 da die Stereoausgabe nicht so, wie auf einer SB Pro funktioniert.
 Stereowahl 0=MONO/1=STEREO Ŀ    Ŀ
 Filterfunktion: 0=EIN/1=AUS Ŀ     51
                                           
                                              
                                      

   22h - Masterlautstrke
 
   SB Pro:
 Gibt die halt eben die Lautstrke an. Ŀ
 Linke Lautst. (0..7) Ŀ  765321
 Rechte Lautst. (0..7) Ŀ   
                                      
   SB16 (ASP) :                   
 Links (0..15)  Bits: 7,6,5,4
 Rechts (0..15) Bits: 3,2,1,0

   26h - FM-Lautstrke
 
   SB Pro:
 Gibt die Lautstrke der FM-Stimmen an. Ŀ
 Linke Lautst. (0..7) Ŀ  765321
 Rechte Lautst. (0..7) Ŀ   
                                       
   SB16 (ASP) :                    
 Links (0..15)  Bits: 7,6,5,4
 Rechts (0..15) Bits: 3,2,1,0

   28h - CD-Lautstrke
 
   SB Pro:
 Gibt die Lautstrke der CD an. Ŀ
 Linker Kanal (0..7) Ŀ 765321
 Rechter Kanal (0..7) Ŀ  
                                
   SB16 (ASP) :             
 Links (0..15)  Bits: 7,6,5,4
 Rechts (0..15) Bits: 3,2,1,0

   2Eh - Line-Lautstrke
 
   SB Pro:
 Gibt die Lautstrke des Line-Kanals an. Ŀ
 Linker Kanal (0..7) Ŀ 765321
 Rechter Kanal (0..7) Ŀ  
                                         
   SB16 (ASP) :                      
 Links (0..15)  Bits: 7,6,5,4
 Rechts (0..15) Bits: 3,2,1,0

  6.5  - Mixerchip-Komandos fr die SB16
 
   Die folgenden Befehle sind derzeit nur auf einer SB16 verfgbar. Fr die
 neueren Karten von Creative nach der SB16 habe ich persnlich kein Interresse.
 Ich finde, da die SB16 schon einwenig beschissen ist, wegen der ganzen
 Treiber und dem zustzlichen Mll, der auf den Disketten zu finden ist. Okay
 sie hat 16Bit Stereo Sound, eine bessere Qualitt aber sie luft so gut wie
 gar nicht ohne die Treiber,(ist zumindest meine Erfahrung).Ich habe sie nicht
 mehr so lange behalten, um sie weiter zu testen, diese flog nach dem 2. Tag
 schnurstracks wieder aus meinem Rechner raus. Ich bin mit meiner Karte ganz
 zufrieden...

 Ŀ
  Erweiterte MixerChip-Kommandos fr die SB16:                               
 Ĵ
  30h  Linke Masterlautstrke                                                
  31h  Rechte Masterlautstrke                                               
  32h  Linke Stimmenlautstrke                                               
  33h  Rechte Stimmenlautstrke                                              
  34h  Linke MIDI Lautstrke                                                 
  35h  Rechte MIDI Lautstrke                                                
  36h  Linke CD-Lautstrke                                                   
  37h  Rechte CD-Lautstrke                                                  
  38h  Linke Line-Lautstrke                                                 
  39h  Rechte Line-Lautstrke                                                
  3Ah  Mirkrofon Lautstrke                                                  
  3Bh  PC-Speaker Lautstrke                                                 
  3Ch  Ausgabe Controll Register                                             
  3Dh  Linkes IN Controll Register                                           
  3Eh  Rechtes IN Controll Register                                          
  3Fh  Linker Eingabe Gain Faktor (Schift Faktor)                            
  40h  Rechter Eingabe Gain Faktor (Schift Faktor)                           
  41h  Linker Ausgabe Gain Faktor (Schift Faktor)                            
  42h  Rechter Ausgabe Gain Faktor (Schift Faktor)                           
  43h  Automatischer Gain Kontroller (AN/AUS)                                
  44h  Linke Hhen                                                           
  45h  Rechte Hhen                                                          
  46h  Linke Bsse                                                           
  47h  Rechte Bsse                                                          
 

   30h/31h Linke und Rechte Masterlautstrke
 
 Lautstrke (0..31)  Bits: 7,6,5,4,3
 unbenutzte          Bits: 2,1,0

   32h/33h Linkes und Rechtes Stimmenvolumen
 
 Lautstrke (0..15)  Bits: 7,6,5,4
 unbenutzte          Bits: 3,2,1,0

   34h/35h Linkes und Rechtes MIDI-Volumen
 
 Lautstrke (0..15)  Bits: 7,6,5,4
 unbenutzte          Bits: 3,2,1,0

   36h/37h Linkes und Rechtes CD-Volumen
 
 Lautstrke (0..15)  Bits: 7,6,5,4
 unbenutzte          Bits: 3,2,1,0

   38h/39h Linkes und Rechtes Line-Volumen
 
 Lautstrke (0..15)  Bits: 7,6,5,4
 unbenutzte          Bits: 3,2,1,0

   3Ah - Mikrofon-Laustrke
 
 Lautstrke (0..15)  Bits: 7,6,5,4
 unbenutzte          Bits: 3,2,1,0

   3Bh - PC-Speaker-Volumen
 
 Lautstrke (0..3)   Bits: 7,6
 unbenutzte          Bits: 5,4,3,2,1,0

   3Ch - Ausgabe Kontroll Register
 
 Mikrofon            Bit:  0
 CD-Rechts           Bit:  1
 CD-Links            Bit:  2
 Line-Rechts         Bit:  3
 Line-Links          Bit:  4
 unbenutzte          Bits: 5,6,7

   3Dh/3Eh Linkes und Rechtes Kontroll Register
 
 Mikrofon            Bit:  0
 CD-Rechts           Bit:  1
 CD-Links            Bit:  2
 Line-Rechts         Bit:  3
 Line-Links          Bit:  4
 Midi-Rechts         Bit:  5
 Midi-Links          Bit:  6
 unbenutztes         Bit:  7

   3Fh/40h/41h/42h Linker und Rechter, Ein- und Ausgabe Gain-Faktor
 
 Gain-Faktor         Bits: 7,6
 unbenutzte          Bits: 5,4,3,2,1,0

   43h - Automatische Gain Kontrolle AN/AUS
 
 Gain Kontrolle AN/AUS   Bit:  0
 unbenutzte              Bits: 7,6,5,4,3,2,1

   44h/45h Linke und Rechte Hhe
 
 Hoehenwerte (0..15)  Bits: 7,6,5,4
 unbenutzte           Bits: 3,2,1,0

   46h/47h Linker und Rechter Bass
 
 Basswerte (0..15)    Bits: 7,6,5,4
 unbenutzte           Bits: 3,2,1,0