Grafikkurs Teil 6 .4
Wie Sie sehen, kann man den Bildschirm
nun mit Hilfe dieser 3 Bits der beiden
Steuerregister um jeweils 8 Pixel in der
Vertikalen und in der Horizontalen verschieben. Probieren Sie doch einmal aus, was geschieht, wenn Sie verschiedene
Werte in diese unteren 3 Bits hineinschreiben. Der Rest des Registers sollte
natürlich unverändert bleiben, um unangenehme Nebenwirkungen auszuschließen.
Diese Bits können ja dezimale Werte von
0 bis 7 annehmen. Bei jedem weiteren
Wert, wird der Bildschirm um wiederum 4 Pixel verschoben. Wenn Sie hier also
Werte hineinschreiben, so addieren Sie
am Besten zu dem dezimalen Wert der 3 Bits den Wert der restlichen Bits, die
gesetzt sein sollen direkt dazu ( man
nennt das auch absolutes POKEn) .
Und nun zur Anwendung des ganzen! Man
kann nämlich mit Hilfe der nun kennengelernten Bits zur Bildschirmmanipulation einen sogenannten " SoftScroll" realisieren. Dies ist das weiche Schieben des
Bildschirms nach links, rechts, oben
oder unten, wie Sie es aus manchen Spielen kennen ( klassisches Beispiel ist
wohl der schon uralte Megahit " Uridium") . Dies funktioniert denkbar einfach: zunächst wird der Bildschirm in
der entsprechenden Scrollrichtung verkleinert. Als Beispiel nehme ich hier
einmal einen Softscroll nach links. Demnach müssen wir die Spaltenzahl verkürzen auf 38 Spalten pro Zeile. Nun sind
die erste Spalte links und die erste
Spalte rechts nicht mehr sichtbar. Wir
schreiben nun eine 7 in Steuerregister
2, damit der linke Rand wieder sichtbar
wird, jetzt jedoch 2 Spalten des rechten
Randes verschwinden. Dort schreiben wir
nun ein Zeichen hin und zählen den X-Offset von 7 auf 0 herunter. Somit wäre
das nichtsichtbare Zeichen in den Bildschirm " hereingelaufen" . Als nächstes
wird es eine Spalte vorkopiert und das Steuerregister 2 wieder auf 7 gesetzt.
Das Zeichen befindet sich nun in der
letzten auf dem Bildschirm sichtbaren
Spalte. Nun beginnt der nächste Durchgang, das nächste Zeichen wird wieder in
die erste unsichtbare Spalte geschrieben
und durchgescrollt. . . Ein Softscrolling
ist entstanden!
Leider ist es jedoch in Basic nicht möglich einen solchen Scroll auch wirklich
ruckelfrei zu realisieren. Das Umkopieren der Zeichen dauert zu lange, so daß
der Scroll " zittert" . So etwas ist wirklich sauber nur in Maschinensprache zu
machen, oder Sie versuchen einmal Ihr
BASIC-Programm durch einen BASIC-Compiler zu beschleunigen, es kann gut
sein, daß hierbei auch noch einigermaßen
gute Ergebnisse zu erzielen sind.
Eine in BASIC sicher realisierbare Anwendung, die einen guten Effekt liefert
wäre ein sogenanntes Bildschirmwackeln.
Angenommen, bei Ihrem nächsten Spiel
explodiert ein Raumschiff, wenn es ge- troffen wird. Wie wäre es denn, wenn
hierzu der Bildschirm so anständig wakkeln würde? Nichts einfacher als das, wir müssen lediglich ein paar Zufallswerte in die Bildschirmoffsetbits
schreiben, um ein chaotisches Wackeln zu
erzeugen. Schauen Sie zu diesem Zweck
einfach nocheinmal in das Programm " ZEI-CHENDEMO" der Rückseite dieser MD, auch
zu diesem Thema gibt es da einige Demonstationen.
Nun noch ein paar Worte zum Speicherhandling des VIC. Wie ich Ihnen ja schon
im Grafikkurs Teil 5 erzählte kann der
VIC lediglich 16 KByte Speicher adressiere. Im Normalfall belegt er den Speicher von Adresse 0 bis 16383, was zur
Folge hatte, daß wir Grafikdaten immer
nur in diesem Bereich untergebracht haben. Dies brachte jedoch häufig Schwierigkeiten mit sich, zumal wir manche
Speicherbereiche nicht unbedingt direkt
nutzen konnten und zunächst immer ir- gendwelche Vorsichtsmaßnahmen treffen
mußten, bevor wir überhaupt Daten in
einem Bereich ablegen konnten. Deshalb
gibt es aber auch die Möglichkeit den
Speicherbereich des VIC zu verschieben.
Dies wird durch Adresse 56576 gesteuert.
Diese Adresse liegt in dem Speicherbereich eines weiteren Bausteins des
64 ers, dem CIA, mit dem wir uns jedoch
nicht weiter befassen werden, da dieser
nur in Maschinensprache von Nutzen ist.
Die Bits 0 und 1 dieses Registers geben
die möglichen Basisadressen des VIC an.
Diese sind aufgeteilt in folgende Kombinationen:
Bitmuster Speicherbereich
11 0-16383 10 16384-32767 01 32768-49151 00 49152-65535
Schreiben Sie also diese Bitkombinatio- nen in die Bits 0 und 1 der Adresse
56576, so wird der Speicherbereich des
VIC verschoben. Wie Sie sehen geschieht
dies in Abschnitten von 16 KB, wobei der
ganze Speicher des VIC quasi " abgedeckt" werden kann. Doch Vorsicht! Die normalen
Basisadressen von verschiedenen Grafikfunktionen verschieben sich somit nämlich ebenfalls um 16 KB! Das heißt im
Klartext, daß beispielsweise der Bildschirmspeicher jetzt nicht mehr bei
Adresse 1024 anfängt, sondern jeweils
16384 Bytes weiter! Ebenso ist es mit
der Bitmap einer Grafikseite. Diese kann
ja normalerweise bei Adresse 0, oder
wahlweise bei Adresse 8192 des Speichers
liegen. Schalten wir den Bildschirm auf
den 2 Bereich der obigen Liste, so liegen die möglichen Grafikbereiche jetzt
bei 0+16384=16384 und 8192+16384=24576 !
Nun noch zu einem Thema, das uns ebenfalls aus Speicherplatzgründen sehr
nützlich ist. Es gibt nämlich auch die Möglichkeit, die Basisadresse des Bildschirmspeichers innerhalb des 16 KB-Bereichs des VIC zu verschieben. Das hat
den Vorteil, daß man sehr schnell zwischen 2 Bildschirmen hinund herschalten kann, oder aber auch, daß man die
Farbdaten einer Grafik an einer anderen
Stelle ablegen kann, wenn man den normalen Bildschirmspeicher für andere Dinge
nutzen möchte. Dies ist ein denkbar einfacher Vorgang. Die Bits 4-7 aus Register 24 sind dafür zuständig. Schreiben
Sie die nun folgenden Bitkombinationen, so wird der Bildschirmspeicher an die
angegeben Adresse verschoben:
0000 0-999 0001 1024-2023 0010 2048-3047 0011 3072-4071 0100 4096-5095 0101 5120-6119 0110 6144-7143 0111 7168-8167 1000 8192-9191 1001 9216-10215 1010 10240-11239 1011 11264-12263 1100 12288-13287 1101 13312-14311 1110 14336-15335 1111 15360-16359
Schreiben Sie also eines der angegeben
Bitmuster in die Bits 4-7 des Registers
24 des VIC, so beginnt für den VIC der
Bildschirmspeicher bei der angegebenen
Adresse. Sie sehen nun den Inhalt dieses
RAMs auf dem Monitor, jedoch ist der
Cursor verschwunden! Das liegt daran, daß das Betriebssystem des 64 ers ebenfalls wissen muß, wo sich der neue Bildschirmspeicher befindet, und jetzt den
Cursor noch an der alten Adresse blinken
läßt. Doch auch dies läßt sich beheben, nämlich indem Sie schlichtweg die neue Registeradresse dividiert durch 256 in
die Adesse 648 schreiben. Dies ist ein
Byte, das vom Betriebssystem benutzt
wird, und wo es feststellt, wo sich der
momentane Bildschirmspeicher befindet.
Diese Adresse ist übrigens auch sehr
wichtig, wenn Sie den VIC in einen anderen 16 K-Bereich verschieben. Bedenken
Sie, daß Sie ja auch den Bildschirmspeicher absolut mitverschoben haben! Somit
muß beim Verlegen des VIC-Bereichs auch
die neue Bildschirmadresse in dieser
Adresse mit angegeben werden.
Desweiteren ist noch zu sagen, daß sich
mit dem Bildschirmspeicher ebenfalls die
Spriteblockregister mitverschieben.
Spriteblockregister 0 liegt ja normalerweise bei 2040 . Verschieben Sie jetzt
den Bildschirmspeicher beispielsweise
nach 3072, so müssen Sie bedenken, daß
das neue Spriteblockregister 0 jetzt bei
2040-1024=1016 liegt!
So. Das wars dann endgültig in Sachen Grafik. Ich hoffe, es hat Ihnen ein wenig Spaß gemacht und daß jetzt der VIC
in Ihrem 64 er heißlaufen wird. In nächster Zukunft ist für mich hier kein Kurs
mehr geplant, deshalb verabschiede ich
mich bis auf weiteres von Ihnen - Servus Ihr Uli Basters