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.