• 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
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:
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:
Alle weiteren Bits sind reserviert. | ||||||||||||||||
Verfügbar: | Offiziell ist diese Funktion erst ab TOS-Version 1.02
vorhanden.
| ||||||||||||||||
Gruppe: | Spezialbefehle
| ||||||||||||||||
Querverweis: | Binding
|
C: | #include <tos.h>
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 |
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
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
|
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 |
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.
| ||||||||||
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
|
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 |
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. Wenn msg_num den Wert DB_NULLSTRING (0xF000) hat, wird der String bis zur abschließenden 0 ausgegeben. 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
|
C: | #include <tos.h>
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 lea 10(sp),sp ; Stack korrigieren |
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.
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
|
C: | #include <tos.h>
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 |
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 und besitzt verschiedene Unterfunktionen. Zum Aufruf muss zusätzlich der Wert 'AnKr' übergeben werden. Bei einer falschen Funktionsnummer wird EINVFN zurückgeliefert. int32_t Puntaes ( 'AnKr', subfn, ... )
|
Ergebnis: | Die Funktion liefert kein Ergebnis.
|
Verfügbar: | Alle TOS Versionen.
|
Gruppe: | Spezialbefehle
|
Querverweis: | Binding Cookie Funktionen
|
C: | #include <tos.h>
void Puntaes( void ); |
Assembler: |
move.w #39,-(sp) ; Offset 0 trap #14 ; XBIOS aufrufen addq.l #2,sp ; Stack korrigieren |
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
|
C: | #include <tos.h>
int32_t Random( void ); |
Assembler: |
move.w #17,-(sp) ; Offset 0 trap #14 ; XBIOS aufrufen addq.l #2,sp ; Stack korrigieren |
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
|
C: | #include <tos.h>
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 |
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
|
C: | #include <tos.h>
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 |
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! 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
|
C: | #include <tos.h>
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 |
Name: | »WdgCtrl« - Einstellen des Hardware-Watchdog
| ||||||||||
Xbiosnummer: | 161
| ||||||||||
Binding: | int32_t WdgCtrl ( int16_t OpCode );
| ||||||||||
Beschreibung: | Diese Funktion de- oder aktiviert den Hardware-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: |
| ||||||||||
Verfügbar: | Die Funktion ist ab dem MilanTOS mit dem Datum 2002-06-09
vorhanden.
| ||||||||||
Gruppe: | Spezialbefehle
| ||||||||||
Querverweis: | Binding
|
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 |