C 64-Kurs
Grafik-Grundlagen
4/84, S. 119-125

Reise durch das Wunderland der Grafik

Begleiten Sie uns auf einer abenteuerlichen, aber ungefährlichen Reise durch das Wunderland der Grafik. Entdecken Sie die (fast) grenzenlosen Grafikmöglichkeiten des Commodore 64.

Ist es Ihnen auch so ergangen: Sie lesen Testberichte über den Commodore 64, seine hervorragenden Grafikmöglichkeiten, eine Auflösung von 320 x 200 Punkten, und Ihnen schweben die phantastischen Abbildungen von Computergrafiken vor, die Sie nun auch alle selbst realisieren können, wenn Sie diesen Computer in Händen halten. Dann, nach mehr oder weniger vielen Anstrengungen, sitzen Sie vor Ihrem eigenen Commodore 64, neben sich das 170 Seiten dicke Handbuch, und arbeiten sich durch alles hindurch. Aber wo ist diese schöne Grafik? Nachdem Sie frustriert ein paar Sprites über den Bildschirm ziehen ließen und die Ballspiele aus dem Handbuch anfangen, Sie zu langweilen, geht die Suche los, wie man denn nun eine hübsche dreidimensionale Grafik auf den Bildschirm zaubern kann: Im Handbuch ist nichts zu finden. Dann gibt es nur zwei Möglichkeiten: Entweder Sie lassen die Grafik Grafik sein oder Sie beginnen eine Odyssee durch Buchläden, Computerzeitschriften und auch durch die Speicherzellen Ihres Computers, um sie nach langen Irrwegen endlich zu finden: die hochauflösende Grafik.

Wenn Ihre Barschaft es erlaubt, können Sie sich natürlich einiges an Schweiß ersparen: Inzwischen wird ja eine Reihe von mehr oder weniger brauchbarer Grafik-Software angeboten. Aber was Sie nicht bezahlen können, ist eine Menge von Erkenntnissen über die Möglichkeiten, die – verborgen hinter dornigen POKE-Hecken – darauf warten, von Ihnen wie Dornröschen wachgeküßt zu werden. Glauben Sie mir, diese Küsse sind es wert, sich in das Byte-Gewirr zu stürzen, zumal ich versuchen werde, Ihnen dazu den von mir schon gebahnten Weg hier und in den kommenden Folgen zu zeigen. Bei der Gelegenheit werden Sie feststellen, daß Sie nicht nur Dornröschen (die hochauflösende Grafik) wachgeküßt haben, sondern – erinnern Sie sich an die Gebrüder Grimm – auch das ganze Volk im Schloß fing an zu leben. Mit nüchternen Worten: Sie machen sich dabei eine Menge anderer, sonst schlafender Eigenschaften Ihres Computers zunutze.

Die Grafikmöglichkeiten des C 64

Noch einige Worte, bevor wir an die Arbeit gehen: Wissen Sie eigentlich, welche Grafik-Vielfalt der Commodore 64 hat? In Bild 1 ist sie aufgeführt.

Bild 1. Die Vielfalt der Grafikmöglichkeiten des Commodore 64

Im Handbuch finden Sie davon nur zwei angegeben: Den »normalen« Zeichensatz und die »normalen« Sprites. Zu dem Schema in Bild l gehören eigentlich noch einige Kleinigkeiten, auf die wir noch stoßen werden. So kann beispielsweise der Bildschirm auf verschiedene Grafikarten aufgeteilt werden und so weiter. Aber um so weit zu gelangen, müssen wir uns erst eine Weile durch die Byte-Dornen gehauen haben.

Sie dürfen schon Ihren Computer anschalten, denn wir werden bei der nun folgenden Reise durch das Grafik-Land einiges ausprobieren. Allerdings werden wir uns vorübergehend dabei von den Gebrüdern Grimm trennen müssen, denn die Landschaft, durch die wir uns dabei bewegen, paßt besser zum Wunderland der kleinen Alice: Ganze Landschaftsteile sind da und doch nicht da, Gebäude verschwinden und andere tauchen wieder auf, die Zeit wird gedehnt, Spiegelbilder erscheinen.

Wir fangen zunächst mal damit an, den Ast, auf dem wir sitzen, abzusägen. Damit Sie sich trotzdem keinen Schaden zufügen, sollten Sie vorher noch alle Programme, die Sie eventuell noch im Computer haben, auf Kassette oder Diskette abspeichern. Erledigt? Dann geben Sie doch jetzt mal folgendes ein:

POKE 1,PEEK(1) AND 252 »RETURN«

Jetzt ist Ihr Computer scheintot. Kein Cursor mehr, keine Reaktion auf Tastendrucke. Aber dafür haben Sie jetzt tatsächlich die 64 KBytes RAM (Worterklärungen siehe Kasten), die in der Kaltstartmeldung des C 64 angekündigt sind, zur freien Verfügung (Bild 2). Nur ist nichts damit anzufangen! Die 65536 freien Bytes Speicherkapazität liegen wie jungfräulicher Ackerboden vor uns und wir Benutzer sind ihnen völlig egal: Es muß also außer dem, was über einen Adreßbus von 16 Bit normalerweise erreichbar ist, noch etwas anderes vorhanden sein, etwas, das uns die Kommunikation mit unserem Computer erlaubt.

Bild 2. Die 64 KByte RAM pur

Natürlich ist das auch jetzt vorhanden, nur der 64 sieht es nicht. Das zwingt uns leider dazu, einige für ihn verschwundene Gebäude durch Aus- und Einschalten schlagartig wieder sichtbar zu machen. Welche Gebäude sieht der Computer jetzt wieder?

Da ist zunächst einmal das Betriebssystem (auch Kernal-ROM genannt). Alle Hausnummern unserer Byte-Straße von 57344 bis 65535 haben noch eine Etage außer dem RAM-Erdgeschoß: Im ersten Stock liegt dort das Kernal-ROM (Bild 3).

Bild 3. So ist das Kernal-ROM plaziert

Dieses Kernal-ROM ist sozusagen der Organisator unseres Computers – nichts geht ohne ihn, wie wir ja eben, als er weggeschaltet war, gesehen haben. Allerdings braucht auch der beste Organisator noch einige andere lebenswichtige Partner. Damit wir überhaupt mit dem Computer in Verbindung treten können, sind noch einige weitere Hausnummern zumindest einstöckig (Bild 4).
53248 bis 57343. Ein- und Ausgabebausteine
40960 bis 49151. Basic-ROM

Es gibt sogar Häuser mit einem zweiten Stock.
53248 bis 57343. Zeichen-ROM

Bild 4. Die Ein-/Ausgabebausteine, das Zeichen- und Basic-ROM mit der entsprechenden Speicherbelegung

Zum Zeichen-ROM werden wir später kommen und die Ein- und Ausgabebausteine werden uns eine ganze Weile beschäftigen. Ohne Basic-ROM könnten wir nur in Maschinensprache unseren C 64 programmieren und eben nicht in Basic.

Wie kann unser Computer diese anderen Etagen nützen? Es sind ja insgesamt statt 64 KByte jetzt 88 KByte oder exakt 90112 Zimmerfluchten zu je 8 Bit, auf die man gelangen können muß. Man kann sich das so vorstellen, daß zum Beispiel zwischen den Hausnummern 53248 und 57343 einen Augenblick lang die Ein- und Ausgabebausteine stehen, dann verschwinden sie und im nächsten Augenblick steht das Zeichen-ROM dort, dann wieder die Ein-/Ausgabebausteine und so weiter. Also tatsächlich ein Wunderland, das wir an dieser Byte-Straße finden. Gesteuert wird dieses Auftauchen und Verschwinden vom Betriebssystem. In Wirklichkeit bleibt alles an seinem Platz.

Man sollte meinen, daß der Commodore 64 durch diese ganzen Zaubereien, denen er sich da widmen muß, wenig Zeit für uns Benutzer hat! Aber weit gefehlt, unser Computer ist so schnell, daß für uns seine Zeit gedehnt aussieht. Der Puls des Computers rast mit zirka 1 Million Schlägen pro Sekunde, während unser Puls rund einhalbmal in der Sekunde schlägt: In der Zeit also, in der unser Augenlid einmal zwinkert, hat der Computer schon tausende von Operationen vorgenommen und steht gewissermaßen mit den Fingern trommelnd bereit, unser Kommando endlich zu empfangen. Eigentlich langweilt er sich die meiste Zeit. Wie man seine Leistungsfähigkeit effektiver als mit Basic-Programmen ausnutzen kann, dazu werden wir in dieser Serie auch noch kommen.

Zunächst wollen wir uns mal ein wenig umsehen in unserem Speicher. Dazu kann das angefügte Programm »SpeiLu« benutzt werden (siehe Listing). Ziemlich primitiv, für unsere Zwecke zunächst aber schon ausreichend, ist dieses kleine Programm:

10 INPUT"STARTADRESSE";A
20 FOR I=A TO A+255:PRINT PEEK(I);:NEXT
30 GET A$:IF A$="" THEN 30
40 IF A$="←" THEN A=I:GOTO 20

Geben Sie nach dem RUN jetzt mal als Startadresse 6000 ein. Es erscheinen Blöcke von Nullen und Blöcke von 255ern (meistens). Wenn Sie »←« drücken, kommen die nächsten 256 Bytes auf den Bildschirm und so weiter. So sieht ein leerer Speicher aus. Drücken Sie irgendeine Taste (außer »←«) und starten Sie mit RUN erneut. Mit der Eingabe von 2048 blicken wir in die ersten 256 Bytes unseres Basic-RAMs. Der wüste Zahlensalat in der oberen Hälfte des Bildschirms ist die Computer-Version unseres Programms. Danach ist dann wieder leerer Speicher zu sehen.

Im Speicher ist einiges los

Wieso eigentlich 2048 als Start des Basic-RAMs? Warum nicht 0? Sehen wir uns doch mal mit ein bißchen Geduld den RAM-Bereich von 0 bis 2048 an, also Starten des Programms und Eingeben von 0: Wir sehen einen nahezu vollen Speicher. Das ist die sogenannte Zero-Page, zu deutsch Null-Seite. Voll ist die Seite, weil sie uns das Betriebssystem abgezwackt hat, um dort eine Reihe wichtiger Werte zu speichern. Wie wichtig das ist, haben wir gesehen, als wir den Wert 55 des ersten Byte (auf dem Bildschirm jetzt die zweite Zahl oben links) durch unser Astabsägen verändert haben. Wenn wir jetzt »←« drücken, sehen wir die nächste Seite (page 1) auf dem Bildschirm. Auch diese Seite – obwohl sie jetzt größtenteils leer ist (Nullen und 255er-Blöcke) – gehört dem Betriebssystem: Es ist der sogenannte Prozessorstapelspeicher. Drücken wir nochmal »←«, dann erscheint Seite 2 (Adresse 512 bis 767). Hier ist zwar auch vieles leer (viele Nullen), aber wenn wir uns recht erinnern, sah der normale leere Speicher anders aus. Auch diese Seite hat der Computer unserem Zugriff durch das normale Basic entzogen und speichert dort einige wichtige Angaben. Die Seite 3 erfüllt einen ähnlichen Zweck und außerdem befindet sich dort von 828 bis 1019 noch der Kassettenpuffer. Damit hat uns das Betriebssystem unseres Computer also schon das erste KByte des Speichers gemopst. Wenn Sie sich entsinnen, habe ich vorhin erwähnt, daß das Basic-RAM bei 2048 beginnt. Wie sieht es also im Bereich des zweiten KByte aus? Wenn wir uns mittels »←« die nächsten vier Seiten ansehen, marschieren stramme Kolonnen von Zahlen zwischen 48 und 87 (und viele 32) auf. Das sind Bildschirm-Codes von Zahlen und Leerstellen: Hier haben wir den Bildschirmspeicher mit insgesamt 1000 Bytes und dazu noch einige Bytes, die uns bei den Sprites beschäftigen werden. Jetzt sind wir wieder beim Basic-RAM ab 2048 angelangt. Haben Sie noch Lust? Dann probieren Sie noch ein bißchen weiter und sehen sich zum Beispiel das Basic-ROM zwischen 40960 und 49151 an oder das Betriebssystem oder ...

Dabei werden Sie dann nochmal einen freien RAM-Bereich zwischen 49152 und 53247 finden (Bild 5), der aber normalerweise nicht für Basic erreichbar ist. Jetzt kennen wir – bis auf einige weitere Merkwürdigkeiten, zum Beispiel die versprochenen Spiegelbilder – unseren Computerspeicher schon ganz gut und können uns dem für die Grafik wichtigsten Speicherteil zuwenden: den Ein- und Ausgabebausteinen.

Bild 5. Die unteren 2 KByte des RAM-Bereichs sind ebenfalls durch das Betriebssystem belegt

Der VIC-II-Chip

Verschaffen wir uns zunächst einen Überblick:

Bild 6. Die Ein-/Ausgabebausteine sind noch in weitere Untergruppen eingeteilt

Von nun an wird uns Dornröschens Schloß, der VIC-I-Chip, ständig beschäftigen. Damit die Orientierung leichter fällt, ist die Tabelle 1 abgebildet, in der alle Registerinhalte wie auf einem Grundriß verzeichnet sind. Auf den ersten Blick sieht das zugegebenermaßen reichlich verwirrend aus – lassen Sie sich nicht erschrecken.

Sie stehen jetzt sozusagen mitten im Dornengestrüpp, und wenn wir gemeinsam den Weg hindurchgefunden haben, wird Ihnen alles verständlich sein, was da steht. Fangen wir mit der Hausnummer 53272 an:

Wenn sie Lust haben, können Sie sich den Inhalt der Adresse 53272 einmal mit dem beigefügten Programm »SpeiLu« betrachten. Aus der Registerübersicht werden Sie beim Nachschlagen sehen, daß die Bit (Zimmer) 7-4 den Ort des Bildschirms im Speicher anzeigen und die Bit 3-0 im Normalfall etwas damit zu tun haben, wo die Zeichen (Buchstaben, Zahlen, Grafikzeichen etc.) abrufbar sind. Bevor wir daran gehen, dieses Byte zu verändern, wollen wir es im Urzustand erstmal unter die Lupe nehmen. Wenn Sie

PRINT PEEK(53272)

eingeben, werden Sie den Wert 21 ausgedruckt bekommen. Haben Sie sich diesen Speicherplatz mittels »SpeiLu« angesehen, dann fanden Sie etwas wie

00010101

was der Binärausdruck der Dezimalzahl 21 ist. Aber dazu kommen wir noch. Das Betriebssystem setzt nach dem Einschalten das Byte 53272 automatisch auf diesen Wert, und wenn Sie sich an die Speicherreise mit dem kleinen Vierzeilen-Programm erinnern, dann wissen Sie auch noch, daß der Bildschirmspeicher damit auf die Startadresse 1024 festgelegt ist.

Wie Sie ebenfalls wissen, hat der Commodore 64 im Normalfall 40 Zeichen pro Zeile und 25 Zeilen, was insgesamt 1000 Zeichen pro Bildschirm ergibt. Deswegen hat der Bildschirmspeicher eine Ausdehnung von 1000 Bytes: von 1024 bis 2023. Die Aufteilung dieser 1000 Speicherplätze auf den Bildschirm ersehen Sie aus dem Handbuch auf Seite 138. Was ist nun drin in den Bildschirmspeicherstellen? Probieren wir es aus! Tippen Sie doch mal ein:
»shift + clear home« ABC »Return«

Natürlich taucht jetzt eine Fehlermeldung auf, die uns aber nicht kümmern soll. Jetzt steht ganz links oben (in Speicherplatz 1024) das A, dann B (1025) und C (1026). Nun wollen wir mal sehen, was der Computer sich merkt:

PRINT PEEK(1024), PEEK(1025, PEEK(1026) »Return«

Es erscheint 1    2    3.

Wenn also auf dem Bildschirm ein A vorhanden ist, hat der Computer in der dazugehörigen Stelle seines Speichers eine 1 stehen, bei Beine 2, bei C eine 3 und so weiter. Lassen Sie uns den Bildschirm nochmal löschen mit »shift + clear home«. Dann gehen wir mit dem Cursor etwas abwärts und poken diese Kennzahlen in den Bildschirmspeicher:

POKE 1024,1:POKE 1025,2: POKE1026,3 »Return«

Nach dem Return ist anscheinend nichts passiert. Erst wenn Sie mit dem Cursor dorthin fahren, wo eigentlich ABC stehen sollte, tauchen diese Buchstaben unter dem Cursor auf. Der Grund für dieses Verhalten liegt sicherlich darin, daß die Kennzahl 1 in der Speicherzelle 1024 alleine nicht genügt, das A sichtbar zu machen. Es hat automatisch die Farbe des Hintergrundes. Einem Zwilling des Bildschirmspeichers sind wir bei den Ein- und Ausgabebausteinen schon begegnet: dem Farb-RAM zwischen 55296 und 56295. Wie er aufgeteilt ist (Bild 7) steht im Handbuch Seite 139 zusammen mit den Farbkennzahlen.

Bild 7. Ein Zeichen auf dem Bildschirm setzt sich aus der Bildschirm- und der Farbinformation zusammen.

Wenn wir jetzt zum Beispiel noch eingeben:

POKE 58296, 1:POKE 55297,3:POKE 55298,7 »Return«

dann sehen wir ein weißes A, ein cyanfarbenes B und ein gelbes C.

Übrigens, wenn Ihnen die aktuelle Farbe des Cursors oder der gerade verwendeten Zeichen nicht gefällt, dann probieren Sie doch mal

POKE 646, Farbkennzahl.

Und weil wir gerade bei den Farben sind, die Speicherzellen 53280 und 53281 steuern, mit Farbkennzahlen belegt, die Rahmen- und die Hintergrundfarbe. Mir persönlich gefällt zum Beispiel folgende Kombination sehr gut (auf Schwarzweiß-Bildschirm)

POKE 53280,11:POKE 53281,11: POKE 646,0 »Return«

Nun zu den Zeichen. Woher weiß der Computer, daß er ein A drucken muß, wenn eine 1 im Bildschirmspeicher steht? Das sagt ihm das Betriebsystem. Es teilt ihm mit, daß im Byte 53272 des VIC-II-Chips eine Kennzahl steht (Bit 1-3, Bit 0 wird nicht beachtet), die ihm wiederum sagt, wo die Muster für alle Zeichen zu finden sind. Merkwürdigerweise deutet diese Kennzahl auf eine Startadresse der Zeichenmuster von 4096! Das Zeichen-ROM, das wir bei unserer anfänglichen Speicherbegehung als 2. Stock im Bereich 53248 bis 57343 kennengelernt haben, ist davon meilenweit entfernt! 4096 liegt außerdem mitten in einem Bereich, der ständig von Basic-Programmen überschrieben wird.

Die genaue Lösung des Rätsels soll erst in einer der nächsten Folgen gegeben werden. Aufgrund einer technischen Eigenart des VIC-I-Chips werden vom Zeichen-ROM zwei Geisterbilder im Bereich 4096 bis 8191 und im Bereich 36864 bis 40959 erzeugt. Der VIC-II-Chip »meint«, er hole seine Zeichen-Muster aus diesen Bereichen. In Wirklichkeit bezieht er sie im Normalfall immer aus dem Zeichen-ROM. Das ist eine Eigenart, die so recht in Alices Wunderland paßt!

Wie sehen diese Zeichen-Muster aus? Auch dazu können Sie das Programm »SpeiLu« benutzen. Wenn Sie sich damit beispielsweise mal das A ansehen, finden Sie ein Muster, wie es in Bild 8 dargestellt ist.

Bild 8. Das Zeichenmuster des Buchstaben A

Dieses 8 x 8-Gitter (auch Matrix genannt) enthält also das Abbild des Zeichens A. Alle Zeichen sind auf diese Weise als Punktmuster gespeichert in jeweils acht Speicherzellen (hier also von 53256 bis 53263). Ein dunkles Feld bedeutet ein gesetztes Bit (=1; im Zimmer ist etwas drin), ein helles Feld ein gelöschtes Bit (=0; das Zimmer enthält nichts).

Das Zeichen-ROM hat an nullter Stelle von 53248 bis 53255 das Zeichen mit dem Bildschirmcode 0 (den Klammeraffen @), an erster Stelle von 53256 bis 53263 – wie wir sehen – das Zeichen mit dem Bildschirmcode 1 (also das A) und so weiter nacheinander in Form von je acht Bytes als Bit-Muster gespeichert. Wenn Sie im Handbuch die Seite 133 f. aufschlagen, dann können Sie die Tabelle 2 mit dem Inhalt des Charakter-ROMs besser verstehen.

Probieren Sie mal aus, sich die einzelnen Zeichen mit dem Programm »SpeiLu« durch Eingabe der Bildschirmcodes (im Handbuch bis 127 als Pokes bezeichnet) abbilden zu lassen.

Das Programm »SpeiLu« (der Name kommt von »Speicher-Lupe«) enthält noch einige für Sie bislang noch geheimnisvolle Einzelheiten: die Hexadezimal- und die Binärzahlen, das Interrupt-System, das Kopieren des Zeichen-ROM. Dies alles hängt zusammen mit der Frage: Wie kann man sich eigene Zeichen bauen und verwenden? Wir werden sie in der nächsten Folge gemeinsam beantworten.

Mit dem bisher zurückgelegten Weg durch das Dornengestrüpp sind wir unserem Ziel, der hochauflösenden Grafik, schon ein ganzes Stück nähergekommen. Ich hoffe, daß Sie nach der Ruhepause bis zur nächsten Folge die zweite Etappe der Expedition zu Dornröschen zusammen mit mir durchführen werden.

(Heimo Ponnath)
1 rem**************************************************************************
2 rem*                                                                        *
3 rem*                                                                        *
4 rem*                             s p e i l u                                *
5 rem*                                                                        *
6 rem*                                                                        *
7 rem*   manfred thoma  +  heimo ponnath  2102 hamburg 93  veringstrasse 82   *
8 rem*                                                                        *
9 rem**************************************************************************
10 poke52,48:poke56,48:poke53280,6:poke53281,6:poke646,1
20 te$=" adresse  dez. hexa   binaer    grafik"
100 printchr$(147)"  darstellung von zeichen und speicher"
105 print:printchr$(18);tab(10);"====================="
110 printchr$(18);tab(10)"thoma/ponnath hamburg"
115 printchr$(18);tab(10);"====================="
120 print:print:print"     (1) einsehen in einen speicher"
130 print:print"     (2) darstellung eines zeichens"
150 print:print:print"       bitte kennziffer waehlen !"
160 geta$:ifa$=""then160
170 a=val(a$):ifa<0ora>2then160
180 onagosub1000,2000
190 goto100
1000 printchr$(147);chr$(18);tab(2);"darstellung eines speicherplatzes:"
1010 print:print"  speicheradresse (0-65535) eingeben"
1020 input"adresse :";ad:ifad<0orad>65535thenreturn
1040 de=peek(ad):print:print:gosub10000:gosub20000:printte$:print:gosub30000
1050 print:print:goto1010
2000 printchr$(147);chr$(18);tab(3);"zeichen-darstellung (character)"
2010 ifts=0thengosub40000
2020 print:print"     gebe den 'bildschirm code' des"
2030 print"      darzustellenden zeichens ein"
2040 print"   = siehe handbuch seite 133 - 134 ="
2050 print:print"  zurueck mit zahl ausserhalb 0 und 511":print
2060 print,:input"code :";a:ifa<0ora>511thenreturn
2070 print:printte$:print
2080 forad=12288+8*ato12288+8*a+7
2100 de=peek(ad):gosub10000:gosub20000:gosub30000:nextad
2110 geta$:ifa$=""then2110
2120 return
10000 he$="":h$="0123456789abcdef":d=int(de/16):he$=mid$(h$,d+1,1):d=de-d*16
10010 he$=he$+mid$(h$,d+1,1):return
20000 bi$="":di=de
20010 di=di/2:d$="0":ifdi<>int(di)thend$="1"
20020 di=int(di):bi$=d$+bi$:ifdi>0then20010
20030 iflen(bi$)<8thenbi$="0"+bi$:goto20030
20040 return
30000 printtab(7-len(str$(ad)))ad;tab(13-len(str$(de)))de;tab(16)he$;tab(21)bi$;
30010 fori=1to8:w$=mid$(bi$,i,1)
30020 ifw$="1"thenprinttab(30+i)chr$(18);" ";chr$(146);:goto30040
30030 printtab(30+i)".";
30040 nexti
30050 print: return
40000 print:print"kopieren der zeichen ins ram (ab 12288)"
40010 print"            bitte warten"
40020 poke56334,peek(56334)and254:poke1,peek(1)and251
40030 fori=0to4095:poke12288+i,peek(53248+i):nexti
40040 poke1,peek(1)or4:poke56334,peek(56334)or1
40050 poke53272,(peek(53272)and240)+12:ts=1:return
Listing. Das Programm »SpeiLu« (Speicherlupe)
Register Adresse Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
0 53248 X-Position des Sprite Nr. 0. Dazu muß Register 16 beachtet werden
1 53249 Y-Position des Sprite Nr. 0
2 53250 X-Position des Sprite Nr. 1. Auch dazu, wie zu allen folgenden Sprites, muß Register 16 beachtet werden.
3 53251 Y-Position des Sprite Nr. 1
4 53252 X-Position des Sprite Nr. 2. s. o.
5 53253 Y-Position des Sprite Nr. 2
6 53254 X-Position des Sprite Nr. 3. s. o.
7 53255 Y-Position des Sprite Nr. 3
8 53256 X-Position des Sprite Nr. 4. s. o.
9 53257 Y-Position des Sprite Nr. 4
10 53258 X-Position des Sprite Nr. 5. s. o.
11 53259 Y-Position des Sprite Nr. 5
12 53260 X-Position des Sprite Nr. 6. s. o.
13 53261 Y-Position des Sprite Nr. 6
14 53262 X-Position des Sprite Nr. 7. s. o.
15 53263 Y-Position des Sprite Nr. 7
16 53264 Spr. 7,
msb X-Pos.
Spr. 6,
msb X-Pos.
Spr. 5,
msb X-Pos.
Spr. 4,
msb X-Pos.
Spr. 3,
msb X-Pos.
Spr. 2,
msb X-Pos.
Spr. 1,
msb X-Pos.
Spr. 0,
msb X-Pos.
17 53265 msb des Rasterregisters (Reg. 18) Schaltbit für veränderten Hintergundfarbmodus
1 = eingeschaltet
Schaltbit für Hochauflösungsmodus
1 = eingeschaltet
Schaltbit für Bildschirm »aus«
0 = normaler Bildschirm
1 = Bildschirmfarbe gleich Hintergrundfarbe
Schaltbit für Zeilenzahl
0 = 24 Zeilen
1 = 25 Zeilen
Wert der Zeilenverschiebung in Y-Richtung beim Smooth Scrolling
18 53266 Rasterregister. Dazu kommt das msb in Bit 7, Register 17
19 53267 Lichtgriffel X-Position
20 53268 Lichtgriffel Y-Position
21 53269 Ein- und Ausschalten von Sprites. 0 = Sprite aus. 1 = Sprite an
Sprite 7 Sprite 6 Sprite 5 Sprite 4 Sprite 3 Sprite 2 Sprite 1 Sprite 0
22 53270 Reset-Bit, muß 0 sein, damit VIC-II-Chip arbeitet Schaltbit für Mehrfarbmodus
1 = eingeschaltet
Schaltbit für Spaltenzahl
0 = 38 Spalten
1 = 40 Spalten
Wert der Spaltenverschiebung in X-Richtung beim Smooth Scrolling
23 53271 Sprite-Vergrößerung in Y-Richtung. 0 = normale Größe. 1 = = doppelte Größe.
Sprite 7 Sprite 6 Sprite 5 Sprite 4 Sprite 3 Sprite 2 Sprite 1 Sprite 0
24 53272 Startadresse des Bildschirmspeichers
  • Startadresse des Speicherbereichs, in dem die Zeichen als Punktmatrizen abzurufen sind.
  • Startadresse der Bit-Map
25 53273 Interrupt-Flaggen-Register Interrupt Lichtgriffel-Interrupt-Flagge Sprite/Sprite-Kollision Sprite/Hintergrund-Kollision Raster-Interrupt-Flagge
26 53274 Interrupt-Masken-Register Interrupt Lichtgriffel-Interrupt-Maske Sprite/Sprite-Koll.-Maske Sprite/Hintergrund-Kollision Maske Raster-Interrupt-Maske
27 53275 Sprite/Hintergrund-Prioritätenregister. 0 = Sprite hat Priorität. 1 = Hintergrund hat Priorität
Sprite 7 Sprite 6 Sprite 5 Sprite 4 Sprite 3 Sprite 2 Sprite 1 Sprite 0
28 53276 Sprite-Mehrfarbmodus-Register. 0 = Normaldarstellung. 1 = Mehrfarbmodus-Darstellung
Sprite 7 Sprite 6 Sprite 5 Sprite 4 Sprite 3 Sprite 2 Sprite 1 Sprite 0
29 53277 Sprite-Vergrößerung in X-Richtung. 0 = normale Größe. 1 = doppelte Größe
Sprite 7 Sprite 6 Sprite 5 Sprite 4 Sprite 3 Sprite 2 Sprite 1 Sprite 0
30 53278 Sprite/Sprite-Kollision. 0 = keine Berührung. 1 = Berührung
Sprite 7 Sprite 6 Sprite 5 Sprite 4 Sprite 3 Sprite 2 Sprite 1 Sprite 0
31 53279 Sprite/Hintergrund-Kollision. 0 = keine Berührung. 1 = Berührung
Sprite 7 Sprite 6 Sprite 5 Sprite 4 Sprite 3 Sprite 2 Sprite 1 Sprite 0
32 53280 unbenutzt Farbe des Bildschirmrahmens
33 53281 unbenutzt Hintergrundfarbe Nr. 0 (normale Hintergrundfarbe)
34 53282 unbenutzt Hintergrundfarbe Nr. 1
35 53283 unbenutzt Hintergrundfarbe Nr. 2
36 53284 unbenutzt Hintergrundfarbe Nr. 3
37 53285 unbenutzt Sprite-Mehrfarben-Register Nr. 0
38 53286 unbenutzt Sprite-Mehrfarben-Register Nr. 1
39 53287 unbenutzt Sprite 0, Farbe
40 53288 unbenutzt Sprite 1, Farbe
41 53289 unbenutzt Sprite 2, Farbe
42 53290 unbenutzt Sprite 3, Farbe
43 53291 unbenutzt Sprite 4, Farbe
44 53292 unbenutzt Sprite 5, Farbe
45 53293 unbenutzt Sprite 6, Farbe
46 53294 unbenutzt Sprite 7, Farbe
Tabelle 1. Registerübersicht des VIC-II-Chips
Block Adressenbereich Zeichen Muster abrufbar im Programm mit Code
0 53248 - 53759 Satz 1 von 0 bis 63 (0 bis ?) 0 - 63
53760 - 54271 Satz 1 von 64 bis 127 (Grafikz.) 64 - 127
54272 - 54783 Satz 1 von 0 bis 63 (Reversed) 128 - 191
54784 - 55295 Satz 1 von 64 bis 127 (Reversed) 192 - 255
1 55296 - 55807 Satz 2 von 0 bis 63 (kleine Buchst.) 256 - 319
55808 - 56319 Satz 2 von 64 bis 127 (Großbuchst. + Grafikz.) 320 - 383
56320 - 56831 Satz 2 von 0 bis 63 (Reversed) 384 - 447
56832 - 57343 Satz 2 von 64 bis 127 (Reversed) 448 - 511
Tabelle 2. Inhalt des Zeichen-ROMs
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →