Das ST-Betriebssystem Teil 8

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.

$ 20 Dosound

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.

$21 Setprt

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

$22 Kbdvbase

Übergibt die Anfangsadresse einer Tabelle, in der Adressen von Routinen stehen, die Daten des Tastaturprozessors verarbeiten. Die Tabelle ist folgendermaßen aufgebaut:

  1. Long-Word MIDI Eingabe
  2. Long-Word Tastatur Fehler
  3. Long-Word MIDI Fehler
  4. Long-Word IKBD Status.
  5. Long-Word Maus-Routinen
  6. Long-Word Uhrzeit-Routine
  7. Long-Word Joystick-Routine

$22 Kbdvbase

move.w #34,-(sp)	; Funktionsnummer
trap #14
addq.l #2,sp	; Stackkorrektur

$23 Kbrate

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

$24 Prtblk

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

$25 Vsync

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

$26 Supexec

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

$27 Puntaes.

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


Aus: ST-Computer 02 / 1987, Seite 56

Links

Copyright-Bestimmungen: siehe Über diese Seite