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 m”glich, 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. Aužerdem 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 qu„lt. Letztere Version ist leider noch zielmlich instabil und die Emulation der Interuptm”glichkeit 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, unvollst„ndige šbersicht ber die XBIOS-Soundfunktionen (gr”žtenteils 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 m”glich ist - wenn 1 zurck- gegeben wird, dann ist es m”glich, 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 Abschw„chung des linken Ausgabekanals um 1,5 Db Einheiten: data = Einheiten << 4; 1 Abschw„chung 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 unver„ndert. 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 w„hlen 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- gel”st 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- l”schte Bits aus. Ergebnis Im Erfolgsfall liefert die Funktion den Wert 0. Wurde fr mode -1 bergeben, erh„lt 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 zust„ndig, 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 gel”scht). Andernfalls wird der aktuelle Status ermittelt. Ergebnis Liegt kein Fehler vor erh„lt 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 grožen Puffer. In diesen werden die Positions- zeiger angelegt. Der erste LONG des Puffer enth„lt 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/