
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 ver-
schieben. Probieren Sie doch einmal aus,
was geschieht, wenn Sie verschiedene
Werte in diese unteren 3 Bits hinein-
schreiben. Der Rest des Registers sollte
natürlich unverändert bleiben, um unan-
genehme 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 kennenge-
lernten Bits zur Bildschirmmanipulation
einen sogenannten "SoftScroll" realisie-
ren. Dies ist das weiche Schieben des
Bildschirms nach links, rechts, oben
oder unten, wie Sie es aus manchen Spie-
len kennen (klassisches Beispiel ist
wohl der schon uralte Megahit "Uri-
dium"). Dies funktioniert denkbar ein-
fach: zunächst wird der Bildschirm in
der entsprechenden Scrollrichtung ver-
kleinert. Als Beispiel nehme ich hier
einmal einen Softscroll nach links. Dem-
nach müssen wir die Spaltenzahl verkür-
zen 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 nicht-sichtbare Zeichen in den Bild-
schirm "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 Durch-
gang, 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 Umkopie-
ren der Zeichen dauert zu lange, so daß
der Scroll "zittert". So etwas ist wir-
klich 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 An-
wendung, 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 wak-
keln würde? Nichts einfacher als das,
wir müssen lediglich ein paar Zufalls-
werte 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 De-
monstationen.
Nun noch ein paar Worte zum Speicher-
handling des VIC. Wie ich Ihnen ja schon
im Grafikkurs Teil 5 erzählte kann der
VIC lediglich 16 KByte Speicher adres-
siere. Im Normalfall belegt er den Spei-
cher von Adresse 0 bis 16383, was zur
Folge hatte, daß wir Grafikdaten immer
nur in diesem Bereich untergebracht ha-
ben. Dies brachte jedoch häufig Schwie-
rigkeiten 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 Speicherbe-
reich eines weiteren Bausteins des
64ers, 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 Kombi-
nationen:
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 Grafik-
funktionen verschieben sich somit näm-
lich ebenfalls um 16 KB! Das heißt im
Klartext, daß beispielsweise der Bild-
schirmspeicher 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 lie-
gen die möglichen Grafikbereiche jetzt
bei 0+16384=16384 und 8192+16384=24576!
Nun noch zu einem Thema, das uns eben-
falls aus Speicherplatzgründen sehr
nützlich ist. Es gibt nämlich auch die
Möglichkeit, die Basisadresse des Bild-
schirmspeichers innerhalb des 16KB-
Bereichs des VIC zu verschieben. Das hat
den Vorteil, daß man sehr schnell zwi-
schen 2 Bildschirmen hin- und herschal-
ten kann, oder aber auch, daß man die
Farbdaten einer Grafik an einer anderen
Stelle ablegen kann, wenn man den norma-
len Bildschirmspeicher für andere Dinge
nutzen möchte. Dies ist ein denkbar ein-
facher Vorgang. Die Bits 4-7 aus Regi-
ster 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 64ers eben-
falls wissen muß, wo sich der neue Bild-
schirmspeicher 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 ande-
ren 16K-Bereich verschieben. Bedenken
Sie, daß Sie ja auch den Bildschirmspei-
cher 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 normaler-
weise 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 we-
nig Spaß gemacht und daß jetzt der VIC
in Ihrem 64er heißlaufen wird. In näch-
ster Zukunft ist für mich hier kein Kurs
mehr geplant, deshalb verabschiede ich
mich bis auf weiteres von Ihnen - Servus
Ihr Uli Basters