Projekt
Hardware
Bedienung
BASIC (1)
BASIC (2)
BASIC (3)
Interna
Beispiele
Erweiterungen
Bibliotheken
Treiber
Programme

Download:

AVR-ChipBasic2 - Treiber

V1.28 (c) 2007-2010 Jörg Wolfram



1 Vector Mode Treiber (Bibliothekscode 0xe0)


1.1 Allgemeines
Diesen Modus könnte man als eine Art "Vektormodus" oder "Differentialmodus" bezeichnen. Er entspricht dem Videomode 7 in früheren Versionen. Am oberen und unteren Bildschirmrand gibt es jeweils eine Textzeile, die sich wie die ersten beiden Zeilen im Modus 0 verhalten. Dann hört aber die Ähnlichkeit schon auf. Danach kommen 105 Byte-Zeiger, gefolgt von 105 Zeilendefinitionen a 24 Bytes. Jeder der Zeiger gibt an, welche der 105 Zeilendefinitionen für die gerade aktuelle Zeile relevant ist. Somit können alle Zeilen ihre eigene Definition oder auch alle Zeilen die gleiche Definition haben. Werte größer als 104 sollten nicht eingestellt werden, da dann das Verhalten nicht definiert ist.
Der Bildspeicher ist folgendermaßen aufgeteilt:


Anfangsadresse Endadresse Bytes Funktion
0 59 60 2 Zeilen Zeichen
60 119 60 2 Zeilen Attribute
120 224 105 105 Zeilenpointer
225 2744 2520 105 Zeilendefinitionen
2745 2759 15 ungenutzt










Die Zeilendefinitionen bestehen aus 12 Einträgen zu jeweils 2 Bytes. Das erste Byte bestimmt den Abstand zum linken Bildschirmrand wozu noch 160 addiert werden muß. Höchster Wert ist 254, so dass die horizontale Auflösung 95 Pixel beträgt. Das zweite Byte gibt die anzuzeigenden Farben an. Dabei werden im Wechsel Die Farbwerte aus dem oberen und dem unteren Nibble angezeigt. Zu beachten ist noch, dass der kleinste Abstand 160 sein muß und jeder folgende Abstandswert mindestens um 1 größer als der vorherige.

1.2 Funktionen
Um den Treiber zu aktivieren, muß nur mittels VMODE 7 in den USER-Videomode gewechselt werden. Die Ansteuerung der beiden Textzeilen am oberen und unteren Bildschirmrand erfolgt über die "normalen" BASIC Ausgabebefehle. Die Zeile am oberen Rand entspricht dabei der Textzeile 0 und die am unteren Rand der Textzeile 1.
Weiterhin stehen noch weitere Funktionen über CALL zur Verfügung:


Funktionsnummer Funktion
8 löscht den Vektor-Bereich
9 Zeilenzeiger konstant füllen
10 Zeilenzeiger aufsteigend füllen
11 Zeilenzeiger absteigend füllen
12 Zeilenzeiger mit Array-Werten füllen
13 Zeilenzeigerbereiche kopieren
14 Zeilen mit konstanten Array-Werten füllen
15 Zeilen mit aufeianderfolgenden Array-Werten füllen
16
17
18
19


1.3 Funktion 8 : Vektor-Bereich löschen
Diese Funktion löscht nur den gesamten Vektor-Bereich, wohingegen ein CLS nur den Textbereich löscht.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


1.4 Funktion 9 : Zeilenzeiger konstant füllen
Setzt die Zeilenzeiger von Parameter 1 bis Parameter 2 auf den Wert von Parameter 3. Die Werte werden dabei automatisch auf den gültigen Bereich begrenzt, ebenso findet ein Überlauf von 104 nach 0 statt.


Parameter Bedeutung
Parameter 1 Startzeile
Parameter 2 Zeilenanzahl
Parameter 3 Wert
Rückgabewert 0


1.5 Funktion 10 : Zeilenzeiger aufsteigend füllen
Setzt die Zeilenzeiger von Parameter 1 bis Parameter 2 auf den Wert von Parameter 3, welcher von Zeile zu Zeile um 1 erhöht wird. Die Werte werden dabei automatisch auf den gültigen Bereich begrenzt, ebenso findet ein Überlauf von 104 nach 0 statt.


Parameter Bedeutung
Parameter 1 Startzeile
Parameter 2 Zeilenanzahl
Parameter 3 Startwert
Rückgabewert 0


1.6 Funktion 11 : Zeilenzeiger absteigend füllen
Setzt die Zeilenzeiger von Parameter 1 bis Parameter 2 auf den Wert von Parameter 3, welcher von Zeile zu Zeile um 1 erniedrigt wird. Die Werte werden dabei automatisch auf den gültigen Bereich begrenzt, ebenso findet ein Überlauf von 104 nach 0 bei den Adressen sowie von 0 nach 104 beim Wert statt.


Parameter Bedeutung
Parameter 1 Startzeile
Parameter 2 Zeilenanzahl
Parameter 3 Startwert
Rückgabewert 0


1.7 Funktion 12 : Zeilenzeiger mit Array-Werten füllen
Kopiert die Werte der Arrayzellen ab Parameter 3 in die Zeilenzeiger ab Parameter 1, die Anzahl steht in Parameter 2. Die Werte werden dabei automatisch auf den gültigen Bereich begrenzt, ebenso findet ein Überlauf von 104 nach 0 bei den Adressen und einer von 767 nach 0 bei den Arrayzellen statt.


Parameter Bedeutung
Parameter 1 Start-Zeilenzeiger
Parameter 2 Zeilenanzahl
Parameter 3 Array-Startposition
Rückgabewert 0


1.8 Funktion 13 : Zeilenzeigerbereiche intern kopieren
Kopiert Zeilenzeiger innerhalb des Zeilenzeigerbereiches. Parameter 1 gibt den ersten Zeilenzeiger des Quellbereiches und Parameter 2 den ersten Zeilenzeiger des Zielbereiches an. Der dritte Parameter gibt die Anzahl der zu kopierenden Zeilenzeiger an, wobei bei positiven Werten der Bereich beginnend beim ersten Zeilenzeiger kopiert wird, bei negativen Werten beginnen beim letzten Zeilenzeiger des zu kopierenden Bereiches.
Die Werte werden dabei automatisch auf den gültigen Bereich begrenzt, ebenso findet ein Überlauf von 104 nach 0 (sowie auch umgekehrt) bei den Adressen statt.


Parameter Bedeutung
Parameter 1 Startzeile Quellbereich
Parameter 2 Startzeile Zielbareich
Parameter 3 Zeilenanzahl
Rückgabewert 0


1.9 Funktion 14 : Zeilen mit konstanten Array-Werten füllen
Kopiert die Werte der Arrayzellen ab Parameter 3 in die Zeilen ab Parameter 1, die Anzahl steht in Parameter 2. Je Zeile werden die selben 24 Bytes kopiert. Es findet ein Überlauf von 104 nach 0 bei den Zeilen und einer von 767 nach 0 bei den Arrayzellen statt.


Parameter Bedeutung
Parameter 1 Startzeile
Parameter 2 Zeilenanzahl
Parameter 3 Array-Startposition
Rückgabewert 0


1.10 Funktion 15 : Zeilen mit aufeinanderfolgenden Array-Werten füllen
Kopiert die Werte der Arrayzellen ab Parameter 3 in die Zeilen ab Parameter 1, die Anzahl steht in Parameter 2. Je Zeile werden 24 Bytes kopiert. Es findet ein Überlauf von 104 nach 0 bei den Zeilen und einer von 767 nach 0 bei den Arrayzellen statt.


Parameter Bedeutung
Parameter 1 Startzeile
Parameter 2 Zeilenanzahl
Parameter 3 Array-Startposition
Rückgabewert 0


2 Tile/Sprite Mode Treiber (Bibliothekscode 0xe1)


2.1 Allgemeines
Der Tile-und-Sprite Treiber ist in erster Linie zum Programmieren von Spielen gedacht. Es gibt einen Tilemap der sich sowohl in X als auch in Y-Richtung wiederholt. Von diesem Map ist ein Fenster von 16 Tiles horizontal und 13 Tiles Vertikal sichtbar, die Position dieses Fensters lässt sich pixelweise über den gesamten Bereich verschieben. Jede der 1024 Tile-Positionen enthält einen Index auf eine der 49 Tiles. Jede dieser Tiles ("Fliesen") besteht aus 8 x 8 Pixeln, von denen jedes eine der 16 darstellbaren Farben haben kann. Neben umfangreichen Tile-Manipulationsmöglichkeiten gibt es auch noch Software-Sprites die selbst aus einer Tile bestehen und sich im gesamten Tilemap pixelweise bewegen können. Am oberen und unteren Bildschirmrand gibt es jeweils noch eine Textzeile, die sich wie die ersten beiden Zeilen im Modus 0 verhalten.

Der Bildspeicher ist folgendermaßen aufgeteilt:


Anfangsadresse Endadresse Bytes Funktion
0 39 40 System
40 1063 1024 Tilemap
1064 2599 1568 49 Tiledefinitionen
2632 2691 60 2 Zeilen Zeichen
2692 2751 60 2 Zeilen Attribute
2752 2759 8 nicht benutzt


Der Tilemap hat eine Größe von 32 mal 32 Tiles und wiederholt sich sowohl in X als auch in Y-Richtung.

Jede der 49 Tiles von je 8 x 8 Pixeln wird durch 32 Bytes repräsentiert, wobei jeweils 4 Bit für ein Pixel stehen.



2.2 Systemvariablen
Die Systemvariablen liegen alle in den ersten 40 Bytes der Bildspeichers und lassen sich mit VPOKE und VPEEK() ansprechen.


Adresse Größe Funktion
0 Byte Y-Koordinate (Punkt links oben) des sichtbaren Ausschnitts
1 Byte X-Koordinate (Punkt links oben) des sichtbaren Ausschnitts
4 Word Anfangsadresse des Sprite-Bereiches im Speicher, wird durch Funktion 24 Initialisiert
6 Byte Anzahl der initialisierten Sprites, wird durch Funktion 24 Initialisiert




2.3 Die Sprite-Struktur im Array
Jedes der Sprites belegt 16 Bytes im Array


Offset Bedeutung
0 Neue Y-Koordinate
1 Neue X-Koordinate
2 Alte Y-Koordinate
3 Alte X-Koordinate
4 Sprite-Tile
5 Beginn der 4 Backup-Tiles
6 Transparenz-Farbe
7 sichtbar (0/1)
8 Sprite aktiv (0/1)
9 Kollisionsflag
10 horizontale Schrittweite
11 vertikale Schrittweite
12 Tile-Index 1 für Restore
13 Tile-Index 2 für Restore
14 Tile-Index 3 für Restore
15 Tile-Index 4 für Restore




2.4 Funktionen
Um den Treiber zu aktivieren, muß nur mittels VMODE 7 in den USER-Videomode gewechselt werden. Die Ansteuerung der beiden Textzeilen am oberen und unteren Bildschirmrand erfolgt über die "normalen" BASIC Ausgabebefehle. Die Zeile am oberen Rand entspricht dabei der Textzeile 0 und die am unteren Rand der Textzeile 1.
Weiterhin stehen noch folgende Funktionen über CALL zur Verfügung:


Funktionsnummer Funktion
8 Tile-Map mit konstantem Tile-Index füllen
9 Tile-Map mit einer Tile nach Bitmap setzen
10 Tile-Map Bereich mit konstantem Tile Index füllen
11 Einen Tile-Index im Tile-Map setzen
12 Einen Tile-Index im Tile-Map abfragen
13 Tile mit Farbe füllen
14 Vordefiniertes Muster in Tile zeichnen
15 Array-definiertes Muster in Tile zeichnen
16 Muster aus Zeichensatz in Tile zeichnen
17 Tile horizontal spiegeln
18 Tile vertikal spiegeln
19 Tile 90 Grad im Uhrzeigersinn drehen
20 Tile 90 Grad entgegen dem Uhrzeigersinn drehen
21 Tile kopieren
22 Tiles zusammenfügen
23 2 Tiles rotieren
24 Sprites initialisieren
25 Sprite definieren
26 Sprite positionieren
27 Sprite aktivieren
28 Sprite deaktivieren
29 Ein einzelnes Sprite zeichnen
30 Ein gezeichnetes Sprite löschen
31 Alle Sprites sequentiell zeichnen
32 Alle Sprites sequentiell löschen
33 Alle Sprites-Koordinaten neu berechnen
34 Alle Sprites bewegen
35
36


2.5 Funktion 8 : Tile-Map mit konstantem Tile-Index füllen
Diese Funktion setzt den gesamten Tile-Bereich auf die angegebene Tile.


Parameter Bedeutung
Parameter 1 Tile-Nummer (0...48)
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.6 Funktion 9 : Tile-Map mit einer Tile nach Bitmap setzen
Diese Funktion setzt im gesamten Tile-Bereich auf die angegebene Tile, wenn das korrespondierende Bit im Array auf "1" gesetzt ist. Der Bitmap-Bereich im Array umfasst 128 Bytes und ist wie folgt organisiert:
  • Die 32 Zeilen sind von oben nach unten organisiert
  • Jede Zeile besteht aus 4 Bytes, von links nach rechts
  • Innerhalb jedes Bytes steht Bit 7 für die am weitesten links stehende Tile

Parameter Bedeutung
Parameter 1 Bitmap-Position im Array (0...640)
Parameter 2 Tile-Nummer (0...48)
Parameter 3 ---
Rückgabewert 0


2.7 Funktion 10 : Tile-Map Bereich mit konstantem Tile Index füllen
Diese Funktion setzt den angegebenen Tile-Bereich auf die angegebene Tile. Start- und Endposition ergeben sich aus 32 * Zeile + Spalte. Dabei gibt es weder in X noch in Y Richtungen Einschränkungen, da sich der Tile-Map quasi unendlich wiederholt.


Parameter Bedeutung
Parameter 1 Startposition
Parameter 2 Endposition
Parameter 3 Tile-Nummer (0...48)
Rückgabewert 0


2.8 Funktion 11 : Einen Tile-Index im Tilemap setzen
Setzt einen Tile-Index im Tilemap auf den angegebenen Wert.


Parameter Bedeutung
Parameter 1 Y-Koordinate (0...31)
Parameter 2 X-Koordinate (0...31)
Parameter 3 Tile-Nummer (0...48)
Rückgabewert 0


2.9 Funktion 12 : Einen Tile-Index im Tilemap abfragen
Liefert den an der angegebenen Stelle befindlichen Tile-Index zurück.


Parameter Bedeutung
Parameter 1 Y-Koordinate (0...31)
Parameter 2 Y-Koordinate (0...31)
Parameter 3 ---
Rückgabewert Tile-Index


2.10 Funktion 13 : Tile mit Farbe füllen
Füllt die Tile Parameter 1 mit der Farbe Parameter 2.


Parameter Bedeutung
Parameter 1 Tile-Nummer (0...48)
Parameter 2 Farbe (0...15)
Parameter 3 ---
Rückgabewert 0


2.11 Funktion 14 : Vordefiniertes Muster in Tile zeichnen
Im Treiber sind bereits 32 verschiedene (zweifarbige) Muster definiert, die zum Erstellen von Tiles genutzt werden können. Parameter sind die Tile-Nummer, die Musternummer und ein Byte für die Festlegung der Zeichenfarbe. Dabei werden die Pixel in der Tile mit der eingestellten Farbe gesetzt, die eine "1" im Muster haben, alle anderen Pixel bleiben unverändert.


Parameter Bedeutung
Parameter 1 Tile-Nummer (0...48)
Parameter 2 Musternummer (0...31)
Parameter 3 Zeichenfarbe (0...15)
Rückgabewert 0


2.12 Funktion 15 : Array-definiertes Muster in Tile zeichnen
Es können auch Muster im Array definiert werden, um Tiles zu erstellen. Erster Parameter ist die Tile, die gefüllt werden soll. Der zweite Parameter gibt die Arrayzelle an, ab der das Muster abgelegt ist. Dieses besteht aus 8 aufeinanderfolgenden (Byte-) Zellen, bei denen Bit 7 das Pixel ganz links und Bit 0 das Pixel ganz rechts bestimmen. Der dritte Parameter ist wieder ein Byte für die Festlegung der Zeichenfarbe. Dabei werden die Pixel in der Tile mit der eingestellten Farbe gesetzt, die eine "1" im Muster haben, alle anderen Pixel bleiben unverändert.


Parameter Bedeutung
Parameter 1 Tile-Nummer (0...48)
Parameter 2 Array-Startzelle (0...760)
Parameter 3 Zeichenfarbe (0...15)
Rückgabewert 0


2.13 Funktion 16 : Muster aus Zeichensatz in Tile zeichnen
Mit dieser Funktion können Zeichen aus dem Zeichensatz als Muster für Tiles benutzt werden. Da die Tiles eine Größe von 8x8 Pixeln haben, der Zeichensatz aber eine von 6x10 Pixeln, werden oben und unten je eine Pixelzeile abgeschnitten und rechts sowie links eine leere Pixelzeile hinzugefügt. Erster Parameter ist die Tile, die gefüllt werden soll. Der zweite Parameter gibt das Zeichen aus dem Systemzeichensatz an, welches das Muster bestimmt. Der dritte Parameter ist wieder ein Byte für die Festlegung der Zeichenfarbe, wobei nur die Pixel in der Tile mit der eingestellten Farbe gesetzt werden, die eine "1" im Muster haben. Alle anderen Pixel bleiben unverändert.


Parameter Bedeutung
Parameter 1 Tile-Nummer (0...48)
Parameter 2 Zeichen (0...255)
Parameter 3 Zeichenfarbe (0...15)
Rückgabewert 0


2.14 Funktion 17 : Tile horizontal spiegeln
Die angegebene Tile wird horizontal gespiegelt. Was vorher links war ist danach rechts und umgekehrt.


Parameter Bedeutung
Parameter 1 Tile-Nummer (0...48)
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.15 Funktion 18 : Tile vertikal spiegeln
Die angegebene Tile wird vertikal gespiegelt. Was vorher oben war ist danach unten und umgekehrt.


Parameter Bedeutung
Parameter 1 Tile-Nummer (0...48)
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.16 Funktion 19 : Tile um 90 Grad im Uhrzeigersinn drehen
Die angegebene Tile wird um 90 Grad im Uhrzeigersinn gedreht.


Parameter Bedeutung
Parameter 1 Tile-Nummer (0...48)
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.17 Funktion 20 : Tile um 90 Grad entgegen dem Uhrzeigersinn drehen
Die angegebene Tile wird um 90 Grad entgegen dem Uhrzeigersinn gedreht.


Parameter Bedeutung
Parameter 1 Tile-Nummer (0...48)
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.18 Funktion 21 : Tile kopieren
Diese Funktion kopiert den Inhalt einer Tile in eine andere.


Parameter Bedeutung
Parameter 1 Quell-Tile (0...48)
Parameter 2 Ziel-Tile (0...48)
Parameter 3 ---
Rückgabewert 0


2.19 Funktion 22 : Tiles zusammenfügen
Diese Funktion zeichnet den Inhalt der zweiten Tile in die erste. Pixel, die in der zweiten Tile die Transparenz-Farbe haben, bleiben unverändert.


Parameter Bedeutung
Parameter 1 Quell- und Ziel-Tile (0...48)
Parameter 2 Zeichen-Tile (0...48)
Parameter 3 Transparenzfarbe (0...15)
Rückgabewert 0


2.20 Funktion 23 : Tiles rotieren
Diese Funktion rotiert den Inhalt zweier Tiles. Die beiden Tiles liegen gedacht nebeneinander oder übereinander, was am einen "Ende" hinausgeschoben wird, erscheint wieder am anderen Ende. Der erste Parameter gibt die Tile an, die im gedachten Verbund oben bzw. links steht, der zweite Parameter gibt die Tile an, die im gedachten Verbund unten bzw. rechts steht.


Parameter Bedeutung
Parameter 1 Tile 1 (0...48)
Parameter 2 Tile 2 (0...48)
Parameter 3 Verschiebe-Richtung (0...3)
Rückgabewert 0


Der dritte Parameter gibt die Richtung an:


Parameter 3 Richtung
0 Verschiebung/Rotation nach oben
1 Verschiebung/Rotation nach rechts
2 Verschiebung/Rotation nach unten
3 Verschiebung/Rotation nach links


2.21 Funktion 24 : Sprites initialisieren
Mit dieser Funktion lassen sich bis zu 8 Sprites initialisieren. Die Sprite-Daten liegen danach im Array ab der angegebenen Adresse, für jedes Sprite werden 16 Bytes benötigt.


Parameter Bedeutung
Parameter 1 Array Position (0...511)
Parameter 2 Anzahl der Sprites (1...8)
Parameter 3 ---
Rückgabewert Maximale Sprite-Nummer


2.22 Funktion 25 : Sprite definieren
Mit dieser Funktion lassen sich die in Funktion 24 Initialisierten Sprites hinsichtlich ihres Aussehens definieren. Der erste Parameter ist die Sprite-Nummer, der zweite die Tile welche zur Darstellung benutzt werden soll. Der dritte Parameter gibt schließlich die Farbe an, welche bei Darstellen des Sprites transparent sein soll. Gleichzeitig wird das betreffende Sprite aktiviert.


Parameter Bedeutung
Parameter 1 Sprite Nummer (0...7)
Parameter 2 Tile Nummer (0...48)
Parameter 3 Transparenz-Farbe (0...15)
Rückgabewert 0


2.23 Funktion 26 : Sprite positionieren
Mit dieser Funktion werden die in Funktion 24 Initialisierten Sprites positioniert. Der erste Parameter ist die Sprite-Nummer, der zweite und dritte Parameter geben die Position des Sprites im Map an. Der 4. und fünfte Parameter geben die Schrittweite an, um die das Sprite bei den Bewegungsfunktionen verschoben wird. Der Wert 1 bedeutet dabei eine Verschiebung nach rechts oder unten um 1 Pixel, der Wert 255 eine Verschiebung nach links bzw. oben um 1 Pixel.


Parameter Bedeutung
Parameter 1 Sprite Nummer (0...7)
Parameter 2 Y Position (0...255)
Parameter 3 X Position (0...255)
Parameter 4 Y Bewegung (0...255)
Parameter 5 X Bewegung (0...255)
Rückgabewert 0


2.24 Funktion 27 : Sprite aktivieren
Aktiviert das Sprite innerhalb der Sequenz, so dass es nächstes mal mitgezeichnet wird.


Parameter Bedeutung
Parameter 1 Sprite Nummer (0...7)
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.25 Funktion 28 : Sprite deaktivieren
Deaktiviert das Sprite innerhalb der Sequenz, so dass es nächstes mal nicht mitgezeichnet wird.


Parameter Bedeutung
Parameter 1 Sprite Nummer (0...7)
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.26 Funktion 29 : Ein einzelnes Sprite zeichnen
Zeichnet ein einzelnes Sprite, Daten befinden sich an der angegebenen Arrayadresse. Dabei werden die original Tiles in die 4 Backup-Tiles kopiert, das Sprite dorthinein gezeichnet und die Tile-Indizies für die 4 Tiles auf die Backup-Tiles "umgebogen". Zusätzlich wird das Visible-Flag gesetzt.


Parameter Bedeutung
Parameter 1 Array-Adresse (0...752)
Parameter 2 Y Position
Parameter 3 X Position
Rückgabewert 0


2.27 Funktion 30 : Ein gezeichnetes Sprite löschen
Löscht ein einzelnes Sprite, Daten befinden sich an der angegebenen Arrayadresse. Es werden lediglich die 4 Tile-Indizies auf die ursprünglichen Werte zurückgestellt und das Visible-Flag zurückgesetzt.


Parameter Bedeutung
Parameter 1 Array-Adresse (0...752)
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.28 Funktion 31 : Alle Sprites sequentiell zeichnen
Zeichnet alle aktivierten Sprites in aufsteigender Reihenfolge.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.29 Funktion 32 : Alle Sprites sequentiell löschen
Löscht alle aktivierten Sprites in absteigender Reihenfolge.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.30 Funktion 33 : Alle Sprites-Koordinaten neu berechnen
Berechnet die Koordinaten aller aktivierten Sprites neu.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.31 Funktion 34 : Alle Sprites bewegen
Bewegt alle aktivierten Sprites. Dazu werden alle Sprites gelöscht, die Koordinaten neu berechnet und danach wieder gezeichnet. Dazu erfolgt das Löschen in absteigender Reihenfolge und das Zeichnen in aufsteigender Reihenfolge.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


3 24x40 Zeichen Treiber (Bibliothekscode 0xe2)


3.1 Allgemeines
Diesen Modus erlaubt ein Darstellung von Text und Pseudografik mit eine Auflösung von 24 Zeilen zu je 40 Zeichen. Allerdings ist die Darstellung nur monochrom (grün auf schwarz) möglich, die Ausgabepins für den roten und blauen Farbkanal werden hochohmig geschaltet. Eine Zeile im Bildschirmspeicher besteht aus 45 Bytes. Zuerst kommen 5 Bytes bei denen jeweils 1 Bit für die Invertierung eines der nachfolgenden Zeichen verantwortlich ist. Danach folgen 40 Zeichen-Bytes, Bit 7 der Zeichen wird ignoriert. Die Zeichen sind mit 8 Pixeln horizontal und 10 Pixeln Vertikal definiert, der Zeichensatz mit insgesamt 128 Zeichen befindet sich im RAM und kann auch geändert werden. Da der Zeichensatz vom Speicherbedarf her nicht mehr in den Treiber gepasst hat, muß dieser auf den Programmplatz 7 geladen werden. Ein passender Zeichensatz ist charset10.bin. Der Bildspeicher ist folgendermaßen aufgeteilt:


Anfangsadresse Endadresse Bytes Funktion
0 1079 1080 24 Zeilen Zeichen
1080 1319 240 z.T.intern benutzt
1320 2599 1280 Zeichensatz
2600 2759 160 ungenutzt




Der Zeichensatz im RAM ist Zeilenweise aufgebaut, zuerst 128 Bytes für die erste Zeile, dann 128 Bytes für die zweite Zeile und so weiter bis zu 128 Bytes für die zehnte und damit letzte Zeile. Der Zeichensatz auf Programmplatz 7 der als Quelle dient, hat eine ähnliche Struktur, nur dass hier eine Zeile 256 Bytes hat. Das heisst auch dass der Treiber nur die unteren 128 Zeichen des Zeichensatzes nutzt.

3.2 Funktionen
Der aktuelle Treiber hat keine zusätzlichen Funktionen eingebaut, die Ansteuerung erfolgt über die "normalen" BASIC Ausgabebefehle. Um den Treiber zu aktivieren, muß nur mittels VMODE 7 in den USER-Videomode gewechselt werden. Dabei wird dann der Zeichensatz von Programmplatz 7 in den RAM kopiert. Mit COLOR 0 werden die Zeichen invertiert ausgegeben, COLOR 1 schaltet in den nichtinvertierten Modus zurück.
Ebenfalls ist es möglich, 16 (0c00...0x0f) benutzerdefinierte Zeichen zu nutzen. Dazu ist der I/O Bereich von 0xa00 bis 0xaff reserviert. Dazu sind jeweils 16 aufeianderfolgende Bytes für ein Zeichen verantwortlich, genutzt werden nur die ersten 10 Bytes. Innerhalb der Bytes werden die Bits 7...0 benutzt, wobei Bit 7 dem am weitesten links liegenden Pixel entspricht. Alternativ kann auch mittels VPOKE direkt in den Bildschirmspeicher geschrieben werden, hier gibt es aber keinen linearen Zusammenhang zwischen Zeichenbytes und Adresse wie beim OUT Befehl, der bereits die Umrechnung der Adressen vornimmt. Die Zeichen von 0x10 bis 0x17 sind für die Pseudografik zuständig und sollten nicht überschrieben werden.

4 DUAL Text-LCD Treiber (Bibliothekscode 0xf0)


4.1 Allgemeines
Mit diesen Treibern lassen sich verschiedene einzeilige und mehrzeilige Text-LCD ansteuern. Es werden die Datenleitungen D4...D7 benutzt, die Datenleitungen D0...D3 lassen sich über den I/O Adressbereich ab 0x800 bzw. die IN und ADC-Funktionen frei verwenden.
Die eigentliche Ausgabe erfolgt mit PRINT oder direktes Schreiben in das Video-RAM im Adressbereich ab 0x0000. Eine zyklische Update-Funktion sorgt dafür, dass geänderte Zeichen zum LCD übertragen werden.
Ebenfalls ist es möglich, die benutzerdefinierten Zeichen zu nutzen. Dazu ist der I/O Bereich von 0xa00 bis 0xa40 reserviert. Dazu sind jeweils 8 aufeianderfolgende Bytes für ein Zeichen verantwortlich. Innerhalb der Bytes werden die Bits 4...0 benutzt, wobei Bit 4 dem am weitesten links liegenden Pixel entspricht. Benutzt werden diese Zeichen sinnvollerweise im Bereich von 8...15, der Bereich von 0...7 ist auch möglich, in einigen Fällen führt aber ein 0x00 im String zum Abbruch der Ausgabe.
Parallel zum LCD wird auch der Displayinhalt am TV-Ausgang ausgegeben, die Anzeige sollte mit der des LCD übereinstimmen, wobei für Zeichen größer 128 die Zeichensätze voneinander abweichen können. Vorder- und Hintergrundfarbe lassen sich ganz einfach über den COLOR Befehl einstellen, wobei die Einstellung sofort für die ganze (TV-) Anzeige übernommen wird.

4.2 Hardware
Angeschlossen wird das Display an den Parallelport, dazu müssen allerdings auch die +5V mit herausgeführt sein. Es werden die Leitungen Strobe, Busy und die Datenleitungen D4...D7 benutzt.





4.3 unterstützte Displays
Da nur eine (relativ langsame) Initialisierung mit 4 Bit Datenbus sowie das direkte Schreiben in das DD- und CG-RAM genutzt werden, sollte der Treiber mit den meisten auf dem Markt erhältlichen Displays funktionieren. Wenn Sie in Erfahrungen mit einem in der nachstehenden Tabelle nicht aufgeführten Display gemacht haben, würde ich um eine kurze Meldung bitten, damit ich es in die nachstehende Tabelle einfügen kann. Zur Zeit werden folgende Display-Typen unterstützt:


Treiber Display Display funktioniert Display funktioniert nicht
lcd116.bin 1 x 16 Zeichen Powertip PC1601A
lcd216.bin 2 x 16 Zeichen
lcd220.bin 2 x 20 Zeichen Powertip PC2002-M


4.4 Funktionen
Der aktuelle Treiber hat keine zusätzlichen Funktionen eingebaut, die Ansteuerung erfolgt über die "normalen" BASIC Ausgabebefehle. Um den Treiber vzu aktivieren, muß nur mittels VMODE 7 in den USER-Videomode gewechselt werden. Beim Wechsel in einen anderen Videomode bleibt die Anzeige auf dem LCD erhalten. Allerdings sollte zwischen dem letzten Schreibvorgang und dem Wechsel des Videomode eine kleine Pause eingelegt werden (0,1s), damit die Daten auch sicher im LCD aktualisiert werden können. Um den Treiber zu testen, muss kein LCD angeschlossen sein.

5 DUAL Grafik-LCD Treiber 24x40 Zeichen (Bibliothekscode 0xf1)


5.1 Allgemeines
Diesen Modus erlaubt ein Darstellung von Text und Pseudografik mit eine Auflösung von 24 Zeilen zu je 40 Zeichen. Allerdings ist die Darstellung nur monochrom (grün auf schwarz) möglich, die Ausgabepins für den roten und blauen Farbkanal werden hochohmig geschaltet. Wahlweise kann der Displayinhalt auf ein am Parallelport angeschlossenes Grafikdisplay ausgeben. Unterstützt werden monochrome Displays ohne eigenen Controller mit 320x240 Pixeln. Die Anzeige kann nur auf einem Weg erfolgen, TV-Ausgang oder Display, eine simultane Anzeige ist nicht möglich. Die jeweils nicht aktive Anzeige ist dann abgeschaltet, beim LCD gibt es einen Steuer-Pin mit dem die LCD-Spannung abgeschalten werden kann und auch sollte. Eine Zeile im Bildschirmspeicher besteht aus 45 Bytes. Zuerst kommen 5 Bytes bei denen jeweils 1 Bit für die Invertierung eines der nachfolgenden Zeichen verantwortlich ist. Danach folgen 40 Zeichen-Bytes, Bit 7 der Zeichen wird ignoriert. Die Zeichen sind mit 8 Pixeln horizontal und 10 Pixeln Vertikal definiert, der Zeichensatz mit insgesamt 128 Zeichen befindet sich im RAM und kann auch geändert werden. Da der Zeichensatz vom Speicherbedarf her nicht mehr in den Treiber gepasst hat, muß dieser auf den Programmplatz 7 geladen werden. Ein passender Zeichensatz ist charset10.bin. Der Bildspeicher ist folgendermaßen aufgeteilt:


Anfangsadresse Endadresse Bytes Funktion
0 1079 1080 24 Zeilen Zeichen
1080 1319 240 z.T.intern benutzt
1320 2599 1280 Zeichensatz
2600 2759 160 ungenutzt




Der Zeichensatz im RAM ist Zeilenweise aufgebaut, zuerst 128 Bytes für die erste Zeile, dann 128 Bytes für die zweite Zeile und so weiter bis zu 128 Bytes für die zehnte und damit letzte Zeile. Der Zeichensatz auf Programmplatz 7 der als Quelle dient, hat eine ähnliche Struktur, nur dass hier eine Zeile 256 Bytes hat. Das heisst auch dass der Treiber nur die unteren 128 Zeichen des Zeichensatzes nutzt.

5.2 Hardware
Zum Anschluss des Displays wird der Parallelport benutzt. Vorhanden sind die Datenignale D0...D3 (an den gleichnamigen Port-Pins), CP an Pin D7, LOAD an Pin D6 und FLM/FRAME an Pin D5. An BUSY-Pin steht zusätzlich ein Schaltsignal (LOW-aktiv) zur Verfügung, mit dem die Display-Spannungen VEE und VO geschaltet werden sollten. Andernfalls kann es zu Schäden am Display kommen, sowohlbeimEinschalten bis zumWechsel in den Videomode 7 als auch wenn in einen anderen Videomode gewechselt wird.




5.3 Funktionen
Der aktuelle Treiber hat keine zusätzlichen Funktionen eingebaut, die Ansteuerung erfolgt über die "normalen" BASIC Ausgabebefehle. Um den Treiber zu aktivieren, muß nur mittels VMODE 7 in den USER-Videomode gewechselt werden. Dabei wird dann der Zeichensatz von Programmplatz 7 in den RAM kopiert. Mit COLOR 0 werden die Zeichen invertiert ausgegeben, COLOR 1 schaltet in den nichtinvertierten Modus zurück.
Ebenfalls ist es möglich, 16 (0c00...0x0f) benutzerdefinierte Zeichen zu nutzen. Dazu ist der I/O Bereich von 0xa00 bis 0xaff reserviert. Dazu sind jeweils 16 aufeianderfolgende Bytes für ein Zeichen verantwortlich, genutzt werden nur die ersten 10 Bytes. Innerhalb der Bytes werden die Bits 7...0 benutzt, wobei Bit 7 dem am weitesten links liegenden Pixel entspricht. Alternativ kann auch mittels VPOKE direkt in den Bildschirmspeicher geschrieben werden, hier gibt es aber keinen linearen Zusammenhang zwischen Zeichenbytes und Adresse wie beim OUT Befehl, der bereits die Umrechnung der Adressen vornimmt. Die Zeichen von 0x10 bis 0x17 sind für die Pseudografik zuständig und sollten nicht überschrieben werden.
Mit dem Befehl OUT $900,1 kann die Anzeige auf das angeschlossene LCD umgestellt werden, mit OUT $900,0 wird wieder auf TV-Ausgabe zurückgeschaltet. Standardmäßig wird der Videomode mit TV-Anzeige gestartet.

6 PWM 4 x 8Bit Treiber (Bibliothekscode 0xf8)


6.1 Allgemeines
Dieser Treiber stellt 4 pulsweitenmodulierte Ausgänge zur Verfügung. Diese haben eine Auflösung von 8 Bit und eine Frequenz von etwa 61 Hz. Daneben gibt es eine zum Videomode 0 weitestgehend kompatible Anzeige, allerdings sind von jeder Zeile nur die erten 24 Zeichen sichtbar.

6.2 Hardware
Die 4 PWM-Kanäle liegen an den Datenbits D4...D7 an, die Datenbits D0...D3 lassen sich über die Adressbereiche 0x800...0x803 (Daten) und 0x810...0x813 (Datenrichtung) sowie über die IN() und ADC() Funktionen frei benutzen.





6.3 Funktionen
Der aktuelle Treiber hat keine zusätzlichen Funktionen eingebaut, die Ansteuerung erfolgt über die "normalen" BASIC Ausgabebefehle. Um den Treiber vzu aktivieren, muß nur mittels VMODE 7 in den USER-Videomode gewechselt werden. Beim Aktivieren und beim Verlassen des Videomodes werden alle PWM-Kanäle auf 0 gesetzt.
Die einzelnen Kanäle werden mittels OUT Befehlen auf die Adressen 0x904...0x907 gesteuert, ein Zurücklesen der Daten ist nicht implementiert.

7 PWM 8 x 8Bit Treiber (Bibliothekscode 0xf9)


7.1 Allgemeines
Dieser Treiber stellt 8 pulsweitenmodulierte Ausgänge zur Verfügung. Diese haben eine Auflösung von 8 Bit und eine Frequenz von etwa 61 Hz. Daneben gibt es eine zum Videomode 0 weitestgehend kompatible Anzeige, allerdings sind von jeder Zeile nur die erten 24 Zeichen sichtbar.

7.2 Hardware
Die 8 PWM-Kanäle liegen an den Datenbits D0...D7 an.





7.3 Funktionen
Der aktuelle Treiber hat keine zusätzlichen Funktionen eingebaut, die Ansteuerung erfolgt über die "normalen" BASIC Ausgabebefehle. Um den Treiber vzu aktivieren, muß nur mittels VMODE 7 in den USER-Videomode gewechselt werden. Beim Aktivieren und beim Verlassen des Videomodes werden alle PWM-Kanäle auf 0 gesetzt.
Die einzelnen Kanäle werden mittels OUT Befehlen auf die Adressen 0x900...0x907 gesteuert, ein Zurücklesen der Daten ist nicht implementiert.

created with latex2web.pl v0.57 © 2006-2010 Joerg Wolfram