
   X-SOUND
   Geschrieben 1995/96 von Thomas Huth
   McSn-Cookie Erweiterung dank ChrisP, 1999
 
X-Sound stellt auf STs, STEs und TTs falconkompatible XBIOS-Soundroutinen
zur Verfgung (XBIOS-Funktionen ab Nr.128). Somit ist es nun auch auf diesen
von Ataris 32-Bittern mglich, Samplesounds per Betriebsystem abzuspielen.
Auch auf Klones wie z.B. Hades und Milan sind diese XBIOS-Funktionen
auch teilweise vorhanden (eine Soundkarte dort mal vorrausgesetzt), so dass
man, wenn man portabel programmieren will, auf diese XBIOS Funktionen zur
Soundausgabe zurckgreifen sollte.
X-Sound ist Freeware, die Sourcen liegen zum Studium und zum Verbessern
bei, die Copyrights drfen jedoch nicht entfernt werden.
Auerdem gibt's von mir noch den Sampleplayer TEPS mit Sourcecode, der
demonstriert, wie das Ausgeben von Samples in eigenen Programmen aussehen kann.
X-Sound liegt in zwei Versionen vor, XSND_DMA.PRG, das den Digisound des
STE/TTs benutzt, und XSND_PSG.PRG, das den Soundchip des normalen ST mit der
Soundausgabe qult. Letztere Version ist leider noch zielmlich instabil und die
Emulation der Interuptmglichkeit klappt irgendwie noch gar nicht. Aber der
Sourcecode liegt ja bei, so dass man bei Bedarf da selbst Hand anlegen kann.

Hier noch eine kurze, unvollstndige bersicht ber die XBIOS-Soundfunktionen
(grtenteils vom TOS-Hypertext "geliehen"):

-----------------------------------------------------------------------------
Name           locksnd - Soundsystem fr andere Anwendungen sperren

Xbiosnummer    128

Deklaration    LONG locksnd ( VOID );

Beschreibung   Die XBIOS-Routine locksnd sperrt das Soundsystem
               fr andere Anwendungen.
               Hinweis: Mit dieser Funktion kann man recht bequem testen, ob
               die XBIOS-Soundausgabe berhaupt mglich ist - wenn 1 zurck-
               gegeben wird, dann ist es mglich, wenn nicht, dann muss man
               auf die Soundausgabe verzichten!

Ergebnis       Die Funktion liefert im positiven Fall den Wert
               1 zurck. Ist das Soundsystem bereits vergeben,
               so wird ein negativer Wert zurckgeliefert.
-----------------------------------------------------------------------------
Name           unlocksnd - Soundsystem fr andere Anwendungen freigeben

Xbiosnummer    129

Deklaration    LONG unlocksnd ( VOID );

Beschreibung   Die XBIOS-Routine unlocksnd gibt das Soundsystem
               fr andere Anwendungen frei, nachdem es zuvor ge-
               sperrt wurde.
 
Ergebnis       Die Funktion liefert im positiven Fall den Wert
               0 zurck. War das Soundsystem bereits verfgbar,
               so wird ein negativer Wert zurckgeliefert.
-----------------------------------------------------------------------------
Name           soundcmd - Parameter des A/D und D/A-Wandlers setzen
               bzw. ermitteln

Xbiosnummer    130

Deklaration    LONG soundcmd ( WORD mode, WORD data );

Beschreibung   Die XBIOS-Routine soundcmd setzt bzw. ermittelt
               die Parameter des A/D- und D/A-Wandlers. Der Pa-
               rameter mode bestimmt das Kommando und data die
               vorzunehmende Einstellung.

               mode    Bedeutung
 
                0      Abschwchung des linken Ausgabekanals um
                       1,5 Db Einheiten:
                       data = Einheiten << 4;

                1      Abschwchung des rechten Ausgabekanals um
                       1,5 Db Einheiten:
                       data = Einheiten << 4;

                5      Eingabequellen des A/D-Wandlers. Bit 0
                       steht fr den rechten und Bit 1 fr den
                       linken Kanal. Ist ein Bit gesetzt, wird
                       werden die Daten dem Soundchip entnommen,
                       sonst dem Mikrophon.

               Wird fr den Parameter data der Wert -1 ber-
               geben, so bleibt die Einstellung unverndert.

Ergebnis       Die Funktion liefert die aktuelle Einstellung zurck.
-----------------------------------------------------------------------------
Name           setbuffer - Setzen des Aufnahme und Wiedergabepuffers

Xbiosnummer    131

Deklaration    LONG setbuffer ( WORD reg, VOID *begaddr,
                                VOID *endaddr );

Beschreibung   Die XBIOS-Routine setbuffer setzt den Puffer fr
               die Wiedergabe- (reg = 0) bzw. Aufnahmedaten
               (reg = 1). Der Parameter begaddr zeigt auf
               den Anfang des Puffers und endaddr auf das
               letzte Byte + 1 des Puffers.
 
Ergebnis       Die Funktion liefert im positiven Fall den Wert
               0 zurck.
-----------------------------------------------------------------------------
Name           setmode - Modus fr Aufnahme bzw. Wiedergabe whlen

Xbiosnummer    132

Deklaration    LONG setmode ( WORD mode );

Beschreibung   Die XBIOS-Routine setmode gibt die Art des Aufnahme-
               und Wiedergabemodus an:

               mode    Bedeutung
 
                0        8 Bit Stereo
                1       16 Bit Stereo
                2        8 Bit Mono

Ergebnis       Die Funktion liefert im positiven Fall den Wert 0
               zurck.
-----------------------------------------------------------------------------
Name           setinterrupt - Interrupt am Ende einer Aufnahme bzw.
               einer Wiedergabe festlegen

Xbiosnummer    135

Deklaration    LONG setinterrupt ( WORD src_inter, WORD cause );

Beschreibung   Die XBIOS-Routine setinterrupt bestimmt, welcher
               Interrupt nach dem Aufnehmen bzw. Abspielen aus-
               gelst werden soll.

               src_inter     Bedeutung
 
               0             Timer-A-Interrupt
               1             MFP-Interrupt 7


               cause     Bedeutung
 
               0         Kein Interrupt
               1         Interrupt nach dem Abspielen
               2         Interrupt nach dem Aufnehmen
               3         Interrupt nach Aufnehmen und Ab-
                         spielen

               Hinweis: Die Emulation dieser Funktion funktioniert so gut wie
               gar nicht, so dass man auf Interrupts in sauberen Anwendungen
               verzichten sollte.
 
Ergebnis       Die Funktion liefert im positiven Fall den Wert 0
               zurck.
-----------------------------------------------------------------------------
Name           buffoper - Setzen des Aufnahme bzw. Wiedergabemodus

Xbiosnummer    136 

Deklaration    LONG buffoper ( WORD mode );

Beschreibung   Die XBIOS-Routine buffoper legt den Aufnahme- und
               Wiedergabemodus fest.

               Wird fr mode der Wert -1 bergeben, wird die
               aktuelle Einstellung ermittelt. Sonst wird
               mode wie folgt kodiert:

               Bit     Operation

                0      Wiedergabe
                1      Wiedergabewiederholung

               Gesetzte Bits schalten eine Operation ein, ge-
               lschte Bits aus.
 
Ergebnis       Im Erfolgsfall liefert die Funktion den Wert 0.
               Wurde fr mode -1 bergeben, erhlt man die
               aktuelle Einstellung, deren Kodierung der des
               Parameters mode entspricht.
-----------------------------------------------------------------------------
Name           devconnect - Verbinden der Audiosubsystem-Komponenten

Xbiosnummer    139

Deklaration    LONG devconnect ( WORD src, WORD dst,
                                 WORD srcclk, WORD prescale,
                                 WORD protocol );

Beschreibung   Die XBIOS-Routine devconnect verbindet Komponenten
               des Audio-Subsystems.

               Parameter    Bedeutung
 
               src          Quellkomponente:
                            0   DMA-Ausgabe
                            1   DSP-Ausgabe
                            2   Externer Eingabekanal
                            3   A/D-Wandler - Mikrophon

               dst          Bitvektor der Zielkomponenten:
                            Bit 0   DMA-Eingabe
                            Bit 1   DSP-Eingabe
                            Bit 2   Externer Ausgabekanal
                            Bit 3   D/A-Wandler - Lautsprecher

               srcclk       Takt fr die Quellkomponente:
                            0   Interner 25,175 MHz Takt
                            1   Externer Takt
                            2   Interner 32 MHz Takt

               prescale     Taktvorteiler. Die Sample-Rate ergibt
                            sich aus dem Takt geteilt durch 256
                            und geteilt durch Vorteiler + 1. Die
                            Werte fr den Vorteiler rangieren
                            von 0 bis 11.

               protocol     Wird 0 bergeben, findet eine ber-
                            tragung mit Handshaking statt, bei
                            1 erfolgt kein Handshaking.
 
               Hinweis: Diese Funktion ist fr das Setzen der Abspielfrequenz
               zustndig, es werden nur src=0 und dst=8 und srcclk=0 emuliert.

Ergebnis       Die Funktion liefert im positiven Fall den Wert 0
               zurck.
-----------------------------------------------------------------------------
Name           sndstatus - Status des A/D und D/A Wandlers ermitteln

Xbiosnummer    140

Deklaration    LONG sndstatus ( WORD reset );

Beschreibung   Die XBIOS-Routine sndstatus ermittelt den aktuellen
               Status des A/D- und D/A-Wandlers. Sie kann diesen
               ebenfalls neu initialisieren.

               Hat reset den Wert 1 wird der A/D- und D/A-Wandler
               neu initialisiert (unteranderem werden die berlauf-
               bits gelscht). Andernfalls wird der aktuelle Status
               ermittelt.

Ergebnis       Liegt kein Fehler vor erhlt man als Ergebnis den Wert
               Null. Ansonsten stellt das Resultat einen Bitvektor dar,
               der sich wie folgt entschlsselt:

               Bits      Bedeutung
 
                0-3      1  Ungltiges Kontrollfeld
                         2  Ungltiges Syncformat
                         3  Ungltiger Takt

                4        Linker berlauf
                5        Rechter berlauf
-----------------------------------------------------------------------------
Name           buffptr - Ermitteln der Aufnahme bzw. Wiedergabeposition

Xbiosnummer    141

Deklaration    LONG buffptr ( LONG *ptr );

Beschreibung   Die XBIOS-Routine buffptr ermittelt die aktuelle
               Wiedergabe- und Aufnahmepositionen in den ent-
               sprechenden Puffern.

               ptr zeigt auf einen mindestens 4 Langworte
               groen Puffer. In diesen werden die Positions-
               zeiger angelegt. Der erste LONG des Puffer
               enthlt einen Zeiger auf die aktuelle Wieder-
               gabeposition und der zweite LONG einen
               Zeiger auf die aktuelle Abspielposition.

Ergebnis       Im Erfolgsfall liefert die Funktion den Wert 0.
-----------------------------------------------------------------------------


 Viel Spa damit!
 
              Thothy


E-Mail: thothy@atari-computer.de
WWW:    http://www.crosswinds.net/~thothy/
