Grafikkurs : Teil 1
"Picasso und all die andern..."
---------------------------------------
Hallo Leute, hier bin ich wieder, diesen
Monat jedoch mit einem NEUEN Kurs. Der
Basickurs für Einsteiger ist jetzt abge-
schlossen, nun geht es weiter mit einem
Grafikkurs, der ebenfalls den Einstei-
gern gewidmet sein soll. "Buuuh, Be-
trug!" werden jetzt die Profis unter
Ihnen jetzt schreien, "wir wollen end-
lich mal was Richtiges !" - doch keine
Panik. Dieser Kurs wird nur 3 Teile lang
sein, und für danach halten wir dann
einen Leckerbissen für Sie, den Profi
bereit. Es geht anschließend nämlich
ebenfalls mit Grafik weiter, doch dann
wollen wir uns in die tiefen Abgründe
der Raster-IRQ-Programmierung abseilen,
die für manche von Ihnen bestimmt ein
kleines Hindernis darstellen.
Doch nun wollen wir erst einmal mit dem
Einsteigerkurs loslegen, die Grafik kam
in dem Basickurs ja entschieden zu kurz;
was ich jetzt mit noch mehr Information
über dieses Thema ausgleichen möchte.
Wir werden uns in den nächsten Monaten
um die wichtigsten Grafikarten des C64
kümmern, als da wären die Sprites, die
HIRES- und MULTICOLOR-Grafiken und die
Zeichensatzveränderung und -bedienung.
In dieser Reihenfolge werden wir die
einzelnen Themen dann auch abhandeln,
und, wie Sie sich jetzt bestimmt denken
können, werden in diesem ersten Teil
gleich mit den Sprites beginnen. Zuerst
jedoch eine kleine Einleitung in Sachen
Grafik...
Die komplette Bidschirmdarstellung, das
heißt Zeichensätze, Grafik und Sprites,
werden in unserem 64er von einem Grafik-
chip verwaltet, der alle Informationen
im Speicher des 64ers in ein Signal für
einen Monitor umwandelt, damit wir die
Bits und Bytes aus unserem Computer auch
auf dem Bildschirm sehen können. Dieser
Chip hat den Namen VIC, was für "Video
Interface Controller" steht. Der VIC hat
ebenso wie der Soundchip SID (den Sie ja
noch aus dem sechsten Basickurs kennen
sollten) ein paar Steuerregister im
Ein-/Ausgabe-Bereich, den ich seiner-
seits schon im fünften Basickurs erwähn-
te. In jenem fünften Teil hatten wir ja
auch gelernt, wie das Innere unseres
64ers aussieht, daß es dort Speicherbe-
reiche gibt, die man mit sogenannten
Speicheradressen anspricht, daß ein Byte
aus acht Bit besteht, und wie man Binär-
zahlen in Dezimalzahlen umrechnet. Alle
diese Kenntnisse sind in der Grafik von
großer Bedeutung, weshalb ich Ihnen emp-
fehle, sollten Sie sich an die Gedan-
kengänge von damals nicht mehr so ganz
erinnern, sich doch noch einmal die Ma-
gic Disk 64 Ausgabe 5/89 anzuschauen.
Wie also schon gesagt, belegt der VIC
einen Bereich von 46 Bytes im Ein-
/Ausgabebereich unseres 64ers (von
Adresse 53248 bis 57344). Der SID hatte
seine erste Stelle, oder auch Basisa-
dresse genannt, bei 54272. VICs Basisa-
dresse liegt bei 53248, der ersten Spei-
cherzelle des Ein-/Ausgabebereichs also.
Diese Adresse wird nun also immer als
relativer Bezug für die einzelnen Regi-
ster herangezogen. Die Adresse 53248 ist
also das Register mit der Nummer 0,
53249 (=53248+1) ist Register 1 des VICs
und so fort...
Die Register eines Chips in unserem 64er
steuern also gewisse Funktionen des zu
ihnen gehörendem Chips. Wie Sie ja wis-
sen können Sie mit der Adresse 53280 die
Hintergrundfarbe des Bildschirms verän-
dern. Schreiben wir hier einen Wert hi-
nein, so ändert sich die Farbe entspre-
chend. Diese Adresse ist nun ebenfalls
ein Register des VICs, da ja etwas, das
mit der Bildschirmdarstellung zu tun
hat, durch sie verändert wird. Demnach
belegt diese Adresse ebenfalls ein Regi-
ster im VIC, nämlich das Zweiunddreißig-
ste. Ich gebe Ihnen am Besten einmal
eine Übersicht über alle VIC-Register
(Sie finden diese, etwas weniger kommen-
tiert, übrigens auch im Anhang N Ihres
Commodore-64 Benutzerhandbuchs) :
Adresse Register Funktion
----------------------------------------
53248 0 X-Position von Sprite 0
53249 1 Y-Position von Sprite 0
53250 2 X-Position von Sprite 1
53251 3 Y-Position von Sprite 1
53252 4 X-Position von Sprite 2
53253 5 Y-Position von Sprite 2
53254 6 X-Position von Sprite 3
53255 7 Y-Position von Sprite 3
53256 8 X-Position von Sprite 4
53257 9 Y-Position von Sprite 4
53258 10 X-Position von Sprite 5
53259 11 Y-Position von Sprite 5
53260 12 X-Position von Sprite 6
53261 13 Y-Position von Sprite 6
53262 14 X-Position von Sprite 7
53263 15 Y-Position von Sprite 7
53264 16 High-Bits Sprite-X-Pos.
53265 17 Steuerregister 1
53266 18 Rasterzeile für IRQ
53267 19 X-Anteil eines Strobes
53268 20 Y-Anteil eines Strobes
53269 21 Sprite ein-/ausschalten
53270 22 Steuerregister 2
53271 23 Spritevergrößerung in
X-Richtung
53272 24 Basisadresse Video-RAM
und Zeichensatz
53273 25 Interrupt-Request-Reg.
53274 26 Interrupt-Mask-Reg.
53275 27 Sprite im Vorder- oder
Hintergrund
53276 28 Multicolorsprite-Reg.
53277 29 Spritevergrößerung in
Y-Richtung
53278 30 Sprite-Sprite-
Kollision
53279 31 Sprite-Hintergrund-
Kollision
53280 32 Rahmenfarbe
53281 33 Hintergrundfarbe 0
53282 34 Hintergrundfarbe 1
53283 35 Hintergrundfarbe 2
53284 36 Hintergrundfarbe 3
53285 37 Multicolorfarbe 0
eines Sprites
53286 38 Multicolorfarbe 1
eines Sprites
53287 39 Farbe für Sprite 0
53288 40 Farbe für Sprite 1
53289 41 Farbe für Sprite 2
53290 42 Farbe für Sprite 3
53291 43 Farbe für Sprite 4
53292 44 Farbe für Sprite 5
53293 45 Farbe für Sprite 6
53294 46 Farbe für Sprite 7
Noch zwei kleine Bemerkungen zu der Ta-
belle:
----------------------------------------
Die zwei Steuerregister (17 und 22) ha-
ben mehrere Funktionen gleichzeitig, auf
die wir später noch genauer eingehen
werden.
Mit den Registern 18,19,20,26 und 27
werden wir hier nichts zu tun haben. Sie
haben etwas mit der Raster-Interrupt-
Programmierung zu tun, die ja, wie oben
schon erwähnt, in einem eigenen Kurs
behandelt werden soll.
Machen wir uns nun also an die Sprite-
programmierung - wie Sie aus obiger Ta-
belle ersehen können ein sehr komplexes
Thema, da wir da eine Menge Register zur
Beeinflussung von Sprites zur Verfügung
haben.
Zunächst einmal: Was ist ein Sprite?
Nun, Sprites sind ganz einfach kleine
Grafikobjekte, die man frei definieren
kann und die, unabhängig von Grafiken
oder Zeichen, über den ganzen Bildschirm
verstreut sich befinden können. Ja es
geht sogar so weit, daß man sie über
selbigen ruckelfrei bewegen kann.
Sie haben mit 100%-iger Sicherheit schon
einmal Bekanntschaft mit einem Sprite
gemacht, denn das kleine Raumschiff, daß
sie bei Ihrem letzten Ballerspiel mit
dem Joystick über den Bildschirm beweg-
ten, oder das Männchen, mit dem sie die
schöne Jungfrau neulich von dem bösen,
bösen Gorilla gerettet hatten, waren
nichts anderes als bewegte Sprites ! Der
64er stellt uns insegsamt 8 (Sprite 0-7)
davon zur Verfügung, die wir unabhängig
voneinander über den Bildschirm bewegen
können.
Doch nun zuerst einmal zum Aussehen ei-
nes solchen Sprites. Ein Sprite muß näm-
lich, bevor wir es auf den Bildschirm
bringen können erst einmal "definiert"
werden. Im Klartext heißt das, daß wir
zunächst einmal festlegen müssen, wie
unsere kleine Grafik da denn auszusehen
hat. Täten wir das nicht, so erhielten
wir nur ein paar wirre Punkte, die da
irgendwo in der Gegend herumhingen...
Ein Sprite setzt sich aus 24 mal 21
Punkten zusammen. Es kommt also zunächst
einmal darauf an, daß wir uns einen Plan
davon machen, welche Punkte in diesem
Spritefeld erscheinen sollen, und welche
nicht. Hierzu malen wir uns auf einem
Stück Papier ein Gitter mit 24 mal 21
Kästchen auf. Unser kleines Bildchen,
das wir darstellen wollen, können wir
nun durch das Ausmalen der ensprechenden
Kästchen auf Papier bringen. Sie können
hierzu übrigens auch gerne einen der
zahlreichen Spriteeditoren der Magic-
Disk verwenden, damit lassen sich ein-
zelne Korrekturen einfacher durchführen.
Doch gibt es da dann meist Probleme, die
Spritedaten in ein Programm einzubauen
(meist benötigt man hierzu etwas mehr
Verständnis der Materie). Sie sollten
Ihr erstes Sprite jedoch ruhig einmal
auf konventionelle Art und Weise, näm-
lich auf Papier, konstruieren, damit
Ihnen der Aufbau von Sprites etwas mehr
einleuchtet.