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