In diesem achten Teil unserer ST-Betriebssysteme-Serie werden wir die Routinen des XBIOS abschließen. Damit endet auch diese Serie. Man könnte zu diesem Thema unendlich viel schreiben, aber die Serie wurde nur als Anregung gedacht. Spezielle Anwendungen unter TOS werden wir in Zukunft als separate Beiträge bringen.
Mit Hilfe dieser Funktion ist es möglich, Sounds abarbeiten zu lassen. Die Funktion benötigt als Parameter eine Adresse, die auf eine Tabelle von ’Soundbefehlen’ zeigt.
Folgende Befehle stehen dem Anwender zur Verfügung:
Befehl $00-$0F
Dieser Befehl spricht die Registernummern $00-$0F des Soundchips an. Nach der Registernummer folgt ein Byte, das in das Register geladen wird. Die Register des Soundchips sind folgendermaßen definiert:
Register 0
Dient zur Feineinstellung der Frequenz der ersten Stimme.
Register 1
Dient zur Grobeinstellung der Frequenz der ersten Stimme (Hier werden nur die 4 unteren Bit dieses Registers benutzt).
Register 2
Dient zur Feineinstellung der Frequenz der zweiten Stimme.
Register 3
Dient zur Grobeinstellung der Frequenz der zweiten Stimme (Hier werden nur die 4 unteren Bit dieses Registers benutzt).
$20 Dosound
move.l #tab,-(sp) ; Wertetabelle auf Stack
move.w #32,-(sp) ; Funktionsnummer
trap #14
addq.l #6,sp ; Stackkorrektur
tab:
dc.b 0,1,1,5,7,254,8,11,1,12,0,7,255
Register 4
Dient zur Feineinstellung der Frequenz der dritten Stimme.
Register 5
Dient zur Grobeinstellung der Frequenz der dritten Stimme (Hier werden nur die 4 unteren Bit dieses Registers benutzt).
Register 6
Dient mit seinen letzten fünf Bit zur Einstellung der Rauschfrequenz.
Register 7
Multifunktionsregister
Bit 0: Ist dieses Bit nicht gesetzt, so wird die erste Stimme eingeschaltet. Ist das Bit gesetzt, ist sie ausgeschaltet.
Bit 1: Ist dieses Bit nicht gesetzt, so wird die zweite Stimme eingeschaltet. Ist es gesetzt, ist sie ausgeschaltet.
Bit 2: Ist dieses Bit nicht gesetzt, so wird die dritte Stimme eingeschaltet. Ist es gesetzt, ist sie ausgeschaltet.
Bit 3 und 4 dienen dazu den Rauschgenerator für alle drei Stimmen ein-oder auszuschalten. Auch hier bedeutet ein gesetztes Bit das Ausschalten des Rauschgenerators und umgekehrt.
Bit 6 und 7 steuern Port A bzw. Port B.
Register 8
Durch dieses Register (untere vier Bits) wird die Lautstärke der ersten Stimme geregelt.
Register 9
Genauso wie Register 8, aber für die zweite Stimme.
Register 10
Wie Register 8 und 9, aber für die dritte Stimme.
Register 11 und 12
Durch diese 16 Bits wird die Periodendauer der Kurvenform der Hüllkurve beeinflußt.
Register 13
Bestimmt die Form der Hüllkurve.
Register 14 und 15
Dieses Register dient zum Ansprechen der zwei Ports dieses Bausteins.
Befehl $80
Durch diesen Befehlstyp wird das nachfolgende Argument (ein Byte) in ein temporäres Register geladen.
Befehl $81
Bei diesem Befehl werden drei Argumente benötigt. Das erste Argument ist die Nummer des Registers des Soundchips, in das der Inhalt des temporären Registers übergeben werden soll. Das zweite Argument ist das Zweierkomplement des Inhalts des temporären Registers, das zu diesem Register addiert wird. Das dritte Argument enthält den sogenannten Endwert. Der Befehl wird so lange ausgeführt, bis der Endwert erreicht ist.
Befehl $82-$FF
Durch diesen Befehl wird die Länge eines Sounds bestimmt. Ist das Argument eine Null, so wird der Sound unterbrochen.
Durch diese Funktion läßt sich die Druckerkonfiguration abfragen oder neu einstellen. Wird als Parameter eine -1 übergeben, so erhält man in D0 die aktuelle Konfiguration zurück. Möchte man den Drucker neu konfigurieren, so wird dem Stack ein Wert übergeben, der dieser neuen Konfiguration entspricht.
Hier die Bedeutung aller 16 Bit dieses Langworts:
Bit 0
Matrixdrucker 0 / Typenraddrucker 1
Bit 1
Farbdrucker 0 / Monochromdrucker
Bit 2
1280 Dots 0 / 960 Dots 1
Bit 3
Test-Modus 0 / Maximum-Modus 1
Bit 4
Drucker 0 / Modem 1
Bit 5
Endlospapier 0 / Einzelblatt 1
Bit 6-14
reserviert
Bit 15
immer 0
$21 Setprt
move.w #57,-(sp) ; Neue Druckerkonfiguration setzen
move.w #33,-(sp) ; Funktionsnummer
trap #14
addq.l #4,sp ; Stackkorrektur
Übergibt die Anfangsadresse einer Tabelle, in der Adressen von Routinen stehen, die Daten des Tastaturprozessors verarbeiten. Die Tabelle ist folgendermaßen aufgebaut:
$22 Kbdvbase
move.w #34,-(sp) ; Funktionsnummer
trap #14
addq.l #2,sp ; Stackkorrektur
Durch diese Funktion kann man die Wiederholungsrate der Tastatur ermitteln oder neu setzen. Übergibt man als Parameter eine -1, so wird der alte Wert zurückgegeben. Um eine neue Wiederholungsrate einzustellen, müssen zwei Parameter dem Stack übergeben werden. Der erste Parameter gibt die Verzögerungszeit nach einem Tastendruck an, die bestimmt, ab wann die automatische Wiederholsequenz startet. Der zweite Parameter dient zur Definition des Geschwindigkeitsfaktors.
$23 Kbrate
move.w #1,-(sp) ; Verzgerungszeit
move.w #1,-(sp) ; Wiederholungsrate setzen
move.w #35,-(sp) ; Funktionsnummer
trap #14
addq.l #6,sp ; Stackkorrektur
Gibt eine definierte Hardcopy auf dem Drucker aus. Diese Funktion ist der Scrdmp-Funktion (20) sehr ähnlich und wird von dieser auch benutzt. Die Funktion erwartet wieder eine Anzahl von Parametern. Die Adresse, die auf die Parameterliste zeigt, wird dem Stack weitergegeben.
Die Parameter-Liste ist folgendermaßen aufgebaut:
Parameter | Typ | Bedeutung |
---|---|---|
1. | Long-Word | Adresse des Bildschirms |
2. | Integer | Null |
3. | Integer | Breite des Bildschirms |
4. | Integer | Höhe des Bildschirms |
5. | Integer | Linker Rand |
6. | Integer | Rechter Rand |
7. | Integer | Auflösung des Bildschirms |
8. | Integer | Auflösung der Drucker |
9. | Integer | Zeiger für Farbpalette |
10. | Integer | Druckertyp |
11. | Integer | Druckerport (Centronics, RS 232) |
12. | Long Word | Zeiger für Halbtonmaske |
$24 Prtblk
move.l #tab,-(sp) ; Wertetabelle auf Stack
move.w #36,-(sp) ; Funktionsnummer trap #14
addq.l #6,sp ; Stackkorrektur
tab:
dc.1 $f8000,0,50,50,100,100,2,0,1,1,1
Nach Aufruf dieser Funktion wird auf den nächsten Vertikal-Blank-Interrupt gewartet. Anschließend erfolgt ein sofortiger Rücksprung. Mit dieser Funktion ist es zum Beispiel möglich, Grafik-Operationen synchron laufen zu lassen.
$25 Vsync
move.w #36,-(sp) ; Funktionsnummer
trap #14
addq.l #2,sp ; Stackkorrektur
Läßt eine Routine im Supervisor-Modus ablaufen. Diese Funktion ist der GEMDOS-Funktion Super ($20) sehr ähnlich. Der große Vorteil von Supexec ist, daß nicht das ganze System in den Supervisor-Modus versetzt wird. Man übergibt die Anfangsadresse einer Routine, die im Supervisor-Modus ausgeführt werden soll. Man sollte darauf achten, daß die Routinen keine BIOS- oder GEMDOS-Funktionen enthalten.
$26 Supexec
move.l #routine,-(sp) ; auszuführende Routine auf Stack
move.w #38,-(sp) ; Funktionsnummer
trap #14
addq.l #6,sp ; Stackkorrektur
clr-(sp) ; GEMDOS 0
trap #1
routine: ; Hardcopy-Routine
move.1 #1,$4ee
rts
Schaltet das AES ab. Der von AES belegte Speicherplatz wird freigegeben.
$27 Puntaes
move.w #39,-(sp) ; Funktionsnummer
trap #14
addq.l #2,sp ; Stackkorrektur