home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Computer Club Elmshorn Atari PD
/
CCE_PD.iso
/
mac
/
0700
/
CCE_0708.ZIP
/
CCE_0708.PD
/
GFAHILFE
/
PRG_TIPS.TXT
< prev
next >
Wrap
Text File
|
1993-01-31
|
10KB
|
205 lines
WIE man 'Auflösungs-Unabhängig' programmiert
--------------------------------------------
Diese Ratschläge beziehen sich nicht nur auf den OVERSCAN-Modus sondern
auf ALLE Großbildschirme, Graphikkarten und den ATARI TT. Wenn man sie
beim Programmieren berherzigt, sollte das eigene Programm auf allen
Konfigurationen und unter allen möglichen und zukünftigen Auflösungen
laufen.
Die speziellen Xbios-Funktionen für den Bildschirm (Logbase/Physbase/
Getrez/Setscreen/Setcolor/Setpallete) sind nur für den ATARI-Monitor
vorgesehen und nicht für Graphikkarten anderer Hersteller, deswegen muß
man auf sie verzichten und mit den reichlichen Möglichkeiten arbeiten,
die das AES und VDI bieten.
1) AES
------
Breite/Höhe
-----------
Bekommt man durch die Funktion
'wind_get(0,WORK_XYWH,&x,&y,&breite,&hoehe)' mitgeteilt.
Form_Dial
---------
Man muß die richtigen BildschirmGrenzen angeben, damit der Desktop
korrekt restauriert werden kann. Viele Programmierer haben hier leider
die festen Werte 640/400 ingesetzt, was ein korrektes Laufen des
Programms auf dem Großbildschirm verhindert.
Fenster
-------
Nicht nur auf minimale Größe testen, sondern auch auf die maximal
vorgesehene Größe. Wenn man z.B. ein DEGAS-Bild in einem Fenster
darstellen will, kann man das Fenster auf einem Großbildschirm oder
unter OVERSCAN größer machen kann als das eigentliche Bild.
Icons
-----
In der ResourceDatei werden die Icons im StandartFormat abgelegt,
das dem Format des MonoChrom-Bildschirms entspricht. Bei anderen
Auflösungen/Graphikkarten wird aber im geräteabhängigem Format
gearbeitet. Man muß daher alle IconMasken/IconDatas und BitImages
mit der Funktion 'trans_gimage' ins geräteabhängige Format überführen.
Diese Funktion ist der ArtikelSerie ProGEM entnommen. Da das im
ST-Magazin 10/89 auf Seite 60 abgedruckte Listing doch nicht unter
TurboC zu kompilieren war, liefere ich eine richtige Version als
AES_IMG.C gleich mit.
Eigener Desktop
---------------
Die Größe des RootObjektes muß an die BildschirmGröße angepaßt
werden. Außerdem sollte man die Objekte des eigenen Desktops an die
Ränder des Bildschirms verschieben, da sie sonst mitten auf dem
Bildschirm liegen (siehe WordPlus 2.xx FunktionsTastenLeiste).
2) VDI
------
Breite/Höhe
-----------
Bekommt man beim 'v_opnvwk'-Aufruf in WorkOut[0]/WorkOut[1] geliefert.
Anzahl der Bildebenen
---------------------
Bekommt man beim 'vq_extnd'-Aufruf in WorkOut[4] geliefert.
Clipping
--------
Man sollte seine Ausgaben auf die richtigen BildschirmWerte klippen und
nicht auf 640/400.
Verschieben/Kopieren von BildschirmSpeicher
-------------------------------------------
Dazu gibt es die Funktion 'vro_cpyfm'. GEM benutzt automatisch die
aktuellen BildschirmWerte, wenn man im MFDB bei der Komponente
fd_addr einen NullPointer einträgt.
Man sollte NICHT versuchen die Struktur selber auszufüllen, da z.B.
unter OVERSCAN die Breite in Bytes nicht gleich der Breite in Pixeln/8
ist !
2.BildschirmSpeicher/BildschirmPuffer
-------------------------------------
Man errechnet die Größe aus Bildebenen * Höhe * Breite/16 und reserviert
diesen Speicher mit Malloc. Man trägt nun diese Werte in einen MFDB ein,
in den MFDB ein und schon kann man mit 'vro_cpyfm' zwischen den
beiden Bildschirmen kopieren. Es ist also unter OVERSCAN nicht notwendig
die FüllBytes des rechten Randes mit anzulegen, die unterschiedliche
Breite in Bytes wird vom VDI korrekt behandelt.
Farben
------
Die Anzahl der gleichzeitig verfügbaren Farben bekommt man beim
'v_opnvwk'-Aufruf in WorkOut[13] mitgeteilt.
Man darf die Farben NICHT mit den XBios-Funktionen Setcolor/Setpallette
setzen, sondern mit der Funktion 'vs_color', die von allen GraphikKarten
unterstützt wird.
3) XBIOS
--------
Wie im ersten Absatz schon geschrieben, muß man auf diese Funktionen
verzichten, wenn man korrekte GEM-Programme schreiben will. Hier noch
ein paar Erläuterungen, warum dieses so ist.
Logbase/Physbase
----------------
Unter OVERSCAN sind Logbase und Physbase nicht identisch, es existiert ein
Offset, der zur FeinPositionierung des Bildschirms benutzt wird.
Auch beim MATRIX-Bildschirm hat Physbase einen falschen Wert, nämlich die
AnfangsAddresse des ATARI-Bildschirms und nicht des MATRIX-Bildschirms.
Wenn man in den BildschirmSpeicher schreiben will muß man sich dessen
AnfangsAddresse mit Logbase holen.
Setscreen
---------
Das Verlegen der BildschirmAddressen wird von den meisten GraphikKarten/
Großbildschirmen NICHT unterstützt !
Sauber geschrieben Programme fragen nach dem Setscreen-Aufruf mit Logbase
/Physbase ab, ob es geklappt hat.
Ein 2. BildschirmSpeicher wird wie bei VDI-beschrieben angelegt und dann
über den OrginalBildschirm kopiert. (Aber nicht mit einer eigenen Routine
wie bei TurboC 1.1, unter OVERSCAN geht das nämlich schief, sondern mit
der garnichtmal langsamen 'vro_cpyfm'-Funktion des VDI !)
Über den Wechsel der Auflösung bei der MAXXON- oder MATRIX-Color- Karte
ist noch nicht bekannt.
Unter OVERSCAN existieren unterschiedliche Offsets in den verschiedenen
Auflösungen, deswegen ist ein Wechsel der Auflösung, sowie ein Verlegen
der BildschirmAddressen nicht erlaubt.
Für ZeichenProgramme, die den OVERSCAN-Modus voll ausnutzen wollen, gibt
es aber spezielle neue Xbios-Aufrufe, doch dazu später...
Getrez
------
Die zurückgelieferten Werte beschränken sich nicht mehr auf 0-2 !
Es gibt z.B. auf dem TT noch weitere Auflösungen und auch die MATRIX-Color
Karte liefert eine neue Werte.
Ein Programm darf NICHT mehr von diesen Werte abhängen, sondern muß die
Breite/Höhe/Bildschirmebenen mit den Auskunftsfunktionen des AES oder
VDI abfragen.
Setcolor/Setpallete
-------------------
Werden auf den neuen ColorKarten nicht unterstützt. Die BildschirmFarben
sind mit der VDI-Funktion 'vs_color' zu setzen und abzufragen.
4) ASSEMBLER-ROUTINEN
---------------------
Wenn man nicht auf schnellere AssemblerRoutinen verzichten will, muß man
folgende Ratschläge beachten :
Zuerst sollte man die aktuellen Werte des Bildschirms mit den VDI-
Funktionen abfragen. Wenn nun eine Anzahl von BildschirmEbenen vorliegt,
mit der die eigene Routine nicht zurechtkommt, benutzt man eben die
normalen VDI-Funktionen !
Am wichtigsten ist es, die AusgabeRoutine so zu schreiben, daß sie mit
einer unterschiedlichen Anzahl von Bytes zurechtkommt. Man kann sich dabei
ja auch auf günstige Werte wie, teilbar durch 32,16,8 oder so, beschränken
und in den Fällen, wo es wieder mal nicht klappt, die orginal VDI-
Funktionen benutzen.
Wo bekommt man nun die Anzahl der Bytes pro Zeile her ? Normalerweise ist
Bytes pro Zeile gleich der Anzahl in Pixel*FarbEbenen/8, leider gilt dieses
NICHT mehr im OVERSCAN-Modus, wo rechts noch FüllBytes im StrahlenRücklauf
liegen.
Man erfährt die Bytes pro Zeile am Besten aus der negativen LineA-Variablen
BYTES_LIN (Offset -$2). Laut Julian Reschke (ProfiBuch) sollen die LineA-
Funktionen irgendwann verschwinden. Noch gibt es meines Wissens keine
GraphikKarte bei der LineA nicht unterstützt wird.
Besonderheiten am OVERSCAN-Modus
--------------------------------
Es gibt eine Unterschied zwischen Physbase, der Addresse, ab der der
Shifter den Bildschirmspeicher ausliest, und Logbase, der Addresse der
linken oberen Ecke des sichtbaren Bildschirms. Unter OVERSCAN beginnt
der Shifter schon im Bildrücklauf Werte aus dem Speicher zu Lesen, weil das
Steuersignal modifiziert wurde. Damit der eigentliche Bildaufbau nicht auch
schon im Rücklauf beginnt wurde dieser Offset eingeführt.
Der Offset und der Vorlauf des VideoSignals sind für jede Auflösung
unterschiedlich und daher ist die Funktion Setscreen normalerweise
verboten.
Wenn man aber z.B. ein ZeichenProgramm extra an den OVERSCAN-Modus
anpassen will, so gibt es einen Ausweg. Es gibt neue XbiosFunktionen
mit denen man die Offsets, Bytes pro Zeile und die BildschirmSpeicherLänge
für jede Auslösung erfahren kann. Außerdem kann man die Funktion Setscreen
wieder einschalten. Näheres dazu in der HeaderDatei OVERSCAN.H die
mit im OVERSC17.ARC entahlten ist.
FAZIT
-----
Um 'AuflösungsUnabhängig' zu programmieren muß man nichts weiter tun, als
sich an das zu halten, was allen Programmierern mit den ProgrammBeispiel
DOODLE gezeigt wurde, man muß die AES- und VDI-Funktionen nur richtig
benutzen und nicht auf den rechnerspezifischen XbiosFunktionen beharren.
Selbst einer Portierung auf PC-GEM steht dann nichts mehr im Wege (außer
den FAR-Pointern , ächtz).
Ich hoffe diese kleine Abhandlung hat Euch auf die Sprünge geholfen....
Mit besten Wünschen und Hoffnung auf bessere Programme
___
__|___|__
! o o !
\ ^ / __ __ __ .
kar \ - / /_ / /_ /| /
\_/ __/ / /__ / |/ Isakovic
P.S. Ich bin auf folgender Weise zu erreichen :
Karsten Isakovic
WilmersdorferStr 82
1000 Berlin 12
oder in den MailBoxen
---------------------
PARROT Berlin 030/724467
login visitor visitor
write mail sten
MAUS Münster 0251/80386
unter meinem Namen