Projekt
Hardware
Bedienung
BASIC (1)
BASIC (2)
BASIC (3)
Interna
Beispiele
Erweiterungen
Bibliotheken
Treiber
Programme
Bezugsquellen:
Bausatz
Leerplatine
|
AVR-ChipBasic2 - Treiber
V1.50 (c) 2006-2015 Jörg Wolfram
1 Videotreiber ohne externe Hardware
1.1 24x40 Zeichen Treiber (Bibliothekscode 0x80)
1.1.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.
1.1.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 (0x00...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.
1.2 24x50 Zeichen Treiber (Bibliothekscode 0x81)
1.2.1 Allgemeines
Diesen Modus erlaubt ein Darstellung von Text und Pseudografik mit eine Auflösung von 24 Zeilen zu je
50 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 50 Bytes. Der dazugehörige Zeichensatz
mit 6 Pixeln horizontal und 10 Pixeln vertikal muss auf Programmplatz
7 geladen werden. Er enthält 256 Zeichen wobei die Zeichen ab 128 denen von 0...127 entsprechen
aber invertiert dargestellt werden.
Ein passender Zeichensatz ist charset_50z.bin.
Der Bildspeicher ist folgendermaßen aufgeteilt:
Anfangsadresse |
Endadresse |
Bytes |
Funktion |
0 |
1199 |
1200 |
24 Zeilen Zeichen |
1200 |
2759 |
1560 |
ungenutzt |
Der Zeichensatz im Flash ist zeilenweise aufgebaut, zuerst 256 Bytes für die erste Zeile, dann 256 Bytes für die
zweite Zeile und so weiter bis zu 256 Bytes für die zehnte und damit letzte Zeile. Der Zeichensatz muss auf Programmplatz
7 stehen, die Anfangsadresse ist im Treiber fest codiert.
1.2.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.
Mit COLOR 0 werden die Zeichen invertiert ausgegeben, COLOR 1 schaltet
in den nichtinvertierten Modus zurück.
1.3 24x60 Zeichen Treiber (Bibliothekscode 0x82)
1.3.1 Allgemeines
Diesen Modus erlaubt ein Darstellung von Text und Pseudografik mit eine Auflösung von 24 Zeilen zu je
60 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 50 Bytes. Der dazugehörige Zeichensatz
mit 6 Pixeln horizontal und 10 Pixeln vertikal muss auf Programmplatz
7 geladen werden. Er enthält 256 Zeichen wobei die Zeichen ab 128 denen von 0...127 entsprechen
aber invertiert dargestellt werden.
Ein passender Zeichensatz ist charset_60z.bin.
Der Bildspeicher ist folgendermaßen aufgeteilt:
Anfangsadresse |
Endadresse |
Bytes |
Funktion
|
0 |
1439 |
1440 |
24 Zeilen Zeichen
|
1440 |
2759 |
1320 |
ungenutzt
|
Der Zeichensatz im Flash ist zeilenweise aufgebaut, zuerst 256 Bytes für die erste Zeile, dann 256 Bytes für die
zweite Zeile und so weiter bis zu 256 Bytes für die zehnte und damit letzte Zeile. Der Zeichensatz muss auf Programmplatz
7 stehen, die Anfangsadresse ist im Treiber fest codiert. Das letzte Pixel jedes Zeichens wird 2 mal wiederholt, dadurch
sind z.B. die Pseudografiksymbole unsymmetrisch angelegt.
{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.
Mit COLOR 0 werden die Zeichen invertiert ausgegeben, COLOR 1 schaltet
in den nichtinvertierten Modus zurück.
1.4 Tile/Sprite Mode Treiber (Bibliothekscode 0x90)
1.4.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.
1.4.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
|
1.4.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
|
1.4.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
|
9 |
Tile-Map mit konstantem Tile-Index füllen
|
10 |
Tile-Map mit einer Tile nach Bitmap setzen
|
11 |
Tile-Map Bereich mit konstantem Tile Index füllen
|
12 |
Einen Tile-Index im Tile-Map setzen
|
13 |
Einen Tile-Index im Tile-Map abfragen
|
14 |
Tile mit Farbe füllen
|
15 |
Vordefiniertes Muster in Tile zeichnen
|
16 |
Array-definiertes Muster in Tile zeichnen
|
17 |
Muster aus Zeichensatz in Tile zeichnen
|
18 |
Tile horizontal spiegeln
|
19 |
Tile vertikal spiegeln
|
20 |
Tile 90 Grad im Uhrzeigersinn drehen
|
21 |
Tile 90 Grad entgegen dem Uhrzeigersinn drehen
|
22 |
Tile kopieren
|
23 |
Tiles zusammenfügen
|
24 |
2 Tiles rotieren
|
25 |
Sprites initialisieren
|
26 |
Sprite definieren
|
27 |
Sprite positionieren
|
28 |
Sprite aktivieren
|
29 |
Sprite deaktivieren
|
30 |
Ein einzelnes Sprite zeichnen
|
31 |
Ein gezeichnetes Sprite löschen
|
32 |
Alle Sprites sequentiell zeichnen
|
33 |
Alle Sprites sequentiell löschen
|
34 |
Alle Sprites-Koordinaten neu berechnen
|
35 |
Alle Sprites bewegen
|
36 |
---
|
37 |
---
|
1.4.5 Funktion 9 : 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
|
1.4.6 Funktion 10 : 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
|
1.4.7 Funktion 11 : 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
|
1.4.8 Funktion 12 : 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
|
1.4.9 Funktion 13 : 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
|
1.4.10 Funktion 14 : 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
|
1.4.11 Funktion 15 : 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
|
1.4.12 Funktion 16 : 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
|
1.4.13 Funktion 17 : 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
|
1.4.14 Funktion 18 : 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
|
1.4.15 Funktion 19 : 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
|
1.4.16 Funktion 20 : 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
|
1.4.17 Funktion 21 : 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
|
1.4.18 Funktion 22 : 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
|
1.4.19 Funktion 23 : 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
|
1.4.20 Funktion 24 : 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
|
1.4.21 Funktion 25 : 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
|
1.4.22 Funktion 26 : 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
|
1.4.23 Funktion 27 : 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
|
1.4.24 Funktion 28 : 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
|
1.4.25 Funktion 29 : 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
|
1.4.26 Funktion 30 : 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
|
1.4.27 Funktion 31 : 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
|
1.4.28 Funktion 32 : Alle Sprites sequentiell zeichnen
Zeichnet alle aktivierten Sprites in aufsteigender Reihenfolge.
Parameter |
Bedeutung
|
Parameter 1 |
---
|
Parameter 2 |
---
|
Parameter 3 |
---
|
Rückgabewert |
0
|
1.4.29 Funktion 33 : Alle Sprites sequentiell löschen
Löscht alle aktivierten Sprites in absteigender Reihenfolge.
Parameter |
Bedeutung
|
Parameter 1 |
---
|
Parameter 2 |
---
|
Parameter 3 |
---
|
Rückgabewert |
0
|
1.4.30 Funktion 34 : Alle Sprites-Koordinaten neu berechnen
Berechnet die Koordinaten aller aktivierten Sprites neu.
Parameter |
Bedeutung
|
Parameter 1 |
---
|
Parameter 2 |
---
|
Parameter 3 |
---
|
Rückgabewert |
0
|
1.4.31 Funktion 35 : 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
|
1.5 Vector Mode Treiber (Bibliothekscode 0x91)
1.5.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.5.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
|
16 |
löscht den Vektor-Bereich
|
17 |
Zeilenzeiger konstant füllen
|
18 |
Zeilenzeiger aufsteigend füllen
|
19 |
Zeilenzeiger absteigend füllen
|
20 |
Zeilenzeiger mit Array-Werten füllen
|
21 |
Zeilenzeigerbereiche kopieren
|
22 |
Zeilen mit konstanten Array-Werten füllen
|
23 |
Zeilen mit aufeianderfolgenden Array-Werten füllen
|
24 |
---
|
25 |
---
|
26 |
---
|
27 |
---
|
1.5.3 Funktion 16 : 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.5.4 Funktion 17 : 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.5 Funktion 18 : 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.5.6 Funktion 19 : 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.5.7 Funktion 20 : 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.5.8 Funktion 21 : 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.5.9 Funktion 22 : 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.5.10 Funktion 23 : 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 Videotreiber für externe Displays
2.1 DUAL Text-LCD Treiber (Bibliothekscode 0xA0...0xA3)
2.1.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 alle Zeichen
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.
2.1.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.
An die Datenleitungen D4...D7 können noch Taster etc. angeschlossen werden. Diese müssen
die Signale über ca. 1KOhm nach Masse schalten. Der Status der vier Datenleitungen lässt sich mittels
IN($804)...IN($807) abfragen.
2.1.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 |
Treibercode |
Display |
Display funktioniert |
Display funktioniert nicht
|
lcd116.bin |
0xA0 |
1 x 16 Zeichen
|
Powertip PC1601A
|
.
|
lcd216.bin |
0xA1 |
2 x 16 Zeichen
|
.
|
.
|
lcd220.bin |
0xA2 |
2 x 20 Zeichen
|
Powertip PC2002-M
|
.
|
2.1.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.
2.2 DUAL Grafik-LCD Treiber 128x64 PIXEL (Bibliothekscode 0xA8)
2.2.1 Allgemeines
Mit diesem Treiber lassen sich verschiedene KS0107/0108 basierte bzw. kompatible
Grafikdisplays mit 128x64 Pixeln ansteuern. Die Ausgabe erfolgt dabei parallel
auch am TV-Ausgang, funktionell ist der Videomode gleich dem eingebauten Mode 5.
Für die Ansteuerung wird der komplette Parallelport benutzt, zusätztlich ist ein
4 Bit breites Latch (bei H transparent) oder Register (beide Flanken möglich) notwendig.
Weiterhin können 7 Tasten angeschlossen werden. Von dem Treiber gibt es zwei Versionen,
die sich in der Polarität der Chip-Select Signale unterscheiden. Die Vsrsion mit der
Endung _ncs eignet sich für Displays mit LOW-aktiven Chip-Select Signalen,
die mit der Endung _pcs dementsprechend für Displays mit HIGH-aktiven Chip-Select
Signalen.
Eine zyklische Update-Funktion sorgt dafür, dass der Bildschirminhalt ca. 12 mal pro
Sekunde zum LCD übertragen wird.
Vorder- und Hintergrundfarbe sind dabei mit blau und cyan fest zugeordnet und lassen
sich nicht ändern.
2.2.2 Hardware
Angeschlossen wird das Display an den Parallelport, dazu müssen allerdings auch die
+5V mit herausgeführt sein. Die Datenleitungen werden direkt zum Display geführt,
die Steuerleitungen I/D, CS1 und CS2 sowie das Treibersignal für die Zusatztasten
werden über ein 4 Bit Latch/Register zwischengespeichert. Dazu dient das BUSY Signal,
welches als Ausgang benutzt wird. Das E-Signal wird vom STROBE-Ausgang geliefert,
die R/W Leitung liegt fest an Masse, es wird nur zum Display hin geschrieben.
2.2.3 Ausgabe-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.
2.2.4 Tasten-Funktionen
Es können bis zu 7 Tasten angeschlossen werden. Über die Funktion KEY(8) oder die
API-Funktion api_scancode kann der Status direkt gelesen werden, wobei eine "1"
für eine gedrückte Taste steht. Zusäztzlich werden verschiedene Tastendrücke emuliert, im
Schaltbild ist dies neben den Tastern angegeben.
Taste |
Bit im Scancode |
Keycode |
left |
0 |
0xE2 |
right |
1 |
0xE3 |
up |
2 |
0xE4 |
down |
3 |
0xE5 |
enter |
4 |
0xEA |
esc |
5 |
0xED |
F5 |
6 |
0xF5 |
ACHTUNG! Sobald eine der Tasten gedrückt wurde, funktioniert eine angeschlossene PS2-Tastatur
nicht mehr richtig.
2.3 DUAL Grafik-LCD Treiber 24x40 Zeichen (Bibliothekscode 0xA9)
2.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. 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.
2.3.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.
2.3.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 (0x00...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.
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.
3 Videotreiber mit PWM-Funktionen
3.1 PWM 4 x 8 Bit Treiber (Bibliothekscode 0xB0)
3.1.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.
3.1.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.
3.1.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...0x903 gesteuert,
ei Zurücklesen ist über die Funktion IN() möglich.
Die folgende Tabelle zeigt eine Übersicht über die nutzbaren I/O Adressen:
I/O Adresse |
Zugriff |
Funktion
|
0x800 |
R/W |
Datensignal D0
|
0x801 |
R/W |
Datensignal D1
|
0x802 |
R/W |
Datensignal D2
|
0x803 |
R/W |
Datensignal D3
|
0x808 |
R/W |
Datensignal STROBE
|
0x809 |
R/W |
Datensignal BUSY
|
0x810 |
W |
Datenrichtung D0 (0=IN, 1=OUT)
|
0x811 |
W |
Datenrichtung D1 (0=IN, 1=OUT)
|
0x812 |
W |
Datenrichtung D2 (0=IN, 1=OUT)
|
0x813 |
W |
Datenrichtung D3 (0=IN, 1=OUT)
|
0x818 |
R/W |
Datenrichtung STROBE
|
0x819 |
R/W |
Datenrichtung BUSY
|
0x900 |
R/W |
Pulsweite an D4 (0...255)
|
0x901 |
R/W |
Pulsweite an D5 (0...255)
|
0x902 |
R/W |
Pulsweite an D6 (0...255)
|
0x903 |
R/W |
Pulsweite an D7 (0...255)
|
3.2 PWM 8 x 8 Bit Treiber (Bibliothekscode 0xB1)
3.2.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.
3.2.2 Hardware
Die 8 PWM-Kanäle liegen an den Datenbits D0...D7 an.
3.2.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 über IN() möglich.
Die folgende Tabelle zeigt eine Übersicht über die nutzbaren I/O Adressen:
I/O Adresse |
Zugriff |
Funktion
|
0x808 |
R/W |
Datensignal STROBE
|
0x809 |
R/W |
Datensignal BUSY
|
0x818 |
R/W |
Datenrichtung STROBE
|
0x819 |
R/W |
Datenrichtung BUSY
|
0x900 |
R/W |
Pulsweite an D0 (0...255)
|
0x901 |
R/W |
Pulsweite an D1 (0...255)
|
0x902 |
R/W |
Pulsweite an D2 (0...255)
|
0x903 |
R/W |
Pulsweite an D3 (0...255)
|
0x904 |
R/W |
Pulsweite an D4 (0...255)
|
0x905 |
R/W |
Pulsweite an D5 (0...255)
|
0x906 |
R/W |
Pulsweite an D6 (0...255)
|
0x907 |
R/W |
Pulsweite an D7 (0...255)
|
3.3 PWM 2 x 8 Bit + 2 x Puls Treiber (Bibliothekscode 0xB2)
3.3.1 Allgemeines
Dieser Treiber stellt 2 pulsweitenmodulierte Ausgänge zur Verfügung. Diese haben eine Auflösung
von 8 Bit und eine Frequenz von etwa 61 Hz. Zusätzlich gibt es noch zwei Pulsausgänge mit denen
sich periodische Pulse im Bereich von 0...2,24 Milliskeunden erzeugen lassen. Die Wiederholfrequenz
entspricht dabei der Vertikal-Synchronfrequenz, also ca. 50Hz für PAL und 60Hz für NTSC.
Daneben gibt es eine zum Videomode 0 weitestgehend kompatible Anzeige, allerdings
werden nur die ersten 20 Zeilen angezeigt von denen auch nur 28 Zeichen sichtbar sind.
3.3.2 Hardware
Die 2 PWM-Kanäle liegen an den Leitungen D6 und D7 an, die beiden Pulskanäle an den Datenleitungen D4 und D5.
Die Datenleitungen D0...D3 sowie BUSY und STROBE lassen sich
über die Adressbereiche 0x800...0x809 (Daten) und 0x810...0x819 (Datenrichtung) sowie
über die IN() und ADC() Funktionen (letztere nur D0...D3) frei nutzen.
3.3.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. 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...0x903 gesteuert,
die eingestellten Werte können auch über IN() zurückgelesen werden. Die folgende Tabelle zeigt eine Übersicht über
die nutzbaren I/O Adressen:
I/O Adresse |
Zugriff |
Funktion
|
0x800 |
R/W |
Datensignal D0
|
0x801 |
R/W |
Datensignal D1
|
0x802 |
R/W |
Datensignal D2
|
0x803 |
R/W |
Datensignal D3
|
0x808 |
R/W |
Datensignal STROBE
|
0x809 |
R/W |
Datensignal BUSY
|
0x810 |
W |
Datenrichtung D0 (0=IN, 1=OUT)
|
0x811 |
W |
Datenrichtung D1 (0=IN, 1=OUT)
|
0x812 |
W |
Datenrichtung D2 (0=IN, 1=OUT)
|
0x813 |
W |
Datenrichtung D3 (0=IN, 1=OUT)
|
0x818 |
R/W |
Datenrichtung STROBE
|
0x819 |
R/W |
Datenrichtung BUSY
|
0x900 |
R/W |
Pulsbreite an D4 (0...559)
|
0x901 |
R/W |
Pulsbreite an D5 (0...559)
|
0x902 |
R/W |
Pulsweite an D6 (0...255)
|
0x903 |
R/W |
Pulsweite an D7 (0...255)
|
4 Treiber für Zusatzspeicher
4.1 Memory-Treiber für 2K internes RAM (Bibliothekscode 0xF0)
Dieser Treiber nutzt 2K des internen Speichers, wozu ein Teil des Bilschirmspeichers sowie
ein Teil des Arrays benutzt werden. Dieser Treiber dient hauptsächlich dazu, Programme die
XMEM benötigen zu testen. Es sind nur die Videomodi 0 und 5 nutzbar, bei den Videotreibern
sollten zumindest die LCD Treiber funktionieren.
4.2 Memory-Treiber für 64K externes RAM (Bibliothekscode 0xF1)
Dieser Treiber erlaubt die Nutzung des XRAM64 Speichermodules wie es bei den Erweiterungen beschrieben wird.
Es können die Pages 0...255 benutzt werden, bei nur einem 32K RAM die Pages 0...127.
4.3 Memory-Treiber für 12K internes RAM (Bibliothekscode 0xF2)
Dieser Treiber nutzt die freien 12K des internen Speichers, wenn ein ATMega1284P eingesetzt wird.
Es sind die Pages 0 bis 48 verfügbar.
created with latex2web.pl v0.63 © 2006-2013 Joerg Wolfram
|