Eine kleine Einführung in Grafik : Hires Grafik mit dem C64
|
Beim Erstellen von Anwendungen und einfachen Spielen ist eine
Oberfläche mit ansprechender Grafik heutzutage zum Standard
geworden. Beim C64 hat man die Möglichkeit den Hires-Modus
für diese Zwecke zu verwenden. Dieser Modus bietet zwar nur eine
geringe Farbauswahl, aber die Auflösung von 320 x 200 Pixeln macht
diesen für Oberflächen und hochauflösende Lineart-Grafik
oder konvertierte Bilder interessant.
Hires Modus
Der C64 bietet im Hiresmodus
eine Auflösung von 320 x 200 Pixeln. Leider ist die Farbauswahl
auf eine 8x8 Kachel beschränkt. Im Prinzip kann man 1000 Kacheln
mit den üblichen 16 Farben versehen. Diese werden nicht wie
üblich aus den Farbspeicher geholt, sondern beim Hires
Bitmap-Modus aus dem Bildschirmspeicher (#1024-2024).
So kann man nur schwierig
mehrere Farben in einem Screen verwenden. Besonders gut ist dieser
Modus für Lineart oder andere Monochrom-Grafik geeignet.
Die Auflösung von 320*200
Pixel ergeben 64000 Pixel, für die 8 Kilobyte Speicher
benötigt werden. In dieser kleinen Anleitung wird nur das
Einschalten der Grafik erklärt. Grafikprogramme und erweiterte
Programmierung folgen später.
|
Praxis:
Zum Einschalten des Bit-Mapping-Betriebs muß Bit 5 des
VIC-II-Kontrollregisters in Adresse #53265 ($d011 in HEX)
gesetzt werden. Hier wird folgende Anweisung verwendet :
POKE 53265,PEEK(53265) OR 32
Zum Abschalten dieser Betriebsart wird Bit 5 des
VIC-II-Kontrollregisters auf 0 gesetzt :
POKE 53265,PEEK(53265) OR 223
Die Plazierung der Bitmap im Speicher muß dem Computer ebenfalls
mitgeteilt werden. Mit dem folgenden Beispiel wird eine Hires-Bitplane
ab #8192 ($2000 HEX) eingeschaltet :
POKE 53272,PEEK(53272) OR 8 : REM Hires ab $2000
POKE 53265,PEEK(53265) OR 32 : REM Bitmap Mode
Das selbe Beispiel in Assembler :
|
HiresOn
: LDA$d018
ORA #$08 ; Bit 3
STA$d018 ; in #53272 setzen
LDA $d011
ORA #$20 ; Bit 5
STA $d011 ; in #53265 setzen
RTS
|
Wenn
sich keine Grafik im Speicher befindet, muß man die diesen
Bereich zuerst löschen. Das Beispiel in Basic möchte ich hier
erst garnicht aufführen, nur soviel : Man sieht wie jedes Byte
überfahren wird. ;-) Es ist wirklich unbrauchbar.
Hier ein kleines Beispiel in
annehmbarer Geschwindigkeit für den Makro Assembler :
|
ldx #$00
ldy #$00 ;
Zähler
loop: sta $2000,x ;
Bitmap-Speicher
dex
bne loop ; innere
Schleife
iny
; äußere Schleife
inc *-5
; Hi-byte im Bitmap-Speicher erhöhen
cpy #$20 ; 32*256
Byte = 8 Kbyte
bne loop ;
äußere Schleife
rts
|