HomeXBIOSxbios-TrapCENTScreen-XBIOS-Erweiterung

4.5 Bildschirmfunktionen

Cursconf Cursordarstellung ändern oder ermitteln.
EgetPalette Farbtabelle lesen.
EgetShift Shift Mode Register lesen.
EsetBank Farbtabelle setzen.
EsetColor Farbtabelleneintrag setzen.
EsetGray Farbinterpretation setzen.
EsetPalette Farbtabelle laden.
EsetShift Shift Mode Register setzen.
EsetSmear Farbverwischung setzen.
Getrez Auflösung ermitteln.
Initmouse Mauszeiger initialisieren.
Logbase Adresse des logischen Bildschirmspeichers ermitteln.
mon_type Monitortyp ermitteln.
Physbase Adresse des physikal. Bildschirmspeichers ermitteln.
Setcolor Farbe einstellen.
Setpalette Farbpalette auswählen.
Setscreen Festlegen der Bildschirmauflösung und -adressen.
VgetRGB RGB-Wert einer Farbe ermitteln.
VSetscreen Festlegen der Bildschirmauflösung und -adressen
VgetSize Größe des Bildschirmpuffers ermitteln.
VsetMask Transparenz für True-Color setzen.
Vsetmode Videohardwareregister setzen.
VsetRGB RGB-Wert einer Farbe setzen.
VsetSync Synchronisationsart setzen.
Vsync Vertikales Synchronisationssignal abfragen.

4.5.1 Cursconf

Name: »cursor configuration« - legt die Arbeitsweise des Cursors fest.
Xbiosnummer: 21
Deklaration: int16_t Cursconf( int16_t func, int16_t rate );
Beschreibung: Die XBIOS-Routine Cursconf verändert das Aussehen und wahlweise die Blinkgeschwindigkeit des Cursors. Der Parameter func kann folgende Werte annehmen:
func Bedeutung
   
 0 Cursor abschalten
 1 Cursor einschalten
 2 Cursor blinkt
 3 Cursor blinkt nicht
 4 Die Blinkgeschwindigkeit des Cursors wird auf den Wert rate gesetzt.
 5 Liefert die aktuelle Blinkfrequenz


Hinweis: Der Parameter rate soll in Schritten der Wiederholfrequenz des Bildschirms verwendet werden.
Ergebnis: Die Funktion liefert nur dann ein definiertes Ergebnis, nämlich die Blinkfrequenz, wenn im Parameter func die Zahl 5 übergeben wurde.
Verfügbar: Alle TOS Versionen
Gruppe: Bildschirmfunktionen
Querverweis: Binding

4.5.1.1 Bindings für Cursconf

C: #include

int16_t Cursconf( int16_t func, int16_t rate );
Assembler:
move.w    rate,-(sp)   ; Offset 4
move.w    func,-(sp)   ; Offset 2
move.w    #21,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #6,sp        ; Stack korrigieren

4.5.2 EgetPalette

Name: »Get look up table registers« - Liest mehrere Einträge aus der Farbtabelle.
Xbiosnummer: 85
Deklaration: void EgetPalette( int16_t colorNum, int16_t count, int16_t *palettePtr );
Beschreibung: Die XBIOS-Routine EgetPalette liest einen zusammenhängenden Bereich aus den TT-Farbregistern aus.
Parameter Bedeutung
   
colorNum erstes auszulesendes Farbregister
count Anzahl der auszulesenden Farbregister
palettePtr Zeiger auf zu übertragende Farbpalette (dieser muß gerade sein).
Ergebnis: Die Funktion liefert kein Ergebnis zurück.
Verfügbar: Die Funktion steht nur im TOS des Atari-TT zur Verfügung.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   EsetPalette

4.5.2.1 Bindings für EgetPalette

C: #include

void EgetPalette( int16_t colorNum, int16_t count, int16_t *palettePtr );
Assembler:
pea       palettePtr      ; Offset 6
move.w    count,-(sp)     ; Offset 4
move.w    colorNum,-(sp)  ; Offset 2
move.w    #85,-(sp)       ; Offset 0
trap      #14             ; XBIOS aufrufen
lea       $A(sp),sp       ; Stack korrigieren

4.5.3 EgetShift

Name: »Get current shift mode value« - Liest das Shift Mode Register.
Xbiosnummer: 81
Deklaration: int16_t EgetShift( void );
Beschreibung: Die XBIOS-Routine EgetShift liest das Shift Mode Register aus und liefert den Inhalt des Registers als Ergebnis zurück.
Ergebnis: Die Funktion liefert den Wert des Registers gemäß folgender Belegung:

Bit Bedeutung
0..3 Nummer der Farbregister-Bank
8..10 Modus, gemäß Getrez
12 Hyper-Mono (vgl. EsetGray)
15 Smear-Modus (vgl. EsetSmear)
Verfügbar: Die Funktion steht nur im TOS des Atari-TT zur Verfügung.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   EsetShift

4.5.3.1 Bindings für EgetShift

C: #include

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

4.5.4 EsetBank

Name: »Set color look up bank« - Setzt Bank für Farbtabelle.
Xbiosnummer: 82
Deklaration: int16_t EsetBank( int16_t bankNum );
Beschreibung: Die XBIOS-Routine EsetBank setzt die Banknummer für die Farbtabelle des TT auf den Wert bankNum. Der erlaubte Wert von bankNum liegt zwischen 0 und 15. Ist bankNum negativ, wird die aktuelle Einstellung nicht verändert.
Ergebnis: Die Funktion liefert die vorherige Einstellung.
Verfügbar: Die Funktion steht nur im TOS des Atari-TT zur Verfügung.
Gruppe: Bildschirmfunktionen
Querverweis: Binding

4.5.4.1 Bindings für EsetBank

C: #include

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

4.5.5 EsetColor

Name: »Set color entry« - Schreibt einen Eintrag in die Farbtabelle.
Xbiosnummer: 83
Deklaration: int16_t EsetColor( int16_t colorNum, int16_t color );
Beschreibung: Die XBIOS-Routine EsetColor setzt den Farbeintrag colorNum (0..255) in der Farbtabelle auf den Wert color; ein negativer Wert verändert den Eintag nicht.
Ergebnis: Die Funktion liefert die vorherige Einstellung.
Verfügbar: Die Funktion steht nur im TOS des Atari-TT zur Verfügung.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   Setcolor

4.5.5.1 Bindings für EsetColor

C: #include

int16_t EsetColor( int16_t colorNum, int16_t color );
Assembler:
move.w    color,-(sp)     ; Offset 4
move.w    colorNum,-(sp)  ; Offset 2
move.w    #83,-(sp)       ; Offset 0
trap      #14             ; XBIOS aufrufen
addq.l    #6,sp           ; Stack korrigieren

4.5.6 EsetGray

Name: »Set/clear gray mode« - Schaltet die Farbinterpretation ein bzw. aus.
Xbiosnummer: 86
Deklaration: int16_t EsetGray( int16_t switch );
Beschreibung: Die XBIOS-Routine EsetGray schaltet die Farbinterpretation in der Farbtabelle als Graustufe ein (1) bzw. aus (0). Ein negativer Wert verändert die Einstellung nicht.

Im Graustufen-Modus kann anstelle von 4096 Farbtönen aus einer Palette von 256 Graustufen gewählt werden.
Ergebnis: Die Funktion liefert die bisherige Einstellung.
Verfügbar: Die Funktion steht nur im TOS des Atari-TT zur Verfügung (when the high word of the '_VDO' cookie has the value of 2).
Gruppe: Bildschirmfunktionen
Querverweis: Binding

4.5.6.1 Bindings für EsetGray

C: #include

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

4.5.7 EsetPalette

Name: »Set palette registers« - Setzt mehrere Einträge in der Farbtabelle.
Xbiosnummer: 84
Deklaration: void EsetPalette( int16_t colorNum, int16_t count, int16_t *palettePtr );
Beschreibung: Die XBIOS-Routine EsetPalette setzt count Farbeinträge ab colorNum in der Farbtabelle auf die Werte im Array palettePtr.
Ergebnis: Die Funktion hat kein Ergebnis.
Verfügbar: Die Funktion steht nur im TOS des Atari-TT zur Verfügung.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   EgetPalette

4.5.7.1 Bindings für EsetPalette

C: #include

void EsetPalette( int16_t colorNum, int16_t count, int16_t *palettePtr );
Assembler:
pea       palettePtr      ; Offset 6
move.w    count,-(sp)     ; Offset 4
move.w    colorNum,-(sp)  ; Offset 2
move.w    #84,-(sp)       ; Offset 0
trap      #14             ; XBIOS aufrufen
lea       $A(sp),sp       ; Stack korrigieren

4.5.8 EsetShift

Name: »Set shift mode register« - Setzt das Shift Mode Register.
Xbiosnummer: 80
Deklaration: int16_t EsetShift( int16_t shftMode );
Beschreibung: Die XBIOS-Routine EsetShift schreibt in das Shift Mode Register des TT den Wert shftMode. shftMode ist ein Bitfeld mit folgender Bedeutung:

Bit Bedeutung
0..3 Nummer der Farbregister-Bank
8..10 Modus, gemäß Getrez
12 Hyper-Mono (vgl. EsetGray)
15 Smear-Modus (vgl. EsetSmear)
Ergebnis: Die Funktion liefert den vorherigen Wert des Registers.
Verfügbar: Die Funktion steht nur im TOS des Atari-TT zur Verfügung.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   EgetShift

4.5.8.1 Bindings für EsetShift

C: #include

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

4.5.9 EsetSmear

Name: »Set/clear video smear mode« - Schaltet die Farbverwischung ein bzw. aus.
Xbiosnummer: 87
Deklaration: int16_t EsetSmear( int16_t switch );
Beschreibung: Die XBIOS-Routine EsetSmear erlaubt die Umschaltung des Smear-Modus des TT-Videobausteins. Im Smear-Modus wird anstelle der Hintergrundfarbe (Farbe 0) die jeweils zuletzt dargestellte Farbe gezeichnet. Es gilt:

switch Bedeutung
<0 bisherigen Wert abfragen
0 Smear-Modus aus
>0 Smear-Modus ein
Ergebnis: Die Funktion liefert die bisherige Einstellung.
Verfügbar: Die Funktion steht nur im TOS des Atari-TT zur Verfügung.
Gruppe: Bildschirmfunktionen
Querverweis: Binding

4.5.9.1 Bindings für EsetSmear

C: #include

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

4.5.10 Getrez

Name: »get resolution« - ermittelt die Auflösung des Bildschirms.
Xbiosnummer: 4
Deklaration: int16_t Getrez( void );
Beschreibung: Die XBIOS-Routine Getrez ermittelt die Auflösung des Bildschirms.
Ergebnis: Die Funktion liefert als Ergebnis folgende Werte:

Werte Bedeutung
0  320*200 (vier Planes)
1  640*200 (zwei Planes)
2  640*400 (ein Plane)
4  640*480 (vier Planes, nur TT)
6 1280*960 (ein Plane, nur TT)
7  320*480 (acht Planes, nur TT)


Alle anderen Werte sind für zukünftige Erweiterungen reserviert.

Hinweis: Vom Standpunkt der sauberen Programmierung betrachtet, sollte diese Funktion auf keinen Fall benutzt werden. Insbesondere beim Einsatz von Grafikkarten hat sie praktisch keinen Aussagewert. Stattdessen sollte die Auflösung des Bildschirms über das VDI (v_opnvwk) ermittelt werden.
Verfügbar: Alle TOS Versionen
Gruppe: Bildschirmfunktionen
Querverweis: Binding   v_opnvwk

4.5.10.1 Bindings für Getrez

C: #include
#include

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

4.5.11 Initmouse

Name: »initialize mouse« - initialisiert die Maus.
Xbiosnummer: 0
Deklaration: void Initmouse( int16_t type, MOUSE *par, void (*mousevec)() );
Beschreibung: Initmouse ist eine XBIOS-Routine zur Low-Level-Initialisierung der Maus. Der Parameter type legt die Betriebsart der Maus fest. Es gilt:

type Bedeutung
0 Maus abschalten
1 Maus einschalten, Relativ-Modus
2 Maus einschalten, Absolut-Modus
3 reserviert
4 Maus einschalten, Tastaturemulation


Die Bytes von 4 bis 11 des Parameters par werden nur dann verwendet, wenn die Maus im Absolut-Modus arbeiten soll. Unter mousevec erhält man die Adresse des Interrupt-Vektors der Maus.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Alle TOS Versionen
Gruppe: Bildschirmfunktionen
Querverweis: Binding   MOUSE

4.5.11.1 Bindings für Initmouse

C: #include

void Initmouse( int16_t type, MOUSE *par, void (*mousevec)() );
Assembler:
pea       mousevec     ; Offset 8
pea       par          ; Offset 4
move.w    type,-(sp)   ; Offset 2
move.w    #0,-(sp)     ; Offset 0
trap      #14          ; XBIOS aufrufen
lea       12(sp),sp    ; Stack korrigieren

4.5.12 Logbase

Name: »logical screen RAM base« - ermittelt die logische Anfangsadresse des Videospeichers.
Xbiosnummer: 3
Deklaration: void *Logbase( void );
Beschreibung: Die XBIOS-Routine Logbase ermittelt die logische Anfangsadresse des momentan als Videospeicher verwendeten RAM-Bereichs.
Ergebnis: Die Funktion liefert als Ergebnis die Anfangsadresse des logischen Bildschirmspeichers.
Verfügbar: Alle TOS Versionen
Gruppe: Bildschirmfunktionen
Querverweis: Binding   Physbase   Setscreen

4.5.12.1 Bindings für Logbase

C: #include

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

4.5.13 mon_type

Name: »mon_type« - Typ des Monitors ermitteln
Xbiosnummer: 89
Deklaration: int16_t mon_type( void );
Beschreibung: Die XBIOS-Funktion mon_type ermittelt den angeschlossenen Monitortyp anhand von Pin 18(M1) und 19(M0) des Video-Ports. Ein 0-Bit bedeutet Masse am entsprechenden Pin, 1-Bit bedeutet keine Verbindung.
Ergebnis: Die Funktion liefert den angeschlossenen Monitortyp zurück. Dabei gilt:

Wert Bedeutung Pin
0 ST-Monochrommonitor M1:0 M0:0
1 ST-Farbmonitor M1:0 M0:1
2 VGA-Monitor M1:1 M0:0
3 TV-Gerät M1:1 M0:1
4 LCD  
5 DVI  


Die Werte vier und fünf sind nur verfügbar mit dem ct60 und Radeon Treiber.
Verfügbar: Die Funktion ist nur auf Computern der Falcon-Serie verfügbar.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   VsetSync   Vsetmode   VgetSize   VgetRGB   VsetRGB   VsetMask

4.5.13.1 Bindings für mon_type

C: #include

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

4.5.14 Physbase

Name: »physical screen ram base« - ermittelt die Anfangsadresse des Video-Speichers.
Xbiosnummer: 2
Deklaration: void *Physbase( void );
Beschreibung: Die XBIOS-Routine Physbase ermittelt die physikalische Anfangsadresse des momentan als Videospeicher verwendeten RAM-Bereichs.
Ergebnis: Die Funktion Physbase liefert als Ergebnis die Adresse des physikalischen Bildschirmspeichers.
Verfügbar: Alle TOS Versionen
Gruppe: Bildschirmfunktionen
Querverweis: Binding   Logbase   Setscreen

4.5.14.1 Bindings für Physbase

C: #include

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

4.5.15 Setcolor

Name: »Setcolor« - legt eine von 16 Farben fest.
Xbiosnummer: 7
Deklaration: int16_t Setcolor( int16_t colornum, int16_t color );
Beschreibung: Die XBIOS-Routine Setcolor erfragt den Wert eines Farbregisters bzw. setzt dieses auf einen neuen Wert. Es gilt:

Parameter Bedeutung
colornum neuer Farbwert (-1 = nicht ändern)
color Nummer des Farbregisters (0..15)
Ergebnis: Die Funktion liefert den bisherigen Wert des Farbregisters.
Verfügbar: Alle TOS Versionen
Gruppe: Bildschirmfunktionen
Querverweis: Binding   Setpalette

4.5.15.1 Bindings für Setcolor

C: #include

int16_t Setcolor( int16_t colornum, int16_t color );
Assembler:
move.w    color,-(sp)    ; Offset 4
move.w    colornum,-(sp) ; Offset 2
move.w    #7,-(sp)       ; Offset 0
trap      #14            ; XBIOS aufrufen
addq.l    #6,sp          ; Stack korrigieren

4.5.16 Setpalette

Name: »set palette« - wählt 16 Farben aus.
Xbiosnummer: 6
Deklaration: void Setpalette( void *pallptr );
Beschreibung: Die XBIOS-Routine Setpalette erlaubt es, eine neue Farbpalette an die Videohardware zu übergeben.

Der Parameter pallptr zeigt auf eine Tabelle von sechzehn 16-Bit Worten, die die neue Palette enthalten. Die untersten 12-Bits werden dabei für die RGB-Werte benutzt. pallptr muß auf eine gerade Adresse zeigen.

Da die Daten von der Funktion nicht sofort verarbeitet werden, muß dafür gesorgt werden, daß der Zeiger pallptr selbst im nächsten Vertical Blank noch auf etwas sinnvolles zeigt.

Hinweis: Es sollte besser auf die entsprechenden Funktionen des VDI zurückgegriffen werden.
Ergebnis: Die Funktion liefert keinen Wert.
Verfügbar: Alle TOS Versionen
Gruppe: Bildschirmfunktionen
Querverweis: Binding

4.5.16.1 Bindings für Setpalette

C: #include

void Setpalette( void *pallptr );
Assembler:
pea       pallptr      ; Offset 2
move.w    #6,-(sp)     ; Offset 0
trap      #14          ; XBIOS aufrufen
addq.l    #6,sp        ; Stack korrigieren

4.5.17 Setscreen

Name: »set screen« - initialisiert den Bildschirm.
Xbiosnummer: 5
Deklaration: void Setscreen( void *laddr, void *paddr, int16_t rez );
Beschreibung: Die XBIOS-Routine Setscreen dient dazu, Auflösung und Bildschirmspeicheradressen zu verändern. Es gilt:

Parameter Bedeutung
laddr Adresse des log. Bildschirmspeichers
paddr Adresse des phys. Bildschirmspeichers
rez 0 = ST-Niedrig
    1 = ST-Mittel
    2 = ST-Hoch


Ein Wert von -1 bedeutet in diesem Zusammenhang, daß die entsprechende Adresse bzw. Auflösung nicht verändert wird.

Hinweis: Es sollte stets kontrolliert werden, ob eventuelle Veränderungen wirklich erfolgreich ausgeführt werden konnten. Bei einer Änderung der Auflösung wird automatisch der VT-52 Emulator initialisiert.

Unter bestimmten Umständen gibt es eine erweiterte Version dieser Funktion (VSetscreen).
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Alle TOS Versionen
Gruppe: Bildschirmfunktionen
Querverweis: Binding   Physbase   Logbase   Getrez

4.5.17.1 Bindings für Setscreen

C: #include

void Setscreen( void *laddr, void *paddr, int16_t rez );
Assembler:
move.w    rez,-(sp)    ; Offset 10
move.l    paddr,-(sp)  ; Offset  6
move.l    laddr,-(sp)  ; Offset  2
move.w    #5,-(sp)     ; Offset  0
trap      #14          ; XBIOS aufrufen
lea       $C(sp),sp    ; Stack korrigieren

4.5.18 Setscreen, Milan

Name: »set screen« - initialisiert den Bildschirm.
Xbiosnummer: 5
Deklaration: void Setscreen( void *par1, void *par2, int16_t rez, int16_t command );
Beschreibung: Diese XBIOS-Routine entspricht der Funktion Setscreen allerdings mit einem zusätzlichen Parameter und dient dazu, Auflösung und Bildschirmspeicheradressen zu verändern.

Parameter Bedeutung
par1 Je nach Funktion, s.u.
par2 Je nach Funktion, s.u.
rez immer 0x4D49 (MI_MAGIC)
command Kommando


Folgende Werte sind für command definiert:
CMD_GETMODE (0) Getting current mode

int32_t mode;
Setscreen(-1,&mode,MI_MAGIC,CMD_GETMODE);
CMD_SETMODE (1) Set new graphic mode

int32_t mode=0x1023 /* 800*608*16 */
Setscreen(-1,mode,MI_MAGIC,CMD_SETMODE)

BIOS and VDI will be initialised. Not the AES.
CMD_GETINFO (2) Get screen info structure for mode
SCREENINFO si;
si.size = sizeof(SCREENINFO); /* Structure size has to be set         */
si.devID =0x1022;             /* ID of the mode or 0 for current mode */
si.scrFlags=0;                /* status of the operation              */
Setscreen(-1,&si,MI_MAGIC,CMD_GETINFO);
if(si.scrFlags & SCRINFO_OK)
  puts("OK");
else
  puts("Error");
CMD_ALLOCPAGE (3) Allocate 2nd screenpage
int32_t adr=0;          /* Frame address or -1 */
Setscreen(-1,mode,MI_MAGIC,CMD_ALLOCPAGE);
if(adr)
  puts("OK");
else
  puts("Error");


This only allocates one page. A further call will only return the frame address.
CMD_FREEPAGE (4) Release 2nd screenpage

Setscreen(-1,-1,MI_MAGIC,CMD_FREEPAGE)

The graphics card memory will be released again. If the second page had still been active the call will switch back to the first page with Logbase and Physbase set.
CMD_FLIPPAGE (5) Switch to 2nd screenpage

Setscreen(-1,-1,MI_MAGIC,CMD_FLIPPAGE)

Will switch to the second screenpage. Logbase and Physbase will be set.
CMD_ALLOCMEM (6) Allocate memory on the graphics card
SCRMEMBLK blk;

blk.size=sizeof(SCRMEMBLK);
blk.blk_y=200;     /* alloc a block of 200 lines*/

Setscreen(-1,&blk,MI_MAGIC,CMD_ALLOCMEM);
if(blk.blk_start)
  puts("OK");
else
  puts("Out of memory");


The width of the block is currently always the width of the virtual screen. For the hardware functions this block will be like a screen (0,0,blk_w,blk_h), the coordinates start in the top left corner (0,0). It will be internally recalculated.
CMD_FREEMEM (7) Release graphics card memory

Setscreen(-1,&blk,MI_MAGIC,CMD_FREEMEM)
blk of the block to be released.
CMD_SETADR (8) Set screen to fixed address
int32_t logbase=blk.blk_start;   /* logical address or -1  */
int32_t physbase=blk.blk_start;  /* physical address or -1 */

Setscreen(logbase,physbase,MI_MAGIC,CMD_SETADR);
CMD_ENUMMODES (9) Requests all available modes, since 13.01.2000
int32_t cdecl enumfunc(SCREENINFO *inf,int32_t flag)
{
  printf("%s\n",inf->name);
  return ENUMMODE_CONT;
}

Setscreen(-1,&enumfunc,MI_MAGIC,CMD_ENUMMODES);


The function "enumfunc" will be called once for every available mode. ENUMMODE_EXIT (0) will cancel CMD_ENUMMODES. ENUMMODE_CONT (1) will continue. The parameters are handed over to the stack using the C standard.
Ergebnis: Return value undefined.
Verfügbar: Die Funktion ist ab dem MilanTOS 4.08 verfügbar.
Gruppe: Bildschirmfunktionen
Querverweis: Setscreen   VSetscreen   Setscreen, ct60

4.5.19 Setscreen, ct60

Name: »set screen« - initialisiert den Bildschirm.
Xbiosnummer: 5
Deklaration: void Setscreen( void *par1, void *par2, int16_t rez, int16_t command );
Beschreibung: Diese XBIOS-Routine entspricht der Funktion Setscreen allerdings mit einem zusätzlichen Parameter und dient dazu, Auflösung und Bildschirmspeicheradressen zu verändern.

Parameter Bedeutung
par1 Je nach Funktion, s.u.
par2 Je nach Funktion, s.u.
rez immer 0x564E ('VN' für Vsetscreen New)
command Kommando


Folgende Werte sind für command definiert:
CMD_GETMODE (0) Getting current mode

int32_t mode;
Setscreen(-1,&mode,0x564E,CMD_GETMODE); This function is identical to Vsetmode(-1);
CMD_SETMODE (1) Set new graphic mode

int32_t mode=0x1023 /* 800*608*16 */
Setscreen(-1,mode,0x564E,CMD_SETMODE)

This function is identical to Vsetscreen(0,0,3,modecode);
BIOS and VDI will be initialised. Not the AES.
CMD_GETINFO (2) Get screen info structure for mode
SCREENINFO si;
si.size = sizeof(SCREENINFO); /* Structure size has to be set         */
si.devID =0x1022;             /* ID of the mode or 0 for current mode */
si.scrFlags=0;                /* status of the operation              */
Setscreen(-1,&si,0x564E,CMD_GETINFO);
if(si.scrFlags & SCRINFO_OK)
  puts("OK");
else
  puts("Error");
CMD_ALLOCPAGE (3) Allocate screenpage
int32_t adr=0;          /* Frame address or -1 */
Setscreen(-1,mode,0x564E,CMD_ALLOCPAGE);
if(adr)
  puts("OK");
else
  puts("Error");


This only allocates one page. A further call will only return the frame address.
CMD_FREEPAGE (4) Release screenpage

Setscreen(-1,-1,0x564E,CMD_FREEPAGE)

The graphics card memory will be released again. If the second page had still been active the call will switch back to the first page with Logbase and Physbase set.
CMD_FLIPPAGE (5) Switch to screenpage

Setscreen(-1,-1,0x564E,CMD_FLIPPAGE)

Will switch to the second screenpage. Logbase and Physbase will be set.
CMD_ALLOCMEM (6) Allocate memory on the graphics card
SCRMEMBLK blk;

blk.size=sizeof(SCRMEMBLK);
blk.blk_y=200;     /* alloc a block of 200 lines*/

Setscreen(-1,&blk,0x564E,CMD_ALLOCMEM);
if(blk.blk_start)
  puts("OK");
else
  puts("Out of memory");


The width of the block is currently always the width of the virtual screen. For the hardware functions this block will be like a screen (0,0,blk_w,blk_h), the coordinates start in the top left corner (0,0). It will be internally recalculated.
CMD_FREEMEM (7) Release graphics card memory

Setscreen(-1,&blk,0x564E,CMD_FREEMEM)
blk of the block to be released.
CMD_SETADR (8) Set screen to fixed address
int32_t logbase=blk.blk_start;   /* logical address or -1  */
int32_t physbase=blk.blk_start;  /* physical address or -1 */

Setscreen(logbase,physbase,0x564E,CMD_SETADR);
CMD_ENUMMODES (9) Requests all available modes
int32_t cdecl enumfunc(SCREENINFO *inf,int32_t flag)
{
  printf("%s\n",inf->name);
  return ENUMMODE_CONT;
}

Setscreen(-1,&enumfunc,0x564E,CMD_ENUMMODES);


The function "enumfunc" will be called once for every available mode. ENUMMODE_EXIT (0) will cancel CMD_ENUMMODES. ENUMMODE_CONT (1) will continue. The parameters are handed over to the stack using the C standard.
CMD_TESTMODE (10) Test a graphic mode
int32_t modecode=VESA_600+HORFLAG2+VGA+COL80+BPS32; /* 800*600*16M */
Setscreen(-1,modecode,0x564E,CMD_TESTMODE);


Only the BIOS is initialised, and a screen test arrives with colored wide lines.

This function not exist inside the MilanTOS.
CMD_COPYPAGE (11) Copy screenpage
Vsetscreen(-1,0,0x564E,CMD_COPYPAGE);
Copy first screenpage to second screenpage
Vsetscreen(-1,1,0x564E,CMD_COPYPAGE);
Copy second screenpage to first screenpage


This function not exist inside the MilanTOS.
CMD_FILLMEM (12) Fill memory on the graphics card
SCRFILLMEMBLK blk;
blk.size=sizeof(SCRFILLMEMBLK);
blk.blk_op = BLK_COPY;
blk.blk_color = 0x112233;  /* background fill color */

Vsetscreen(-1,&blk,0x564E,CMD_SETMEM);
if(blk.blk_status == BLK_OK)
  puts("OK");


Fill a block with a color with the GPU at (blk_x, blk_y), size is blk_w, blk_h.
Note that this structure has the same size and same entry the the structure SCRMEMBLK for the entry for size, blk_status, blk_x, blk_y, blk_y, blk_w and blk_h for use the allocated structure with a cast.

This function exists since the version 0x0101 of the video XBIOS and is not inside the MilanTOS.
CMD_COPYMEM (13) Copy memory on the graphics card
SCRCOPYMEMBLK blk;
blk.size=sizeof(SCRCOPYMEMBLK);

Vsetscreen(-1,&blk,0x564E,CMD_COPYMEM);
if(blk.blk_status == BLK_OK)
  puts("OK");


Copy a block with the GPU at (blk_src_x, blk_src_y) to (blk_dst_x, blk_dst_y), size is blk_w, blk_h.
Note that this structure has the same size and same entry the the structure SCRMEMBLK for the entry for size, blk_status, blk_x, blk_y, blk_y, blk_w and blk_h for use the allocated structure with a cast when blk_x is blk_dst_x and blk_y is blk_dst_y.

This function exists since the version 0x0101 of the video XBIOS and is not inside the MilanTOS.
CMD_TEXTUREMEM (14) Put texture in memory on the graphics card
SCRTEXTUREMEMBLK blk;
blk.size=sizeof(SCRTEXTUREMEMBLK);

Vsetscreen(-1,&blk,0x564E,CMD_TEXTUREMEM);
if(blk.blk_status == BLK_OK)
  puts("OK");


Copy a 65K texture from CPU local area to a 65K screen or an ARGB texture to a 32M screen pixel format multiple times (best results are with little source texture and big screen for destination).

This function need a texture support inside the TOS.
This function exists since the version 0x0101 of the video XBIOS and is not inside the MilanTOS.
CMD_GETVERSION (15)
/* if the function is not implemented, 0x0100 is the first release */
long version = 0x0100;
Vsetscreen(-1,&version,0x564E,CMD_GETVERSION);


Return the version of the video XBIOS.

This function exists since the version 0x0101 of the video XBIOS and is not inside the MilanTOS.
CMD_LINEMEM (16) Draw line on the graphics card
SCRLINEMEMBLK blk;
blk.size=sizeof(SCRLINEMEMBLK);
blk.blk_fbcolor = 0x112233;  /* foreground fill color */
blk.blk_bgcolor = 0;  /* background fill color */
blk.blk_pattern = 0xffffffff;  /* solid line */

Vsetscreen(-1,&blk,0x564E,CMD_LINEMEM);
if(blk.blk_status == BLK_OK)
  puts("OK");


Draw a line with colors with the GPU at (blk_x1, blk_y1) to (blk_x2, blk_y2).

This function exists since the version 0x0101 of the video XBIOS and is not inside the MilanTOS.
CMD_CLIPMEM (17) Set clipping rectangle on the graphic card
SCRCLIPMEMBLK blk;
blk.size=sizeof(SCRCLIPMEMBLK);
blk.blk_clip_on = 1; /* clipping flag 1:on,
                                      0:off */

Vsetscreen(-1,&blk,0x564E,CMD_CLIPMEM);
if(blk.blk_status == BLK_OK)
  puts("OK");


Enable or diable clipping rectange at (blk_x, blk_y), size is blk_w, blk_h.

This function exists since the version 0x0101 of the video XBIOS and is not inside the MilanTOS.
CMD_SYNCMEM (18) Wait an empty GPU fifo for sync the drawing engine with the memory.
Vsetscreen(-1,-1,0x564E,CMD_SYNCMEM);


This function exists since the version 0x0101 of the video XBIOS and is not inside the MilanTOS.
CMD_BLANK (19) Blank / unblank screen.
int32_t blank = 1; /* (0): unblank
                      (1): blank normal
                      (2): VSYNC suspend
                      (3): HSYNC suspend
                      (4): powerdown */
Vsetscreen(-1,blank,0x564E,CMD_BLANK);


This function exists since the version 0x0101 of the video XBIOS and is not inside the MilanTOS.
Ergebnis: Nothing (or current modecode in TOS mode)
Verfügbar: Only valid with internal TOS Radeon driver (PCI.HEX) for the ct60 (2007-01-24).
Gruppe: Bildschirmfunktionen
Querverweis: Setscreen   VSetscreen   Setscreen, Milan

4.5.20 VgetRGB

Name: »VgetRGB« - RGB Wert einer Farbe ermitteln
Xbiosnummer: 94
Deklaration: void VgetRGB( int16_t index, int16_t count, int32_t *array );
Beschreibung: Die XBIOS-Funktion VgetRGB ermittelt die RGB-Werte für count Farben ab dem Farbindex index. Die resultierenden Werte werden in array abgelegt.
Ergebnis: Die Funktion liefert kein Ergebnis zurück.
Verfügbar: Die Funktion ist nur auf Computern der Falcon-Serie verfügbar.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   mon_type   Vsetmode   VsetSync   VgetSize   VsetRGB   VsetMask

4.5.20.1 Bindings für VgetRGB

C: #include

void VgetRGB( int16_t index, int16_t count, int32_t *array );
Assembler:
move.l    array,-(sp)  ; Offset 6
move.w    count,-(sp)  ; Offset 4
move.w    index,-(sp)  ; Offset 2
move.w    #94,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

4.5.21 VSetscreen

Name: »set screen« - initialisiert den Bildschirm.
Xbiosnummer: 5
Deklaration: void VSetscreen( void *laddr, void *paddr, int16_t rez, int16_t mode );
Beschreibung: Die XBIOS-Routine VSetscreen entspricht der Funktion Setscreen allerdings mit einem zusätzlichen Parameter und dient dazu, Auflösung und Bildschirmspeicheradressen zu verändern. Es gilt:

Parameter Bedeutung
laddr Adresse des log. Bildschirmspeichers
paddr Adresse des phys. Bildschirmspeichers
rez 0 = ST-Niedrig
    1 = ST-Mittel
    2 = ST-Hoch
    3 = benutzte Auflösung aus mode
mode modecode (siehe Vsetmode)


Ein Wert von -1 bedeutet in diesem Zusammenhang, daß die entsprechende Adresse bzw. Auflösung nicht verändert wird.

Hinweis: Es sollte stets kontrolliert werden, ob eventuelle Veränderungen wirklich erfolgreich ausgeführt werden konnten. Bei einer Änderung der Auflösung wird automatisch der VT-52 Emulator initialisiert.

Der zusätzliche Parameter mode steht nur zur Verfügung, wenn der Cookie '_VDO' den Wert 0x00030000 oder größer hat.

Beim TOS des Milans gibt es zusätzliche Funktionen bei Setscreen, entsprechendes gilt auch für den ct60.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Die Funktion ist nur auf Computern der Falcon-Serie verfügbar.
Gruppe: Bildschirmfunktionen
Querverweis: Binding

4.5.21.1 Bindings für VSetscreen

C: #include

void VSetscreen( void *laddr, void *paddr, int16_t rez, int16_t mode );
Assembler:
move.w    mode,-(sp)   ; Offset 12
move.w    rez,-(sp)    ; Offset 10
move.l    paddr,-(sp)  ; Offset  6
move.l    laddr,-(sp)  ; Offset  2
move.w    #5,-(sp)     ; Offset  0
trap      #14          ; XBIOS aufrufen
lea       14(sp),sp    ; Stack korrigieren

4.5.22 VgetSize

Name: »VgetSize« - Größe des Bildschirmpuffers ermitteln
Xbiosnummer: 91
Deklaration: int32_t VgetSize( int16_t mode );
Beschreibung: Die XBIOS-Funktion VgetSize ermittelt die Größe des Bildschirmpuffers in Bytes für den Grafikmodus mode.
Ergebnis: Die Funktion liefert die Größe des Bildschirmpuffers in Bytes zurück.
Verfügbar: Die Funktion ist nur auf Computern der Falcon-Serie verfügbar.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   mon_type   Vsetmode   VsetSync   VgetRGB   VsetRGB   VsetMask

4.5.22.1 Bindings für VgetSize

C: #include

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

4.5.23 VsetMask

Name: »VsetMask« - Transparenz für TrueColor setzen
Xbiosnummer: 150
Deklaration: void VsetMask( int16_t ormask, int16_t andmask, int16_t overlay );
Beschreibung: Die XBIOS-Funktion VsetMask setzt Masken, die benutzt werden, um die durch die VDI-Funktion vs_color gesetzten Farben zu modifizieren. vs_color ermittelt zu seinem Parameter einen RGB-Wert. Dieser wird bitweise mit ormask verodert und mit andmask verundet. Somit können Farben im True-Color-Modus transparent erscheinen. Ist overlay ungleich Null, wird in den Overlaymodus geschalten bzw. mit Null zurück.
Ergebnis: Die Funktion liefert kein Ergebnis zurück.
Verfügbar: Die Funktion ist nur auf Computern der Falcon-Serie verfügbar.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   mon_type   Vsetmode   VsetSync   VgetSize   VgetRGB   VsetRGB

4.5.23.1 Bindings für VsetMask

C: #include

void VsetMask( int16_t ormask, int16_t andmask, int16_t overlay );
Assembler:
move.w    overlay,-(sp) ; Offset 6
move.w    andmask,-(sp) ; Offset 4
move.w    ormask,-(sp)  ; Offset 2
move.w    #150,-(sp)    ; Offset 0
trap      #14           ; XBIOS aufrufen
addq.l    #8,sp         ; Stack korrigieren

4.5.24 Vsetmode

Name: »Vsetmode« - Videohardwareregister setzen
Xbiosnummer: 88
Deklaration: int16_t Vsetmode( int16_t mode );
Beschreibung: Die XBIOS-Funktion Vsetmode programmiert das Videohardwareregister der Falcon-Computer. Die Bits des Parameters mode haben folgende Bedeutung:

Bit Bedeutung
0-2 Anzahl der Farbebenen:
  0 = 1 Ebene 2 Farben
  1 = 2 Ebenen 4 Farben
  2 = 4 Ebenen 16 Farben
  3 = 8 Ebenen 256 Farben
  4 = 16 Ebenen 65536 Farben
   
3 Gesetzt: Bildbreite mindestens 640 Pixel
  Gelöscht: Bildbreite 320 Pixel
   
4 Gesetzt: VGA-Modus
  Gelöscht: TV-Modus (auch Atari-SC-Monitore)
   
5 Gesetzt: PAL-Modus
  Gelöscht: NTSC-Modus
   
6 Gesetzt: Overscan aktiv
7 Gesetzt: ST-kompatible Grafik
8 Gesetzt: Interlace-Modus aktiv


Wird als mode VM_INQUIRE (-1) übergeben erhält man die aktuelle Auflösung, ohne das etwas verändert wird.

Hinweis: Es findet keine Überprüfung auf die Richtigkeit der Kodierung für den angeschlossenen Monitor statt.
Ergebnis: Die Funktion liefert den alten Inhalt des Videohardwareregisters zurück.
Verfügbar: Die Funktion ist nur auf Computern der Falcon-Serie verfügbar.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   mon_type   VsetSync   VgetSize VgetRGB   VsetRGB   VsetMask

4.5.24.1 Bindings für Vsetmode

C: #include

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

4.5.25 VsetRGB

Name: »VsetRGB« - RGB Wert einer Farbe setzen
Xbiosnummer: 93
Deklaration: void VsetRGB( int16_t index, int16_t count, int32_t *array );
Beschreibung: Die XBIOS-Funktion VsetRGB setzt die RGB-Werte für count Farben ab dem Farbindex index. Die Farbwerte sind in array abgelegt.
Ergebnis: Die Funktion liefert kein Ergebnis zurück.
Verfügbar: Die Funktion ist nur auf Computern der Falcon-Serie verfügbar.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   mon_type   Vsetmode   VsetSync   VgetSize   VgetRGB   VsetMask

4.5.25.1 Bindings für VsetRGB

C: #include

void VsetRGB( int16_t index, int16_t count, int32_t *array );
Assembler:
move.l    array,-(sp)  ; Offset 6
move.w    count,-(sp)  ; Offset 4
move.w    index,-(sp)  ; Offset 2
move.w    #93,-(sp)    ; Offset 0
trap      #14          ; XBIOS aufrufen
lea       $A(sp),sp    ; Stack korrigieren

4.5.26 VsetSync

Name: »VsetSync« - Art der Synchronisation setzen
Xbiosnummer: 90
Deklaration: void VsetSync( int16_t flag );
Beschreibung: Die XBIOS-Funktion VsetSync legt fest, auf welche Art eine Synchronisation erfolgen soll. Der Parameter flag wird wie folgt kodiert:

Bit Bedeutung für gesetzte Bits
0 Externer Takt
1 Vertikale Synchronisation
2 Horizontale Synchronisation
Ergebnis: Die Funktion liefert kein Ergebnis zurück.
Verfügbar: Die Funktion ist nur auf Computern der Falcon-Serie verfügbar.
Gruppe: Bildschirmfunktionen
Querverweis: Binding   mon_type   Vsetmode   VgetSize   VgetRGB   VsetRGB   VsetMask

4.5.26.1 Bindings für VsetSync

C: #include

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

4.5.27 Vsync

Name: »vertical sync« - wartet auf das nächste vertikale Sync-Signal.
Xbiosnummer: 37
Deklaration: void Vsync( void );
Beschreibung: Die XBIOS-Routine Vsync wartet auf den nächsten Bildschirm-Refresh (Vertical-Blank Interrupt). Damit ist es möglich, Bildschirmoperationen mit dem Betriebssystem synchronisieren.

Hinweis: Für zeitkritische Abfragen (Scrolling) sollte besser direkt auf den Zeilenzähler im Shifter zurückgegriffen werden.
Ergebnis: Die Funktion liefert kein Ergebnis.
Verfügbar: Alle TOS Versionen
Gruppe: Bildschirmfunktionen
Querverweis: Binding

4.5.27.1 Bindings für Vsync

C: #include

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

4.5.28 Konstanten zur Videohardware des Falcons

Zur vereinfachten Programmierung des Videohardwareregisters des Falcons mittels der Funktion Vsetmode sind in der Headerdatei tos.h die folgenden Konstanten definiert, die mit | kombiniert werden:

    #define VERTFLAG  0x0100  /* Interlace aktivieren          */
    #define STMODES   0x0080  /* ST-kompatible Grafik          */
    #define OVERSCAN  0x0040  /* Overscan aktivieren           */
    #define PAL       0x0020  /* PAL-Modus                     */
    #define FALC_VGA  0x0010  /* VGA-Modus                     */
    #define TV        0x0000  /* TV-Modus                      */

    #define COL80     0x0008  /* Bildbreite mind. 640 Pixel    */
    #define COL40     0x0000  /* Bildbreite 320 Pixel          */

    #define BPS16     4       /* 16 Farbebenen: 65536 Farben   */
    #define BPS8      3       /*  8 Farbebenen:   256 Farben   */
    #define BPS4      2       /*  4 Farbebenen:    16 Farben   */
    #define BPS2      1       /*  2 Farbebenen:     4 Farben   */
    #define BPS1      0       /*  1 Farbebenen:     2 Farben   */

Mit der folgenden Konstante kann die Anzahl der Farbebenen ausmaskiert werden:

    #define NUMCOLS   7       /* if (( mode & NUMCOLS ) == 0 ) */
                              /*   puts( "monochrome mode" );  */

HomeXBIOSxbios-TrapCENTScreen-XBIOS-Erweiterung