C 64
Einsteiger

Grafikprogrammierung auf dem C 64

Einfach zeigen wir Ihnen, was sich mit dem Videocontroller des C 64 alles anstellen läßt. Gestützt durch viele Basic-Beispiele lernen Sie mit Sprites, HiRes-Bildschirmen und allem was mit Grafik zu tun hat, umzugehen.

Zunächst einige allgemeine Informationen. Der Bildschirm des C 64 verfügt über 1000 Positionen. Normalerweise beginnt der Bildschirm ab Adresse 1024 ($0400) und endet bei Adresse 2023. Jede dieser Adressen kann 8 Bit speichern. Das entspricht einer beliebigen ganzen Zahl zwischen 0 und 255. Der Bildschirmspeicher entspricht einer Gruppe von 1000 Adressen, der Farbspeicher oder Farb-RAM genannt wird. Dieses Farb-RAM belegt den Speicher von 55296 ($D800) bis 56295 ($DBE7). Jede Farb-RAM-Adresse speichert 4 Bit und kann daher eine beliebige ganze Zahl zwischen 0 und 15 aufnehmen.

Die verschiedenen Grafikmodi werden über 47 Steuerregister im Videocontroller-Baustein ausgewählt. Viele Grafikfunktionen lassen sich steuern, indem der richtige Wert über die POKE-Anweisung in eines der Register geschrieben wird, das im Adreßbereich von 53248 ($D000) bis 53294 ($D02E) liegt.

Wahl der Video-Bank

Der Videocontroller-Baustein kann immer nur auf einen Speicherbereich von 16 KByte zugreifen. Da im C 64 64 KByte RAM untergebracht sind, soll der Videocontroller natürlich auch den ganzen Speicher »sehen« können. Dies ist möglich. Es gibt vier verschiedene Banks (oder Abschnitte), die für jeweils 16 KByte gelten. Nun muß lediglich noch geregelt werden, auf welche dieser Abschnitte der Videocontroller-Baustein zugreift. Auf diese Weise kann der Baustein die gesamte Speicherkapazität von 64 KByte ausnutzen. Die Bankanwahl-Bits, die Ihnen einen Zugriff auf die verschiedenen Speicherabschnitte ermöglichen, befinden sich im Complex-Interface-Adapter #2 (CIA #2) 6526. Über die Basic-Anweisung POKE und PEEK wird eine Bank durch Steuerung der Bits 0 und 1 von Port A des CIA #2 (oder hex 56576 $DD00) gewählt. Zur Änderung der Speicherabschnitte müssen diese zwei Bit auf Ausgabe gesetzt sein. Dies wird anhand nachstehender Befehle deutlich: POKE 56578,PEEK(56578)OR 3: REM BITS 0 UND 1 SETZEN POKE 56576,(PEEK(56576)AND 252)OR A:REM VIDEO-BANK WECHSELN

»A« muß einen der folgenden Werte haben (Tabelle 1). Dieses Konzept der 16-KByte-Abschnitte spielt bei allen Anwendungen des VIC eine Rolle. Sie sollten stets wissen, auf welche Bank der Videocontroller zugreift, denn dadurch wird festgelegt, woher die Zeichendatenmuster kommen, wo sich der Bildschirm und der Speicherbereich für die Sprites befinden. Nach dem Einschalten des C 64 wird automatisch Bank 0 ($0000-$3FFF) aktiviert. Anmerkung: Der Zeichensatz des Commodore 64 ist in den Banks 1 und 3 für den Videocontroller-Baustein nicht verfügbar.

Wert von A Bits Bank Start-Platz Bereich des Videocontroller-Bausteins
0 00 3 49152 ($C000-$FFFF)
1 01 2 32768 ($8000-$BFFF)
2 10 1 16384 ($4000-$7FFF)
3 11 0 0 ($0000-$3FFF) (Standardwert)
Tabelle 1. Alle möglichen 16-KByte-Bänke des Videocontrollers

Bildschirmspeicher

Durch POKEn in das Kontrollregister 53272 ($D018 HEX) kann die Adresse des Bildschirmspeichers geändert werden. Dieses Register wird jedoch auch zur Steuerung des jeweils benutzten Zeichensatzes verwendet. Achten Sie daher besonders darauf, diesen Teil des Steuerregisters nicht zu stören. Die oberen 4 Bit steuern den Bildschirmspeicher. Um den Bildschirm in einen anderen Bereich zu legen, ist folgende Anweisung erforderlich:

POKE53272,(PEEK(53272) AND15)ORA

Hierbei hat A einen der folgenden Werte (Tabelle 2).

A Bits Lage*
dezimal hexadezimal
0 0000XXXX 0 $0000
16 0001XXXX 1024 $0400 (Standards)
32 0010XXXX 2048 $0800
48 0011XXXX 3072 $0C00
64 0100XXXX 4096 $1000
80 0101XXXX 5120 $1400
96 0110XXXX 6144 $1800
112 0111XXXX 7168 $1C00
128 1000XXXX 8192 $2000
144 1001XXXX 9216 $2400
160 1010XXXX 10240 $2800
176 1011XXXX 11264 $2C00
192 1100XXXX 12288 $3000
208 1101XXXX 13312 $3400
224 1110XXXX 14336 $3800
240 1111XXXX 15360 $3C00

* Bitte denken Sie daran, daß die Startadresse der jeweiligen Bank des Videocontroller-Bausteins addiert werden muß.

Tabelle 2. Die oberen vier Bit des Kontrollregisters bestimmen die Lage des Bildschirmspeichers

Farbspeicher

Der Farbspeicher kann nicht verschoben werden. Er befindet sich stets im Adreßbereich von 55296 ($D800) bis 56295 ($DBE7). Bildschirmspeicher und Farbspeicher werden in den verschiedenen Grafikmodi unterschiedlich benutzt. Ein in einem Modus erstelltes Bild sieht in einem anderen Grafikmodus häufig anders aus.

Zeichenspeicher

Für die Programmierung von Grafiken ist es wesentlich, von wo genau der Videocontroller die Zeicheninformation bekommt. Normalerweise erhält der Baustein die Konturen der anzuzeigenden Zeichen vom Character-Generator-ROM. In diesem Baustein sind die Muster gespeichert, die die verschiedenen Buchstaben, Zeichen, Interpunktionssymbole und alle anderen Zeichen der Tastatur bilden.

Eines der Merkmale des Commodore 64 ist seine Fähigkeit, in RAM-Speicher befindliche Muster zu benutzen. Diese RAM-Muster werden von Ihnen erstellt, so daß ein nahezu unbegrenzter Satz an Symbolen für Spiele und so weiter zur Verfügung steht.

Ein normaler Zeichensatz enthält 256 Zeichen, bei dem jedes Zeichen durch 8 Byte bestimmt wird. Da jedes Zeichen also 8 Byte beansprucht, benötigt der komplette Zeichensatz 256 x 8 = 2 KByte. Da der Videocontroller-Baustein gleichzeitig auf 16 KByte zugreift, gibt es acht verschiedene Speicherplatzmöglichkeiten für einen vollständigen Zeichensatz. Sie brauchen natürlich nicht immer einen ganzen Zeichensatz zu verwenden. Er muß jedoch stets an einem der acht möglichen Startplätze beginnen. Die Lage des Zeichenspeichers wird durch 3 Bit vom Videocontroller kontrolliert (53272 ($D018 HEX)). Die Bits 3, 2 und 1 steuern die Lage des Zeichensatzes, Bit 0 wird überlesen. Um die Lage des Zeichensatzes zu ändern, benutzen Sie folgende Basic-Anweisung:

POKE 53272,(PEEK(53272) AND240)OR A

Hierbei hat A einen der folgenden Werte (Tabelle 3).

Wert Bits Lage des Zwischenspeichers*
dezimal hexadezimal
0 XXXX000X 0 $0000-$07FF
2 XXXX001X 2048 $0800-$0FFF
4 XXXX010X 4096 $1000-$17FF ROM-Image in Bank 0 & 2 (Standard)
6 XXXX011X 6144 $1800-$1FFF ROM-Image in Bank 0 & 2
8 XXXX100X 8192 $2000-$27FF
10 XXXX101X 10240 $2800-$2FFF
12 XXXX110X 12288 $3000-$37FF
14 XXXX111X 14336 $3800-$3FFF

*Bitte denken Sie daran, die Startadresse der Bank zu addieren.

Tabelle 3. Die Bits 1, 2 und 3 des Kontrollregisters bestimmen die Lage des Zeichensatzspeichers

Greift der VIC auf die Zeichendaten zu, so wird das ROM eingeschaltet. Ansonsten wird dieser Bereich von den Ein-/Ausgaberegistern beansprucht, und das Zeichen-ROM kann nur vom VIC erreicht werden.

Es kann jedoch passieren, daß Sie das Zeichen-ROM benötigen, und zwar dann, wenn Sie programmierbare Zeichen benutzen wollen und eine Kopie eines Teils vom Zeichen-ROM für die Zeichendefinition brauchen. In diesem Fall müssen Sie das Ein-/Ausgaberegister aus- und das Zeichen-ROM einschalten. Dann können Sie kopieren. Danach muß das Ein-/Ausgaberegister erneut eingeschaltet werden. Während des Kopierens (bei ausgeschalteter Ein-/Ausgabe) sind keine Unterbrechungen erlaubt. Für Unterbrechungen werden nämlich die Ein-/Ausgaberegister benötigt. Wenn Sie dies vergessen und eine Unterbrechung vornehmen, passiert Unvorhersehbares. Die Tasteneingabe darf während des Kopierens nicht gelesen werden. Um die Tastatur und weitere normale Unterbrechungen abzuschalten, die mit dem C 64 möglich sind, benutzen Sie folgende POKE-Anweisung:

POKE 56334,PEEK(56334) AND254 (Interrupt AUS)

Wenn Sie den Zugriff auf das Zeichen-ROM beendet haben, wird die Tastatur durch folgende POKE-Anweisung eingeschaltet: POKE 56334,PEEK(56334)OR1 (Interrupt EIN) Durch folgende POKE-Anweisung wird die Ein-/Ausgabe ausgeschaltet und das Zeichen-ROM eingeschaltet:

POKE 1,PEEK(1)AND251

Das Zeichen-ROM befindet sich nun im Bereich von 53248 bis 57343 ($D000 bis $DFFF). Um die Ein-/Ausgabe für den normalen Betrieb zu aktivieren, ist folgende POKE-Anweisung erforderlich:

POKE 1,PEEK(1)OR4

Standardzeichenmodus

Beim Einschalten des C 64 befindet sich dieser im Standardzeichenmodus, in dem Sie normalerweise programmieren.

Zeichen können aus dem ROM oder dem RAM gelesen werden. Normalerweise wird jedoch auf die Zeichen im ROM zugegriffen. Benötigen Sie für ein Programm spezielle Grafikzeichen, so sind lediglich die neuen Zeichenmuster im RAM zu definieren und der VIC ist anzuweisen, die Zeicheninformationen aus dem RAM und nicht aus dem Zeichen-ROM zu nehmen.

Um Zeichen auf dem Bildschirm in Farbe anzuzeigen, greift der Videocontroller-Baustein auf den Bildschirmspeicher zu, um den Zeichen-Code für diesen Bildschirmplatz zu bestimmen. Gleichzeitig greift er auf den Farbspeicher zu, um die Farbe für die Zeichenanzeige festzulegen. Der Zeichen-Code wird vom Videocontroller in die Startadresse des 8-KByte-Satzes mit Ihrem Zeichenmuster umgesetzt.

Die Umsetzung ist nicht zu kompliziert, zur Erstellung der gewünschten Adresse werden jedoch verschiedene Punkte kombiniert. Zunächst ist der von Ihnen bei der POKE-Anweisung für den Bildschirmspeicher benutzte Zeichencode mit 8 zu multiplizieren. Danach wird der Anfang vom Zeichenspeicher addiert. Nun werden die Bankanwahl-Bits berücksichtigt. Hierzu wird die Basisadresse addiert. Anhand der folgenden einfachen Gleichung können Sie sehen, wie dies gemeint ist: Zeichenadresse = Bildschirmcode x 8 + (Zeichensatz x 2048) + (Bank x 16348)

Zeichendefinitionen

Jedes Zeichen wird aus einer Matrix von 8 x 8 Punkten gebildet. Hierbei können die einzelnen Punkte entweder ein- oder ausgeschaltet sein. Beim Commodore 64 sind die Zeichenbits im Zeichengenerator ROM abgelegt. Jedes Zeichen ist hierbei als Satz von 8 Byte gespeichert. Jedes Byte steht für das Punktmuster einer Reihe im Zeichen und jedes Bit für einen Punkt. Der Zeichenspeicher im ROM beginnt ab 53248 (bei ausgeschalteter Ein-/Ausgabe). Die ersten 8 Byte ab 53248 ($D000) bis 53255 ($D007) enthalten das Muster für das Zeichen @, dessen Zeichencodewert im Bildschirmspeicher 0 ist. Die nächsten 8 Byte ab 53256 ($D008) bis 53263 ($D00F) enthalten die Information zur Bildung des Buchstabens A (Bild 1).

Belegung binär PEEK
   ** 00011000 24
  **** 00111100 60
 **  ** 01100110 102
 ****** 01111110 126
 **  ** 01100110 102
 **  ** 01100110 102
 **  ** 01100110 102
00000000 0
Bild 1. Der Buchstabe »A« steht im Zeichen-ROM in den Speicherzellen von 53256 bis 53263

Jeder vollständige Zeichensatz beansprucht eine Speicherkapazität von 2 KByte (2048 Bit). Insgesamt sind 256 Zeichen vorhanden. Da es insgesamt zwei Zeichensätze gibt, enthält der ROM-Zeichenspeicher insgesamt 4 KByte Speicherplatz.

Programmierbare Zeichen

Da die Zeichen im ROM gespeichert sind, sieht es so aus, als ob sie für frei programmierbare Zeichen nicht geändert werden könnten. Der Speicherplatz, der dem VIC mitteilt, wo die Zeichen zu finden sind, ist jedoch ein programmierbares Register. Dieses kann so geändert werden, daß es auf viele Speicherbereiche zeigt, indem der Zeichenspeicherzeiger so geändert wird, daß er auf das RAM zeigt. Alle Buchstaben, Zahlen oder Standardgrafikzeichen vom C 64 müssen zuerst in den RAM-Speicher kopiert werden, damit Sie ihn in Ihrem Programm benutzen können. Achtung: Achten Sie darauf, daß Ihr Zeichensatz nicht vom Basic-Programm, das auch das RAM benutzt, überschrieben wird.

Zwei Adressen im C 64 dürfen nicht als Beginn des Zeichensatzes gewählt werden: Adresse 0 und Adresse 2048. Der erste darf nicht benutzt werden, weil das System auf Seite 0 (0-Page) wichtige Daten speichert. Adresse 2048 ist der Beginn Ihres Basic-Programms!

Für Ihren Zeichensatz stehen jedoch noch sechs weitere Anfangspositionen zur Verfügung. Am besten wählen Sie hierzu den Bereich ab 12288 ($3000). Dies erfolgt, indem zu den unteren 4 Bit in Speicherzelle 53272 der Wert 12 addiert wird. Probieren Sie nun folgende POKE-Anweisung aus:

POKE 53272,(PEEK(53272) AND240)+12

Sofort sind alle Buchstaben vom Bildschirm verschwunden. Der Grund hierfür liegt darin, daß bis jetzt noch kein Zeichensatz ab Adresse 12288 steht ... nur zufällige Bytes. Kehren Sie durch Betätigen der Tasten <RUN/STOP + RESTORE> wieder zurück in den Normalmodus.

Nun wollen wir Grafikzeichen erstellen. Um Ihren Zeichensatz zu schützen, sollten Sie die Speicherkapazität für das Basic reduzieren. Der Speicher in Ihrem Computer bleibt unverändert. Sie haben lediglich dem Basic die Anweisung gegeben, einen bestimmten Teil nicht zu benutzen. Tippen Sie folgendes ein:

PRINT FRE(0)-(SGN(FRE(0)) <0)*65535

Die angezeigte Zahl gibt die unbenutzte Speicherkapazität an. Geben Sie nun folgendes ein:

POKE 52,48:POKE56,48:CLR

Und nun:

PRINT FRE(0)-(SGN(FRE(0)) <0)*65535

Sehen Sie die Änderung? Das Basic nimmt nun an, daß weniger Speicherkapazität zur Verfügung steht. In diesem gewonnenen Speicherplatz können Sie nun Ihren Zeichensatz unterbringen. Als nächstes sind die Zeichen im RAM zu definieren. Zu Beginn stehen ab 12288 ($3000) zufällige Daten. Durch folgendes Programm werden 64 Zeichen vom ROM- in den RAM-Zeichensatz übertragen:

5 PRINTCHR$(142)
10 POKE52,48:POKE56,48:CLR
20 POKE56334,PEEK(56334)AND254
30 POKE1,PEEK(1)AND251
40 FORI=0TO511:POKEI+12288,PEEK(I+53248):NEXT
50 POKE1,PEEK(1)OR4
60 POKE56334,PEEK(56334)OR1
70 END

Geben Sie nun ein: POKE 53272,(PEEK(53272)AND240) + 12. Nichts passiert, stimmt's? Fast nichts! Der C 64 bekommt die Zeicheninformationen nun vom RAM und nicht vom ROM. Da wir jedoch die Zeichen genau aus dem ROM kopiert haben, ist kein Unterschied zu sehen ...noch nicht. Die Zeichen können nun leicht geändert werden. Löschen Sie den Bildschirm und drücken Sie die Taste <@>. Bewegen Sie den Cursor um einige Zeilen nach unten, und geben Sie dann folgendes ein:

FOR I = 12288 TO 12288+7:POKE I,255 - PEEK(I):NEXT Sie haben soeben ein »@« in Reversdarstellung erstellt.

Bewegen Sie nun den Cursor wieder zum Programmanfang und drücken Sie die Taste <RETURN> erneut, um das Zeichen noch einmal umzukehren. Die Tabelle der Bildschirm-Codes zeigt Ihnen, wo die einzelnen Zeichen im RAM stehen. Denken Sie daran, daß zur Speicherung jedes Zeichens acht Speicherplätze benötigt werden.

Wird ein anderes Zeichen gewünscht, so ist vorher noch etwas zu berücksichtigen. Was ist zu tun, wenn Sie nun Zeichennummer 154, ein umgekehrtes Z, wünschen? Sie können das erreichen, indem Sie ein Z umkehren, oder Sie können den Satz der umgekehrten Zeichen aus dem ROM kopieren oder einfach das eine Zeichen aus dem ROM holen und ein nicht benötigtes Zeichen im RAM dadurch ersetzen. Nehmen wir an, Sie benötigen das Zeichen > nicht mehr. Dieses Zeichen soll also gegen das negativ dargestellte Zeichen Z ausgetauscht werden. Geben Sie folgendes ein:

FOR I=0 TO 7:POKE 12784 + I,255-PEEK(I+12496):NEXT

(Diese Änderung betrifft jedoch nur die Darstellung auf dem Bildschirm. Auch wenn das Zeichen wie ein umgekehrtes Z aussieht, wirkt es in einem Programm doch immer noch als >). Probieren Sie das an einem Beispiel aus, bei dem dieses Zeichen benötigt wird.

Fassen wir zusammen: Sie können nun Zeichen aus dem ROM in das RAM kopieren. Hinsichtlich der programmierbaren Zeichen fehlt Ihnen also nur noch ein Punkt (und zwar der Beste!) ... das Erstellen Ihrer eigenen Zeichen.

Wissen Sie noch, wie Zeichen im ROM gespeichert sind? Die Bit-Muster der Zeichen-Bytes geben direkt das Zeichen wieder. Werden 8 Byte übereinander angeordnet und jedes Byte als achtstellige Binärzahl geschrieben, so entsteht eine 8x8-Matrix, die das Zeichen darstellt. Enthält ein Bit eine 1, so ist an diesem Platz ein Punkt; enthält es eine 0, ist an diesem Platz eine Leerstelle.

Mehrfarbige Grafiken

Durch die standardmäßige hochauflösende Grafik können Sie selbst Einzelprodukte auf dem Bildschirm ansteuern. Für jeden Punkt im Zeichensatz stehen zwei Werte zur Verfügung: 1 für EIN und 0 für AUS. Hat ein Punkt den Wert 1, so wird er in der von Ihnen für die jeweilige Bildschirmposition gewählten Farbe angezeigt. Bei der hochauflösenden Grafik können alle Punkte innerhalb der 8x8-Matrix entweder in der Hinter- oder Vordergrundfarbe angezeigt werden. Hierdurch wird die Farbauflösung innerhalb dieses Bereichs eingeschränkt. So können zum Beispiel Schwierigkeiten entstehen, wenn sich zwei Linien mit verschiedenen Farben kreuzen.

Dieses Problem wird durch den Mehrfarbenmodus gelöst. Hierbei kann jeder Punkt eine von vier Farben annehmen: Bildschirmfarbe (Hintergrundfarbregister #0), die Farbe im Hintergrund #1, die Farbe im Hintergrundfenster #2 oder die Zeichenfarbe. Die einzige Einschränkung liegt in der horizontalen Auflösung, da im Mehrfarbenmodus jeder Punkt doppelt so breit ist wie bei Hochauflösung. Es überwiegen jedoch bei weitem die vielen Vorteile des Mehrfarbenmodus.

Zum Einschalten des Modus für mehrfarbige Zeichen wird Bit 4 des Steuerregisters durch folgende POKE-Anweisung bei 53270 ($D016) gesetzt:

POKE 53270,PEEK(53270)OR 16

Zum Abschalten dieser Betriebsart wird Bit 4 der gleichen Speicherzelle (53270) durch nachstehende POKE-Anweisung auf 0 gesetzt:

POKE 53270,PEEK(53270)AND 239

Dieser Mehrfarbenmodus wird für jede Bildschirmstelle ein- oder ausgeschaltet, so daß Mehrfarbengrafiken und Grafiken mit hoher Auflösung (HiRes) kombiniert werden können. Dies wird über Bit 3 im Farbspeicher gesteuert. Der Farbspeicher beginnt ab 55296 ($D800). Ist die Zahl im Farbspeicher kleiner als 8 (0 bis 7), so gilt für die entsprechende Stelle auf dem Bildschirm Hochauflösung in der gewählten Farbe (0 bis 7). Ist die Zahl im Farbspeicher größer oder gleich 8 (von 8 bis 15), dann wird die entsprechende Stelle im Mehrfarbenmodus angezeigt.

Die Zeichenfarbe einer Bildschirm-Position kann durch eine POKE-Anweisung im Farbspeicher geändert werden. Durch das POKEn einer Zahl von 0 bis 7 werden die Zeichen in normaler Farbdarstellung angezeigt. Durch das POKEn einer Zahl zwischen 8 und 15 gilt für die entsprechende Bildschirmstelle der Mehrfarbenmodus. Das heißt durch das Einschalten von Bit 3 im Farbspeicher wird der Mehrfarbenmodus und durch Ausschalten der normale Hochauflösungsmodus gewählt.

Gilt für eine Bildschirmstelle der Mehrfarbenbetrieb, so wird durch die Zeichen-Bits bestimmt, welche Farben für die Punkte angezeigt werden. Nachstehend sehen Sie zum Beispiel die Darstellung des Buchstabens A und das entsprechende Bit-Muster (Bild 2).

Darstellung Bit-Muster
   ** 00011000
  ***** 00111100
 **  ** 01100110
 ****** 01111110
 **  ** 01100110
 **  ** 01100110
 **  ** 01100110
00000000
Bild 2. Die Bit-Muster des Buchstabens »A« im Normalmodus

Im normalen oder HiRes-Modus wird die Bildschirmfarbe bei jedem 0-Bit und die Zeichenfarbe stets da angezeigt, wo das Bit 1 ist. Beim Mehrfarbenmodus werden die Bits paarweise benutzt (Bild 3).

Darstellung Bit-Muster
  AABB 00011000
  CCCC 00111100
AABBAABB 01100110
AACCCCBB 01111110
AABBAABB 01100110
AABBAABB 01100110
AABBAABB 01100110
00000000
Bild 3. Die Bit-Muster des Buchstabens »A« im Multicolor-Modus

Im Bildbereich werden die durch AA gekennzeichneten Stellen in der Hintergrundfarbe #1, die durch BB gekennzeichneten Stellen in der Hintergrundfarbe #2 und die durch CC gekennzeichneten Stellen in der Zeichenfarbe dargestellt. Dies wird entsprechend nachstehender Tabelle 4 durch die Bit-Paare bestimmt.

Bit-Paar Farbregister Speicherplatz
00 Hintergrundfarbe #0 (Bildschirmfarbe) 53281 ($D021)
01 Hintergrundfarbe #1 53282 ($D022)
10 Hintergrundfarbe #2 53283 ($D023)
11 Durch die unteren 3 Bits im Farbspeicher bestimmte Farbe Farbspeicher
Tabelle 4. Mögliche Farbkombinationen für Multicolor-Zeichen

Hintergrundfarbmodus

In diesem Modus können Sie für jedes einzelne Zeichen sowohl die Hintergrund- als auch die Vordergrundfarbe steuern. So ist es zum Beispiel möglich, auf einem weißen Bildschirm ein blaues Zeichen mit gelbem Hintergrund anzuzeigen.

Für den erweiterten Hintergrundfarbmodus stehen vier Register zur Verfügung. Für jedes Register kann eine der 16 Farben gewählt werden.

In diesem Modus wird über den Farbspeicher die Vordergrundfarbe festgelegt. Die Anwendung ist die gleiche wie beim Standard-Zeichenmodus.

Bei erweitertem Modus ist die Anzahl der verschiedenen anzeigbaren Zeichen jedoch eingeschränkt. Ist der erweiterte Farbmodus eingeschaltet, können nur die ersten 64 Zeichen des Zeichen-ROM (oder die ersten 64 in Ihrem programmierbaren Zeichensatz) benutzt werden. Zwei Bit des Zeichen-Codes werden nämlich für die Wahl der Hintergrundfarbe benutzt.

Der Zeichen-Code (die auf dem Bildschirm gePOKEte Zahl) vom Buchstaben A ist eine 1. Im erweiterten Farbmodus erscheint nach dem POKEn einer 1 ein A. Normalerweise muß nach dem POKEn von 65 das Zeichen mit dem Zeichen-Code (CHR$) 129, also ein invertiertes A, erscheinen. Dies passiert nicht im erweiterten Farbmodus. Es erscheint genau das gleiche A wie vorher, jedoch eine andere Hintergrundfarbe. Entnehmen Sie die Codes der Tabelle 5.

Zeichencode Hintergrundfarbregister
Bereich BIT 7 BIT 6 Nummer Adresse
0 - 63 0 0 0 53281 ($D021)
64 - 127 0 1 1 53282 ($D022)
128 - 191 1 0 2 53283 ($D023)
192 - 255 1 1 3 53284 ($D024)
Tabelle 5. Im Hintergrundfarbmodus können die ersten 64 Zeichen mit unterschiedlichen Hintergrundfarben dargestellt werden

Zum Einschalten des erweiterten Farbmodus wird Bit 6 des VIC-II-Registers mit der Adresse 53265 ($D011) auf 1 gesetzt. Dies geschieht durch folgende POKE-Anweisung:

POKE 53265,PEEK(53265)OR 64

Zum Ausschalten des erweiterten Farbmodus wird Bit 6 des VIC-II-Registers mit der Adresse 53265 ($D011) auf 0 gesetzt. Hierzu dient folgende Anweisung:

POKE 53265, PEEK(53265)AND 191

Damit sind wir am Schluß des ersten Teils angelangt. Beim nächsten Mal werden wir uns mit dem Bit-Map-Modus beschäftigen. Sie werden dann lernen, wie man HiRes- und Multicolor-Bilder auf den Bildschirm zaubert.

(ah)

Gekürzter Auszug aus dem Buch »Alles über den C 64« aus der Commodore Sachbuchreiche, Markt & Technik Verlag, Hans-Pinsel-Str. 2, 8013 Haar, Bestnr.: ISBN 3-89090-379-7, Preis 59 Mark

PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →