initial commit

This commit is contained in:
root
2023-06-12 09:14:09 +02:00
commit b4912f303e
2545 changed files with 209350 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
VDI-Enhancer V1.00
==================
VDI-Enhancer extends the ATARI VDI with new VDI functions for managing
off-screen bitmaps and with the function vq_scrninfo().
In addition it replaces on Falcons in High-color mode (or True- color as
it is called by ATARI :-) the non-working function v_get_pixel().
Installation:
=============
To install Enhancer, you have to copy it into your AUTO folder. If you
use SPDOGDOS, Enhancer must be physically after SPDOGDOS.
Note:
=====
Enhancer shouldn't be used with NVDI because the provided functions
already exists in NVDI 2.5 and older NVDI versions do not support
monochrome bitmaps when working with color modes.

View File

@@ -0,0 +1,89 @@
VDI-Enhancer V1.00
==================
Der Enhancer erweitert das ATARI-VDI um die neuen VDI-Funktionen zur
Verwaltung von Off-Screen-Bitmaps und um die Funktion vq_scrninfo().
Au<41>erdem hat der Enhancer den angenehmen Effekt, die auf Falcons im
High-Color-Modus (bzw. True-Color, wie ATARI es zu nennen pflegt :-),
nicht funktionierende Funktion v_get_pixel() zu ersetzen.
Installation:
=============
Um den Enhancer zu installieren, m<>ssen Sie ihn nur in den AUTO-Ordner
kopieren. Er mu<6D>, falls SPDOGDOS vorhanden ist, im AUTO-Ordner
physikalisch dahinter liegen.
Hinweise:
=========
Der Enhancer sollte nicht mit NVDI zusammen benutzt werden, da die von
ihm bereitgestellten Funktionen in NVDI 2.5 schon existieren und in
<20>lteren NVDI-Versionen keine monochromen Bitmaps im Farbbetrieb
unterst<73>tzt werden.
Beschreibung:
=============
Der VDI-Enhancer erweitert in der jetzigen Form das ATARI-VDI oder dazu
kompatible Bildschirmtreiber um die Funktionen v_opnbm() (OPEN BITMAP)
und v_clsbm() (CLOSE BITMAP) zum Verwalten und Bearbeiten von
Off-Screen-Bitmaps.
Mittels dieser beiden Funktionen ist es m<>glich, Off-Screen-Bitmaps im
ger<65>teabh<62>ngigen Format mit der Farbtiefe der jeweiligen Aufl<66>sung und
beliebiger Breite und H<>he zu bearbeiten. Dadurch kann man VDI-Ausgaben
auf einem Hintergrundschirm vornehmen und anschlie<69>end dessen Inhalt
ohne Benutzung von vr_trnfm() auf den sichtbaren Bildschirm kopieren.
Bei einigen Anwendungen f<>r Off-Screen-Bitmaps ist Farbe nicht
notwendig, bzw. verbraucht unn<6E>tig viel Speicher. Daher kann man auch in
Farbaufl<66>sungen mit v_opnbm() monochrome Bitmaps anlegen.
Au<41>erdem bietet der Enhancer durch die Funktion vq_scrninfo()
Informationen <20>ber das ger<65>teabh<62>ngige Bildschirmformat. Diese Funktion
d<>rfte f<>r alle, die z.B. Farbbilder sichern, hilfreich sein.
Cookies und XBRA-Kennung:
=========================
Der Enhancer installiert ebenso wie NVDI einen Cookie mit der Kennung
'EdDI'. Das auf diese Kennung folgende Langwort ist die Adresse eines
Funktionsdispatchers, der mit der Funktionsnummer in Register d0
aufgerufen wird. Der Aufruf erfolgt nach den Pure C-Konventionen
(Register d0-d2/a0-a1 und der Stack werden zur Parameter<65>bergabe
benutzt).
Bisher existiert nur die Funktion 0, die als Funktionsresultat eine
Versionsnummer zur<75>ckliefert, anhand er man auf die unterst<73>tzten
Funktionen schlie<69>en kann.
Ab Version 1.00 ($100 wird zur<75>ckgeliefert) sind die Funktionen
v_opnbm(), v_clsbm() und vq_scrninfo() vorhanden.
Weitergabe des Enhancers und Copyright:
=======================================
Die Weitergabe des VDI-Enhancers ist unter der Bedingung, da<64> dieser
Text zusammen mit der Enhancer-Dokumentation mitgegeben wird,
grunds<64>tzlich erlaubt. Der Vertrieb des Enhancers im Zusammenhang mit
anderen Software-Produkten ist erlaubt, sofern dem Kunden dadurch keine
zus<75>tzlichen Kosten entstehen und der empfohlene Verkaufspreis dieser
Software 50 DM nicht <20>bersteigt.
Auch dabei mu<6D> dieser Text mitgeliefert werden. Der Verkauf des
VDI-Enhancers ist verboten. Er darf in PD-Sammlungen nur angeboten
werden, wenn der Diskettenpreis unter 10 DM pro Diskette liegt.
Ein Vertrieb <20>ber CHANNEL VIDEODAT oder <20>hnliche kommerzielle Systeme
ist untersagt.
** Ausnahmen bed<65>rfen einer schriftlichen Genehmigung der Autoren! **
Das Copyright verbleibt allein bei den Autoren, Sven & Wilfried Behne
E-Mail: Wilfried Behne @H
Fehlermeldungen und Verbesserungsvorschl<68>ge k<>nnen an diese Adresse
geschickt werden.
Ausschlu<EFBFBD> der Haftung:
======================
Die Haftung f<>r unmittelbare und mittelbare Sch<63>den, Folgesch<63>den und
Drittsch<63>den durch die Benutzung des VDI-Enhancers ist ausgeschlossen.

View File

@@ -0,0 +1,359 @@
Neue Funktionen in NVDI 2.50
============================
Nachfolgend werden in dieser Datei die neuen Funktionen aufgef<65>hrt, die
NVDI f<>r Bildschirmausgaben anbietet.
1. Off-Screen Bitmaps
=====================
F<>r viele Anwendungen ist es sehr n<>tzlich, wenn Zeichenfunktionen nicht
direkt auf den Bildschirm, sondern auf einen nicht sichtbaren Bildschirm
angewendet werden k<>nnen. Einen derartigen "versteckten" Bildschirm
nennt man Off-Screen-Bitmap.
Zur Erzeugung von Off-Screen-Bitmaps dient die Funktion OPEN BITMAP.
Man kann ihr entweder die Gr<47><72>e eines Bitmap angeben, die Sie allozieren
soll, oder ihr eine Bitmap <20>bergeben. Die Bitmap wird im gleichen Format
wie die des Bildschirms verwaltet, wodurch schnelles Kopieren zwischen
beiden m<>glich ist.
Die Funktion CLOSE BITMAP schlie<69>t eine mit OPEN BITMAP erzeugte Bitmap
und gibt gegebenenfalls deren Speicher zur<75>ck.
OPEN BITMAP (VDI 100, 1)
void v_opnbm( WORD *work_in, MFDB *bitmap, WORD *handle, WORD *work_out )
{
pb[1] = work_in;
pb[3] = work_out;
pb[4] = work_out + 45;
contrl[0] = 100;
contrl[1] = 0;
contrl[3] = 20;
contrl[5] = 1;
*(MFDB *)&contrl[7] = bitmap;
vdi();
*handle = contrl[6];
pb[1] = intin;
pb[3] = intout;
pb[4] = ptsout;
}
Best<73>ckung der VDI-Arrays:
Feldelement | Belegung
------------------|-------------------------------------------
contrl[0] | 100 Funktionsnummer f<>r v_opnbm()
contrl[1] | 0 Anzahl der Eintr<74>ge in ptsin
contrl[2] | 6 Anzahl der Eintr<74>ge in ptsout
contrl[3] | 20 Anzahl der Eintr<74>ge in intin
contrl[4] | 45 Anzahl der Eintr<74>ge in intout
contrl[5] | 1 Unterfunktionsnummer f<>r v_opnbm()
contrl[6] | handle
contrl[7..8] | bitmap Zeiger auf einen MFDB der Bitmap
|
intin[0..19] | work_in[0..19]
|
intout[0..44] | work_out[0..44]
|
ptsout[0..11] | work_out[45..56]
handle: graf_handle()
work_in[0..10]: wie bei v_opnwk()/v_opnvwk() definiert
work_in[0]: Getrez() + 2
work_in[11]: Breite -1 (z.B. 1279)
work_in[12]: H<>he -1 (z.B. 959)
work_in[13]: Breite eines Pixels in Mikrometern
work_in[14]: H<>he eines Pixels in Mikrometern
work_in[15..19]: reserviert, sollte 0 enthalten
Achtung: Der Eintrag work_in[11] sollte bei Addition von 1 ohne Rest
durch 16 teilbar sein. Andernfalls rundet der VDI-Treiber
auf den n<>chsth<74>heren ohne Rest teilbaren Wert.
Hinweis: Wird f<>r Pixelbreite und -H<>he 0 angegeben, so werden die
Werte des Bildschirms benutzt.
work_out[0..1]: wie bei v_opnwk()/v_opnvwk() definiert
work_out[2]: 0
work_out[3..38]: wie bei v_opnwk()/v_opnvwk() definiert
work_out[39] 0 (keine Hardware-Palette vorhanden, da Bitmap)
work_out[39..56]: wie beiv_opnwk()/v_opnvwk() definiert
bitmap: Zeiger auf einen MFDB
Falls bitmap->fd_addr gleich NULL ist, so wird anhand der Gr<47><72>en-
angaben in work_in Speicher f<>r die Bitmap angefordert (die Bitmap
wird im Gegensatz zu v_opnvwk() gel<65>scht).
Um eine Bitmap im ger<65>tespezifischen Format zu <20>ffnen, mu<6D>
bitmap->fd_nplanes eine Null oder die Ebenenanzahl des Schirms
enthalten (work_out[4] bei vq_extnd()). Ist bitmap->fd_nplanes 1,
wird eine monochrome Bitmap angelegt.
Die Eintr<74>ge des MFDB (fd_addr, fd_w, fd_h, fd_wdwidth, fd_stand,
fd_nplanes) werden vom VDI-Treiber gesetzt und an die aufrufende
Applikation zur<75>ckgegeben. Wenn nicht nicht gen<65>gend Speicher
vorhanden ist, wird der Inhalt des MFDBs nicht ver<65>ndert; ein
Null-Handle wird zur<75>ckgegeben.
Wenn bitmap->fd_addr ungleich NULL ist, wird dieser Eintrag als
Zeiger auf eine Bitmap interpretiert. Wenn die Bitmap im
Standardformat vorliegt, wird sie ins ger<65>tespezifische Format
umgewandelt. Liegt sie schon im ger<65>tespezifischen Format vor, so
wird sie nicht umgewandelt. Falls die Aufl<66>sung der Bitmap (d.h.
die Anzahl der Farben und Planes) nicht unterst<73>tzt wird, gibt
v_opnbm() ein Null-Handle zur<75>ck.
CLOSE BITMAP (VDI 101, 1)
void v_clsbm( WORD handle )
{
contrl[0] = 101;
contrl[1] = 0;
contrl[3] = 0;
contrl[5] = 1;
contrl[6] = handle;
vdi();
}
Best<73>ckung der VDI-Arrays:
Feldelement | Belegung
------------------|-------------------------------------------
contrl[0] | 101 Funktionsnummer f<>r v_clsbm()
contrl[1] | 0 Anzahl der Eintr<74>ge in ptsin
contrl[2] | 0 Anzahl der Eintr<74>ge in ptsout
contrl[3] | 0 Anzahl der Eintr<74>ge in intin
contrl[4] | 0 Anzahl der Eintr<74>ge in intout
contrl[5] | 1 Unterfunktionsnummer f<>r v_clsbm()
contrl[6] | handle
Die Funktion v_clsbm() schlie<69>t die mit handle bezeichnete Bitmap.
Wenn der Speicher beim v_opnbm() vom VDI alloziert wurde, gibt sie
diesen Speicher wieder frei.
Rasteroperationen bei Off-Screen-Bitmaps:
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rasteroperationen zwischen Bildschirm und Off-Screen-Bitmap sollten
grunds<64>tzlich im ger<65>tespezifischen Format erfolgen.
Wenn als Ziel einer Rasteroperation eine Off-Screen-Bitmap mit ihrem
MFDB angegeben wird und wenn das zu dieser Bitmap geh<65>rende Handle
benutzt wird, so wird beim Blitten anhand der <20>ber vs_clip() auf dieser
Workstation eingestellten Koordinaten geclippt. F<>r das Kopieren eines
Rasters vom Bildschirm in eine Off-Screen-Bitmap sollte man also das
VDI-Handle dieser Bitmap benutzen.
Ist die Bitmap dagegen Quelle und der Bildschirm Ziel, so sollte man das
Handle der Bildschirm-Workstaion benutzen, da dann das Raster anhand der
Bildschirm-Koordinaten abgeclippt wird.
Wenn man das von v_opnbm() zur<75>ckgelieferte Handle einer Bitmap benutzt
und in fd_addr in einem MFDB 0 enth<74>lt, so werden die Daten der Bitmap
statt dessen benutzt.
ESCAPES
-------
Die VDI-Escape-Funktionen (VT52) k<>nnen nicht auf einer Bitmap benutzt
werden. Ihr Aufruf wid ignoriert.
vs_color()/vq_color()
---------------------
Wenn die Funktion vs_color() mit dem Handle einer Off-Screen-Bitmap
aufgerufen wird, werden die Farben nur dann gesetzt, wenn es sich um
High- oder True-Color handelt. Vq_color() ist ebenfalls nur in High-
oder True-Color sinnvoll - andernfalls ist der Parameter valid -1.
vst_point()
-----------
Die Funktion vst_point() und alle anderen Funktionen, die Texth<74>hen in
Punkten einstellen, reagieren bisher nur dann sinnvoll, wenn die Bitmap
die Ausma<6D>e des Bildschirms hat.
v_show_c()/v_hide_c()
---------------------
Beide Funktionen werden ignoriert, falls sie mit dem Handle einer
Off-Screen-Bitmap aufgerufen werden. Sie beziehen sich nur auf den
Bildschirm und sollten nur vom AES aufgerufen werden.
2. vq_scrninfo()
=================
Genauere Angaben <20>ber das Bildschirmformat liefert die Funktion INQUIRE
SCREEN INFORMATION implementiert. Im workout-Array wird angeben, wie das
ger<65>tespezifische Format aufgebaut ist.
Diese Informationen sind in erster Linie interessant f<>r Programme, die
- schnell Raster aufbauen (auch in TrueColor) und diese mit vro_cpyfm()
auf den Schirm kopieren m<>chten.
- Raster speichern (z.B. XIMGs).
- Raster anzeigen.
VQ_SCRNINFO( 102, 1 )
void vq_scrninfo( WORD handle, WORD *work_out )
{
pb[3] = work_out;
intin[0] = 2;
contrl[0] = 102;
contrl[1] = 0;
contrl[3] = 1;
contrl[5] = 1;
contrl[6] = handle;
vdi();
pb[3] = intout;
}
Best<73>ckung der VDI-Arrays:
Feldelement | Belegung
------------------|-------------------------------------------
contrl[0] | 102 Funktionsnummer von vq_scrninfo()
contrl[1] | 0 Anzahl der Eintr<74>ge in ptsin
contrl[2] | 0 Anzahl der Eintr<74>ge in ptsout
contrl[3] | 1 Anzahl der Eintr<74>ge in intin
contrl[4] | 272 Anzahl der Eintr<74>ge in intout
contrl[5] | 1 Unterfunktionsnummer von vq_scrninfo()
contrl[6] | handle
|
intin[0] | 2 erweiterte Informationen ausgeben
|
intout[0..272] | work_out[0..272]
intout[0]: Formatangabe:
0: Interleaved Planes, wortweise (ATARI Grafik)
1: Standardformat (komplette Planes)
2: Packed Pixels
-1: unbekanntes Format; nicht direkt beschreibbar
intout[1]: Verf<72>gbarkeit einer CLUT:
0: keine CLUT (z.B. TTM 194)
1: Hardware-CLUT
2: Software-CLUT (HiColor oder TrueColor)
intout[2]: Anzahl der Ebenen (Bits) pro Pixel
intout[3/4]:Farbanzahl oder 0L (mehr als 2*10^31 Farben)
intout[8]: Anzahl der Bits f<>r die Rot-Intensit<69>t
intout[9]: Anzahl der Bits f<>r die Gr<47>n-Intensit<69>t
intout[10]: Anzahl der Bits f<>r die Blau-Intensit<69>t
intout[11]: Anzahl der Bits f<>r den Alpha-Channel oder <20>hnliches
intout[12]: Anzahl der Bits f<>r Genlock
intout[13]: Anzahl der nicht benutzen Bits
Falls eine Hardware-CLUT (intout[1] == 1) vorhanden ist:
intout[16-271]: Pixelwert des zugeh<65>rigen VDI-Farbindexes
Falls HiColor, TrueColor oder <20>hnliches vorhanden ist:
intout[16..31]: Zuordnung von Bitnummer im Pixel zum Bit der Rotintensit<69>t
intout[32..47]: Zuordnung von Bitnummer im Pixel zum Bit der Gr<47>nintens.
intout[48..63]: Zuordnung von Bitnummer im Pixel zum Bit der Blauintensit<69>t
intout[64..79]: Zuordnung der Bitnummer f<>r Alpha-Channel
intout[80..95]: Zuordnung der Bitnummer f<>r Genlock
intout[96..127]: unbenutzte Bits
intout[128..271]: reserviert (0)
Beispiele:
----------
In 256 Farben auf dem Falcon w<>rden folgende Ausgaben erfolgen:
intout | Wert | Bedeutung
---------|--------|-----------------------------------------------------
0 | 0 | Interleaved Planes, wortweise
1 | 1 | Hardware-CLUT vorhanden
2 | 8 | 8 Bit pro Pixel
3/4 | 256 | 256 verschiedene Farben gleichzeitig m<>glich
8 | 6 | 6 Bits f<>r die Rot-Intensit<69>t
9 | 6 | 6 Bits f<>r die Gr<47>n-Intensit<69>t
10 | 6 | 6 Bits f<>r die Blau-Intensit<69>t
11 | 0 | kein Bit f<>r Alpha-Channel
12 | 0 | kein Bit f<>r Genlock
13 | 0 | kein unbenutzes Bit
| |
| |
16 | 0 | Pixelwert f<>r VDI-Farbindex 0
17 | 255 | Pixelwert f<>r VDI-Farbindex 1
18 | 2 | Pixelwert f<>r VDI-Farbindex 2
... | ... |
271 | 15 | Pixelwert f<>r VDI-Farbindex 255
In HiColor auf dem Falcon w<>rden folgende Ausgaben erfolgen:
intout | Wert | Bedeutung
---------|--------|-----------------------------------------------------
0 | 2 | Packed Pixels
1 | 2 | HiColor bzw. TrueColor
2 | 16 | 16 Bit pro Pixel
3/4 | 32768 | 32768 verschiedene Farben gleichzeitig m<>glich
8 | 5 | 5 Bits f<>r die Rot-Intensit<69>t
9 | 5 | 5 Bits f<>r die Gr<47>n-Intensit<69>t
10 | 5 | 5 Bits f<>r die Blau-Intensit<69>t
11 | 0 | kein Bit f<>r Alpha-Channel
12 | 1 | ein Bit f<>r Genlock
13 | 0 | kein unbenutzes Bit
| |
| |
16 | 11 | Bit 0 der Rot-Intensit<69>t (niederwertigstes Bit)
| | befindet sich in Bit 11 des Pixels
17 | 12 | Bit 1 befindet sich in Bit 12 des Pixels
18 | 13 | ...
19 | 14 | ...
20 | 15 | Bit 4 der Rot-Intensit<69>t (h<>chstwertigstes Bit)
| | befindet sich in Bit 15 des Pixels
21..31 | -1 | Bits werden nicht f<>r Rot-Intensit<69>t benutzt
| |
| |
32 | 6 | Bit 0 der Gr<47>n-Intensit<69>t (niederwertigstes Bit)
| | befindet sich in Bit 6 des Pixels
33 | 7 | Bit 1 befindet sich in Bit 7 des Pixels
34 | 8 | ...
35 | 9 | ...
36 | 10 | Bit 4 der Gr<47>n-Intensit<69>t (h<>chstwertigstes Bit)
| | befindet sich in Bit 10 des Pixels
37..37 | -1 | Bits werden nicht f<>r Gr<47>n-Intensit<69>t benutzt
| |
| |
48 | 0 | Bit 0 der Blau-Intensit<69>t (niederwertigstes Bit)
| | befindet sich in Bit 0 des Pixels
49 | 1 | Bit 1 befindet sich in Bit 1 des Pixels
50 | 2 | ...
51 | 3 | ...
52 | 4 | Bit 4 der Blau-Intensit<69>t (h<>chstwertigstes Bit)
| | befindet sich in Bit 4 des Pixels
53..63 | -1 | Bits werden nicht f<>r Blau-Intensit<69>t benutzt
| |
| |
64..79 | -1 | kein Alpha-Channel
| |
| |
80 | 5 | Bit f<>r Genlock
81..95 | -1 | nicht f<>r Genlock benutzt
| |
| |
96..127| -1 | keine unbenutzten Bits
| |
| |
3. Wie erkennt man, ob die neuen Funktionen vorhanden sind?
===========================================================
NVDI installiert (ebenso wie der nur f<>rs ATARI-VDI gedachte Enhancer)
einen Cookie mit der Kennung 'EdDI'. Das auf diese Kennung folgende
Langwort ist die Adresse eines Funktionsdispatchers, der mit der
Funktionsnummer in Register d0 aufgerufen wird. Der Aufruf erfolgt nach
den Pure C-Konventionen (Register d0-d2/a0-a1 und der Stack werden zur
Parameter<65>bergabe benutzt).
Bisher existiert nur die Funktion 0, die als Funktionsresultat eine
Versionsnummer zur<75>ckliefert, anhand er man auf die unterst<73>tzten
Funktionen schlie<69>en kann.
Ab Version 1.00 ($100 wird zur<75>ckgeliefert) sind die Funktionen
v_opnbm(), v_clsbm() und vq_scrninfo() vorhanden.