HomeXBIOSSoundroutinenTastaturfunktionen

4.18 Spezialbefehle

Blitmode Blitterkonfiguration ändern oder ermitteln.
CacheCtrl CPU Cacheverwaltung
CJar Erzeugen, Abfragen und Löschen von Cookies
Dbmsg Debugmeldungen ausgeben
Janus Funktion des "Janus" Emulator
Puntaes AES im ROM abschalten.
Random Zufallszahlengenerator
Ssbrk Speicherplatz reservieren (nur intern verwendet).
Supexec Unterprogramm im Supervisor-Modus starten.
Trapper Einklinken in Systemfunktionen.
WdgCtrl Einstellen des Hardware-Watchdog

Querverweis: Schnittstellenprogrammierung

4.18.1 Blitmode

Name: »blitter mode« - Blitter-Chip konfigurieren.
Xbiosnummer: 64
Deklaration: int16_t Blitmode( int16_t mode );
Beschreibung: Blitmode ist eine XBIOS-Routine um den Blitter einzuschalten oder seine Existenz festzustellen. Wenn im Parameter mode der Wert -1 angegeben wird, dann erhält man den Status des Blitter-Chips. Bei allen anderen Werten wird der Blitter konfiguriert:

Bit Beschreibung
0 0 = Blitter aus
  1 = Blitter ein
1-14 reserviert
15 muss immer 0 sein


Hinweis: Lt. Atari darf die Funktion ohne Versionsabfrage benutzt werden (obwohl sie beispielsweise im TOS 1.0 nicht vorhanden ist). Ermöglicht wird dies durch einen Seiteneffekt im Dispatcher des XBIOS. Besser ist es allerdings, sich nicht darauf zu verlassen, da der entsprechende Trap ja von anderen Programmen verbogen werden kann, und dann evtl. nicht der richtige Return-Wert zurückgeliefert wird.
Ergebnis: Die Funktion liefert als Ergebnis durch gesetzte Bits Eigenschaften des Blitters-Chips:

Bit Bedeutung
0 0: Blitter aus
  1: Blitter an
   
1 0: Blitter nicht vorhanden
  1: Blitter vorhanden
   
15 immer 0


Alle weiteren Bits sind reserviert.
Verfügbar: Offiziell ist diese Funktion erst ab TOS-Version 1.02 vorhanden.
Gruppe: Spezialbefehle
Querverweis: Binding

4.18.1.1 Bindings für Blitmode

C: #include

int16_t Blitmode( int16_t mode );
Assembler:
move.w    mode,-(sp)   ; Offset 2
move.w    #64,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #4,sp        ; Stack korrigieren

4.18.2 CacheCtrl

Name: »CacheCtrl« - CPU Cacheverwaltung
Xbiosnummer: 160
Deklaration: int32_t CacheCtrl( int16_t OpCode, int16_t Param );
Beschreibung: Die XBIOS-Routine CacheCtrl dient zur Verwaltung der CPU-Caches

OpCode Beschreibung
0 Liefert 0 zurück, wenn die Funktion vorhanden ist.
1 Zurückschreiben des Datencaches
2 Zurückschreiben des Befehlscaches
3 Zurückschreiben des Daten- und Befehlscaches
4 Abfrage, ob Datencache aktiv ist
5 Aktivieren/Deaktivieren des Datencaches
   Param= 0, ausschalten
   Param= 1, einschalten
   Zurückschreiben des Caches falls notwendig
6 Abrage, ob Befehlscache aktiv ist
7 Aktivieren/Deaktivieren des Befehlscaches
   Param= 0, ausschalten
   Param= 1, einschalten
   Zurückschreiben des Caches falls notwendig


Bemerkung:
Im CT60 XBIOS hat der OpCode 5/7 dieselbe Funktionalität:
mode: 0 = deaktivieren aller Caches.
      1 = aktivieren aller Caches.
Betroffen sind die folgenden Caches: Data Cache, Store Buffer, Branch Cache, Instruction Cache.
Ergebnis: Im Erfolgsfall liefert die Funktion den Wert 0 oder EBADRQ, wenn für OpCode ein Wert größer sieben übergeben wird.

Als Alternative steht auch der Treiber "CPU Cache Control Driver v1.10" von Robert Federle und Thomas Tempelmann für andere Rechner zur Verfügung.
Verfügbar Die Funktion ist auf dem Milan seit TOS 4.06 verfügbar. Im CT60 XBIOS ab Version v0.98a.
Gruppe: Spezialbefehle
Querverweis: Binding

4.18.2.1 Bindings für CacheCtrl

C: int32_t CacheCtrl( int16_t OpCode, int16_t Param );
Assembler:
move.w    Param,-(sp)  ; Offset 4
move.w    OpCode,-(sp) ; Offset 2
move.w    #160,-(sp)   ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #6,sp        ; Stack korrigieren

4.18.3 CJar

Name: »CJar« - Erzeugen, Abfragen und Löschen von Cookies
Xbiosnummer: 17226 (0x434A)
Deklaration: int32_t CJar( int16_t mode, int32_t cookie, int32_t *value );
Beschreibung: Die XBIOS-Routine CJar dient auf komfortable Weise zum Erzeugen, Abfragen und Löschen von Cookies.
Parameter Bedeutung
   
mode Modus 0:
Ermittelt den Wert des Kekses und legt in an der angegebenen Adresse ab. Übergibt man für value einen Nullzeiger, so wird lediglich die Existenz des Kekses überprüft.
Bei erfolgreicher Ermittlung des Kekses, liefert der Aufruf 0x6172 (="CJar_OK") zurück, sonst einen anderen Wert.


Modus 1:
Erzeugt einen neuen Keks (cookie). Value zeigt auf einen Wert, der in den Jar eingetragen wird. WICHTIG! Es wird nicht value eingetragen, sondern der Wert auf den 'value' weist! Bei Übergabe eines NULL-Pointers wird 0 als Kekswert eingetragen. Existiert der Keks bereits, so wird sein alter Inhalt überschrieben!
Die Funktion liefert "CJar_OK" bei erfolgreicher Eintragung. -1 wird für den Fall geliefert, daß der Cookie-Jar voll ist.


Modus 2:
Entfernt den Keks cookie aus dem Jar. Der Wert von value ist egal. Liefert bei erfolgreicher Entfernung "CJar_OK", sonst einen anderen Wert.
Ist nur Verfügbar, wenn die Systemerweiterung Liberty (Cookie 'Lity') installiert ist.
cookie Cookiebezeichnung
value Adresse des Puffers, in dem die Daten abgelegt werden sollen.
Ergebnis: Im Erfolgsfall liefert die Funktion den Wert CJar_OK (0x6172) zurück.
Verfügbar Die Funktion ist verfügbar, wenn der Cookie 'CJar' ($434A6172) vorhanden ist. Dieser wird von JARxxx (Cookie Jar Manager) oder Liberty erzeugt.
Gruppe: Spezialbefehle
Querverweis: Binding   Cookie Funktionen

4.18.3.1 Bindings für CJar

C: int32_t CJar( int16_t mode, int32_t cookie, int32_t *value );
Assembler:
pea       value          ; Offset 8
move.l    cookie,-(sp)   ; Offset 4
move.w    mode,-(sp)     ; Offset 2
move.w    #17226,-(sp)   ; Offset 0
trap      #14            ; XBIOS aufrufen
lea       12(sp),sp      ; Stack korrigieren

4.18.4 Dbmsg

Name: »Dbmsg« -
Xbiosnummer: 11
Deklaration: void Dbmsg( int16_t rsrvd, int16_t msg_num, int32_t msg_arg )
Beschreibung: Dbmsg() erlaubt es, spezielle Debuggingkommandos an einen residenten Debugger zu schicken.

srsrvd ist zur Zeit reserviert und sollte immer den Wert 5 haben.

msg_num ist die Nachrichtennummer, die an den Debugginghost geschickt wird. Werte von 0x0000 bis 0xEFFF werden für applikationsspezifische Nachrichten benutzt. Werte von 0xF000 bis 0xFFFF werden für spezielle Debuggingnachrichten benutzt. Wenn msg_num im Bereich der für die Applikation reservierten Werte liegt, werden der Wert und der int32_t aus msg_arg angezeigt und die Applikation wird angehalten. Wenn msg_num zwischen 0xF001 und 0xF0FF inklusive liegt, wird msg_arg als ein Zeiger auf einen String, der vom Debugger ausgegeben werden soll, interpretiert und das Debuggen untrerbrochen. Die Länge des Strings wird im unteren Byte von msg_num angegeben.(!nl)

Wenn msg_num den Wert DB_NULLSTRING (0xF000) hat, wird der String bis zur abschließenden 0 ausgegeben.(!nl)

Wenn msg_num den Wert DB_COMMAND (0xF100) hat, wird msg_arg als ein Zeiger auf eine Zeichenkette mit einem Debugger Kommando interpretiert. Das Format des Kommandos hängt von dem bneutzten Debugger ab. Eine Anwendung bei Verwendung des Atari Debuggers ist die Ausgabe eines Strings, ohne das Debuggen zu beenden:

Dbmsg( 5, DB_COMMAND, "echo 'Debugging Message';g" );

Der Atari Debugger bis zur Version 3 kennt nur den Wert DB_COMMAND (0xF100) für msg_num. Normalerweise ist es kein Problem, ein Programm mit Debugging Messages ohne Debugger laufen zu lassen, aus der endgültigen Version sollten diese Anweisungen allerdings entfernt werden.
Ergebnis:
Verfügbar: Wenn ein Debugger geladen ist, der diese Funktion unterstützt. Der einzige Debugger, der zur Zeit diese Funktion unterstützt, ist der Atari Debugger.
Gruppe: Spezialbefehle
Querverweis: Binding

4.18.4.1 Bindings für Dbmsg

C: #include

void Dbmsg( int16_t rsrvd, int16_t msg_num, int32_t msg_arg )
Assembler:
move.l    msg_arg,-(sp)  ; Offset 6
move.w    msg_num,-(sp)  ; Offset 4
move.w    srsrvd,-(sp)   ; Offset 2
move.w    #11,-(sp)      ; Offset 0
trap      #14            ; XBIOS aufrufen
addq.l    #10,sp         ; Stack korrigieren

4.18.5 Janus

Name: »Janus« -
Xbiosnummer: 43
Deklaration: void Janus( int16_t mode )
Beschreibung: Diese Funktion stellt der Hardware-Emulator Janus zur Verfügung. Laut einem Artikel in der ST-Computer 1996-04, S. 44 kann man damit folgendes erzielt werden.

mode Beschreibung
-1 Ermitteln der aktiven parallele Schnittstelle
1 Umschaltung auf die erste parallele Schnittstelle
2 Umschaltung auf die zweite parallele Schnittstelle
256 Verlassen von Janus


Hinweis: Alle Angabe ohne Gewähr, da der Artikel nicht sehr ausführlich ist.
Ergebnis: Unbekannt bzw. siehe oben.
Verfügbar: Nur unter dem Hardware-Emulator Janus.
Gruppe: Spezialbefehle
Querverweis: Binding

4.18.5.1 Bindings für Janus

C: #include

void Janus( int16_t mode )
Assembler:
move.w    mode,-(sp)    ; Offset 2
move.w    #43,-(sp)     ; Offset 0
trap      #14           ; XBIOS aufrufen
addq.l    #4,sp         ; Stack korrigieren

4.18.6 Puntaes

Name: »punt AES« - AES abschalten.
Xbiosnummer: 39
Deklaration: void Puntaes( void );
Beschreibung: Die XBIOS-Routine Puntaes schaltet das AES-Betriebssystem ab. Das AES wird nur gestart, wenn "os_magic" im OSHEADER auf die korrekte magische Zahl (0x87654321) zeigt. Puntaes setzt dieses Flag (sofern möglich) zurück und boote dann das System neu.

Hinweis: Ab MagiC 4.00 wurde diese Funktion verändert.
  • long xbios ( 39, 'AnKr', 4, long key )
    Ermittle Cookie
    Liefert den Zeiger des Cookies key oder 0L wenn er nicht vorhanden ist.

  • xbios ( 39, 'AnKr', 5 )
    ????

Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Alle TOS Versionen.
Gruppe: Spezialbefehle
Querverweis: Binding   Cookie Funktionen

4.18.6.1 Bindings für Puntaes

C: #include

void Puntaes( void );
Assembler:
move.w    #39,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #2,sp        ; Stack korrigieren

4.18.7 Random

Name: »random generator« - Zufallsgenerator.
Xbiosnummer: 17
Deklaration: int32_t Random( void );
Beschreibung: Die XBIOS-Routine Random liefert (basierend auf einem Zeitgeber des Rechners) eine 24-Bit-Zufallszahl zurück.

Hinweis: Es handelt sich bei dieser Funktion nicht um einen Hardware-Zufallszahlengenerator, sondern um eine Software-Version, die den folgenden Algorithmus benutzt:
X = (X * 3.1415926...) + 1


Zurückgeliefert wird der um 8 Bits nach rechts verschobene Wert X. Das Verhalten für die gesamte Zahl ist übrigens recht gut, die Abfrage einzelner Bits im Sinne einer verminderten Zufälligkeit jedoch nicht ratsam.
Ergebnis: Die Funktion liefert als Ergebnis eine 24-Bit-Zufallszahl.
Verfügbar: Alle TOS Versionen.
Gruppe: Spezialbefehle
Querverweis: Binding

4.18.7.1 Bindings für Random

C: #include

int32_t Random( void );
Assembler:
move.w    #17,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #2,sp        ; Stack korrigieren

4.18.8 Ssbrk

Name: »set memory break point« - Speicherplatz reservieren.
Xbiosnummer: 1
Deklaration: void *Ssbrk( int16_t count );
Beschreibung: Die XBIOS-Routine Ssbrk reserviert Speicherplatz. Die Anzahl der Bytes muß dabei in count übergeben werden. Diese Funktion muß vor der Initialisierung des GEMDOS aufgerufen werden, und sollte daher in Anwenderprogrammen nicht verwendet werden. In allen Atari-ROM-Versionen ist diese Funktion lediglich als Dummy-Routine implementiert.
Ergebnis: Die Funktion liefert die Anfangsadresse des allozierten Speicherbereiches zurück.
Verfügbar: Alle TOS Versionen.
Gruppe: Spezialbefehle
Querverweis: Binding

4.18.8.1 Bindings für Ssbrk

C: #include

void *Ssbrk( int16_t count );
Assembler:
move.w    count,-(sp)  ; Offset 2
move.w    #1,-(sp)     ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #4,sp        ; Stack korrigieren

4.18.9 Supexec

Name: »supervisor execute« - führt Routine im Supervisor-Modus aus.
Xbiosnummer: 38
Deklaration: int32_t Supexec( int32_t (*func)( ) );
Beschreibung: Die XBIOS-Routine Supexec führt die Routine unter func im Supervisor-Modus aus.
Ergebnis: Die Funktion liefert den Return-Wert der aufgerufenen Funktion zurück.
Verfügbar: Alle TOS Versionen.
Gruppe: Spezialbefehle
Querverweis: Binding   Super

4.18.9.1 Bindings für Supexec

C: #include

int32_t Supexec( int32_t (*func)( ) );
Assembler:
pea       func         ; Offset 2
move.w    #38,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #6,sp        ; Stack korrigieren

4.18.10 Trapper

Name: »Trapper« - Hook into system functions.
Xbiosnummer: 555
Deklaration: int32_t xbios( 555, int16_t layer, int16_t install, int16_t opcode, void *function );
Beschreibung: Mit Hilfe von Trapper können sich andere Programme effektiv und einfach vor und hinter Systemaufrufe hängen, diese sogar ganz ersetzen, oder dem System neue Systemaufrufe hinzufügen.

Bei Trapper handelt sich es um ein externes Programm! Zu finden auf: http://www.mani.de/

Mehr Information in der dortigen Anleitung.
Ergebnis:
Gruppe: Spezialbefehle
Verfügbar: Die Funktion ist nur auf Computern vorhanden bei denen das Programm Trapper installiert ist.
Querverweis: Binding

4.18.10.1 Bindings für Trapper

C: #include

int32_t xbios( 555, int16_t layer, int16_t install, int16_t opcode, void *function );
Assembler:
pea (a2)                  ; TOS does not save A2 in traps
move.l    function,-(sp)  ; Offset 8
move.w    opcode,-(sp)    ; Offset 6
move.w    install,-(sp)   ; Offset 4
move.w    layer,-(sp)     ; Offset 2
move.w    #555,-(sp)      ; Offset 0
trap      #14             ; XBIOS aufrufen
lea       12(sp),sp       ; Stack korrigieren
move.l    (sp)+,a2        ; restore A2

4.18.11 WdgCtrl

Name: »WdgCtrl« - Einstellen des Hardware-Watchdog
Xbiosnummer: 161
Binding: int32_t WdgCtrl ( int16_t OpCode );
Beschreibung: Diese Funktion de- oder aktiviert den Hardware-Watchdog.

Parameter wert
OpCode 0x0000 - return 0 to check that WdgCtrl is present
  0x1234 - enable watchdog
  0xdead - disable watchdog
  0x4242 - re-trigger watchdog


Hinweis: Die Funktion ist für die Hardware des Milans 2.1. Die Version gibt es allerdings nur als Spezialversion und ist nicht frei verfügbar.
Ergebnis:
E_OK (0) - OK
EUNDEV (-15) - Watchdog nicht vorhanden
EBADRQ (-5) - OpCode nicht implementiert
Verfügbar: Die Funktion ist ab dem MilanTOS mit dem Datum 2002-06-09 vorhanden.
Gruppe: Spezialbefehle
Querverweis: Binding

4.18.11.1 Bindings für WdgCtrl

C: int32_t WdgCtrl ( int16_t OpCode );
Assembler:
pea (a2)                  ; TOS does not save A2 in traps
move.w    OpCode,-(sp)    ; Offset 2
move.w    #161,-(sp)      ; Offset 0
trap      #14             ; XBIOS aufrufen
lea       4(sp),sp        ; Stack korrigieren
move.l    (sp)+,a2        ; restore A2

HomeXBIOSSoundroutinenTastaturfunktionen