Magic Disk 64

home to index to text: MD9005-KURSE-GRAFIKKURS_TEIL_6-4.txt
MD9005-KURSE-GRAFIKKURS_TEIL_6-4.koala.png

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

Valid HTML 4.0 Transitional Valid CSS!